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 87 box_decorator == DontMoveBlocks
88 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 97 end
98 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 111 end
109 112  
110 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 114 content = nil
113 115 if block.main?
114 116 content = wrap_main_content(main_content)
115 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 119 end
122 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 122 unless footer_content.blank?
126 123 footer_content = content_tag('div', footer_content, :class => 'block-footer-content' )
127 124 end
... ...
test/unit/categories_block_test.rb
... ... @@ -22,7 +22,7 @@ class CategoriesBlockTest < ActiveSupport::TestCase
22 22 should 'display category block' do
23 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 26 render_block_content(block)
27 27 end
28 28  
... ...
test/unit/featured_products_block_test.rb
... ... @@ -109,7 +109,7 @@ class FeaturedProductsBlockTest < ActiveSupport::TestCase
109 109 should 'display feature products block' do
110 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 113 render_block_content(block)
114 114 end
115 115  
... ...
test/unit/highlights_block_test.rb
... ... @@ -84,7 +84,7 @@ class HighlightsBlockTest < ActiveSupport::TestCase
84 84  
85 85 should 'display highlights block' do
86 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 89 render_block_content(block)
90 90 end
... ...
test/unit/profile_image_block_test.rb
... ... @@ -11,7 +11,7 @@ class ProfileImageBlockTest < ActiveSupport::TestCase
11 11 should 'display profile image' do
12 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 15 render_block_content(block)
16 16 end
17 17  
... ...
test/unit/profile_info_block_test.rb
... ... @@ -19,7 +19,7 @@ class ProfileInfoBlockTest < ActiveSupport::TestCase
19 19 include BoxesHelper
20 20  
21 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 23 render_block_content(block)
24 24 end
25 25  
... ...
test/unit/profile_search_block_test.rb
... ... @@ -18,14 +18,14 @@ class ProfileSearchBlockTest < ActiveSupport::TestCase
18 18 block = ProfileSearchBlock.new
19 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 22 render_block_content(block)
23 23 end
24 24  
25 25 should 'provide view_title' do
26 26 person = fast_create(Person)
27 27 person.boxes << Box.new
28   - block = ProfileSearchBlock.new(:title => 'Title from block')
  28 + block = ProfileSearchBlock.new(title: 'Title from block')
29 29 person.boxes.first.blocks << block
30 30 block.save!
31 31 assert_equal 'Title from block', block.view_title
... ...