Commit 9e77f7f1282817f52c1bc12de1a0b8b6845516e4

Authored by Braulio Bhavamitra
1 parent 7809944b

blocks: fix rendering content when inheritance is involved

app/helpers/boxes_helper.rb
@@ -87,41 +87,38 @@ module BoxesHelper @@ -87,41 +87,38 @@ module BoxesHelper
87 box_decorator == DontMoveBlocks 87 box_decorator == DontMoveBlocks
88 end 88 end
89 89
90 - def render_block_content(block)  
91 - template_name = block.class.name.underscore.gsub('_block', '')  
92 - template_filename = "#{template_name}.html.erb"  
93 - if File.exists? Rails.root.join('app', 'views', 'blocks', template_filename)  
94 - render :file => "blocks/#{template_name}", :locals => { :block => block }  
95 - else  
96 - nil 90 + def render_block block, prefix = nil, klass = block.class
  91 + template_name = klass.name.underscore.sub '_block', ''
  92 + begin
  93 + render template: "blocks/#{prefix}#{template_name}", locals: { block: block }
  94 + rescue ActionView::MissingTemplate
  95 + return if klass.superclass === Block
  96 + render_block block, prefix, klass.superclass
97 end 97 end
98 end 98 end
99 99
100 - def render_block_footer(block)  
101 - template_name = block.class.name.underscore.gsub('_block', '')  
102 - template_filename = "#{template_name}.html.erb"  
103 - if File.exists? Rails.root.join('app', 'views', 'blocks', 'footers', template_filename)  
104 - render :file => "blocks/footers/#{template_name}", :locals => { :block => block }  
105 - else  
106 - nil  
107 - end 100 + def render_block_content block
  101 + # FIXME: this conditional should be removed after all
  102 + # block footer from plugins methods get refactored into helpers and views.
  103 + # They are a failsafe until all of them are done.
  104 + return block.content if block.method(:content).owner != Block
  105 + render_block block
  106 + end
  107 +
  108 + def render_block_footer block
  109 + return block.footer if block.method(:footer).owner != Block
  110 + render_block block, 'footers/'
