Commit 9e77f7f1282817f52c1bc12de1a0b8b6845516e4
1 parent
7809944b
Exists in
staging
and in
32 other branches
blocks: fix rendering content when inheritance is involved
Showing
7 changed files
with
27 additions
and
30 deletions
Show diff stats
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 | ... | ... |