Commit 9e77f7f1282817f52c1bc12de1a0b8b6845516e4
1 parent
7809944b
Exists in
web_steps_improvements
and in
9 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 | ... | ... |