108 end 111 end
109 112
110 def display_block_content(block, main_content = nil) 113 def display_block_content(block, main_content = nil)
111 - # FIXME: these conditionals should be removed after all block footer from plugins methods get refactored into helpers and views. They are a failsafe until all of them are done.  
112 content = nil 114 content = nil
113 if block.main? 115 if block.main?
114 content = wrap_main_content(main_content) 116 content = wrap_main_content(main_content)
115 else 117 else
116 - if(block.method(:content).owner != Block)  
117 - content = block.content()  
118 - else  
119 - content = render_block_content(block)  
120 - end 118 + content = render_block_content block
121 end 119 end
122 result = extract_block_content(content) 120 result = extract_block_content(content)
123 - # FIXME: this ternary conditional should be removed after all block footer from plugins methods get refactored into helpers and views  
124 - footer_content = extract_block_content(block.method(:footer).owner != Block ? block.footer : render_block_footer(block)) 121 + footer_content = extract_block_content(render_block_footer block)
125 unless footer_content.blank? 122 unless footer_content.blank?
126 footer_content = content_tag('div', footer_content, :class => 'block-footer-content' ) 123 footer_content = content_tag('div', footer_content, :class => 'block-footer-content' )
127 end 124 end
test/unit/categories_block_test.rb
@@ -22,7 +22,7 @@ class CategoriesBlockTest < ActiveSupport::TestCase @@ -22,7 +22,7 @@ class CategoriesBlockTest < ActiveSupport::TestCase
22 should 'display category block' do 22 should 'display category block' do
23 block = CategoriesBlock.new 23 block = CategoriesBlock.new
24 24
25 - self.expects(:render).with(:file => 'blocks/categories', :locals => { :block => block}) 25 + self.expects(:render).with(template: 'blocks/categories', locals: {block: block})
26 render_block_content(block) 26 render_block_content(block)
27 end 27 end
28 28
test/unit/featured_products_block_test.rb
@@ -109,7 +109,7 @@ class FeaturedProductsBlockTest < ActiveSupport::TestCase @@ -109,7 +109,7 @@ class FeaturedProductsBlockTest < ActiveSupport::TestCase
109 should 'display feature products block' do 109 should 'display feature products block' do
110 block = FeaturedProductsBlock.new 110 block = FeaturedProductsBlock.new
111 111
112 - self.expects(:render).with(:file => 'blocks/featured_products', :locals => { :block => block}) 112 + self.expects(:render).with(template: 'blocks/featured_products', locals: {block: block})
113 render_block_content(block) 113 render_block_content(block)
114 end 114 end
115 115
test/unit/highlights_block_test.rb
@@ -84,7 +84,7 @@ class HighlightsBlockTest < ActiveSupport::TestCase @@ -84,7 +84,7 @@ class HighlightsBlockTest < ActiveSupport::TestCase
84 84
85 should 'display highlights block' do 85 should 'display highlights block' do
86 block = HighlightsBlock.new 86 block = HighlightsBlock.new
87 - self.expects(:render).with(:file => 'blocks/highlights', :locals => { :block => block}) 87 + self.expects(:render).with(template: 'blocks/highlights', locals: {block: block})
88 88
89 render_block_content(block) 89 render_block_content(block)
90 end 90 end
test/unit/profile_image_block_test.rb
@@ -11,7 +11,7 @@ class ProfileImageBlockTest < ActiveSupport::TestCase @@ -11,7 +11,7 @@ class ProfileImageBlockTest < ActiveSupport::TestCase
11 should 'display profile image' do 11 should 'display profile image' do
12 block = ProfileImageBlock.new 12 block = ProfileImageBlock.new
13 13
14 - self.expects(:render).with(:file => 'blocks/profile_image', :locals => { :block => block }) 14 + self.expects(:render).with(template: 'blocks/profile_image', locals: { block: block })
15 render_block_content(block) 15 render_block_content(block)
16 end 16 end
17 17
test/unit/profile_info_block_test.rb
@@ -19,7 +19,7 @@ class ProfileInfoBlockTest < ActiveSupport::TestCase @@ -19,7 +19,7 @@ class ProfileInfoBlockTest < ActiveSupport::TestCase
19 include BoxesHelper 19 include BoxesHelper
20 20
21 should 'display profile information' do 21 should 'display profile information' do
22 - self.expects(:render).with(:file => 'blocks/profile_info', :locals => { :block => block }) 22 + self.expects(:render).with(template: 'blocks/profile_info', locals: { block: block })
23 render_block_content(block) 23 render_block_content(block)
24 end 24 end
25 25
test/unit/profile_search_block_test.rb
@@ -18,14 +18,14 @@ class ProfileSearchBlockTest < ActiveSupport::TestCase @@ -18,14 +18,14 @@ class ProfileSearchBlockTest < ActiveSupport::TestCase
18 block = ProfileSearchBlock.new 18 block = ProfileSearchBlock.new
19 block.stubs(:owner).returns(person) 19 block.stubs(:owner).returns(person)
20 20
21 - self.expects(:render).with(:file => 'blocks/profile_search', :locals => { :block => block }) 21 + self.expects(:render).with(template: 'blocks/profile_search', locals: { block: block })
22 render_block_content(block) 22 render_block_content(block)
23 end 23 end
24 24
25 should 'provide view_title' do 25 should 'provide view_title' do
26 person = fast_create(Person) 26 person = fast_create(Person)
27 person.boxes << Box.new 27 person.boxes << Box.new
28 - block = ProfileSearchBlock.new(:title => 'Title from block') 28 + block = ProfileSearchBlock.new(title: 'Title from block')
29 person.boxes.first.blocks << block 29 person.boxes.first.blocks << block
30 block.save! 30 block.save!
31 assert_equal 'Title from block', block.view_title 31 assert_equal 'Title from block', block.view_title