Commit 9507e81fe8546c5938886292101ff38ce619e570
1 parent
f448634b
Exists in
master
and in
27 other branches
rails3: return proc to render content of display_content_block
Showing
2 changed files
with
66 additions
and
62 deletions
Show diff stats
plugins/display_content/lib/display_content_block.rb
| ... | ... | @@ -68,50 +68,51 @@ class DisplayContentBlock < Block |
| 68 | 68 | holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)}) |
| 69 | 69 | end |
| 70 | 70 | |
| 71 | - include ActionView::Helpers | |
| 72 | - include Rails.application.routes.url_helpers | |
| 73 | 71 | def content(args={}) |
| 72 | + block = self | |
| 74 | 73 | extra_condition = display_folder_children ? 'OR articles.parent_id IN(:nodes)':'' |
| 75 | 74 | docs = nodes.blank? ? [] : owner.articles.find(:all, :conditions => ["(articles.id IN(:nodes) #{extra_condition}) AND articles.type IN(:types)", {:nodes => self.nodes, :types => VALID_CONTENT}]) |
| 76 | 75 | |
| 77 | - block_title(title) + | |
| 78 | - content_tag('ul', docs.map {|item| | |
| 79 | - if !item.folder? | |
| 80 | - content_sections = '' | |
| 81 | - read_more_section = '' | |
| 82 | - tags_section = '' | |
| 83 | - | |
| 84 | - sections.select { |section| | |
| 85 | - case section[:name] | |
| 86 | - when 'Publish date' | |
| 87 | - content_sections += (display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '') | |
| 88 | - when 'Title' | |
| 89 | - content_sections += (display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '') | |
| 90 | - when 'Abstract' | |
| 91 | - content_sections += (display_section?(section) ? (content_tag('div', item.abstract , :class => 'lead')) : '' ) | |
| 92 | - if display_section?(section) | |
| 93 | - read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more') | |
| 76 | + proc do | |
| 77 | + block.block_title(block.title) + | |
| 78 | + content_tag('ul', docs.map {|item| | |
| 79 | + if !item.folder? | |
| 80 | + content_sections = '' | |
| 81 | + read_more_section = '' | |
| 82 | + tags_section = '' | |
| 83 | + | |
| 84 | + block.sections.select { |section| | |
| 85 | + case section[:name] | |
| 86 | + when 'Publish date' | |
| 87 | + content_sections += (block.display_section?(section) ? (content_tag('div', block.show_date(item.published_at, false), :class => 'published-at') ) : '') | |
| 88 | + when 'Title' | |
| 89 | + content_sections += (block.display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '') | |
| 90 | + when 'Abstract' | |
| 91 | + content_sections += (block.display_section?(section) ? (content_tag('div', item.abstract , :class => 'lead')) : '' ) | |
| 92 | + if block.display_section?(section) | |
| 93 | + read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more') | |
| 94 | + end | |
| 95 | + when 'Body' | |
| 96 | + content_sections += (block.display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' ) | |
| 97 | + when 'Image' | |
| 98 | + image_section = image_tag item.image.public_filename if item.image | |
| 99 | + if !image_section.blank? | |
| 100 | + content_sections += (block.display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' ) | |
| 101 | + end | |
| 102 | + when 'Tags' | |
| 103 | + if !item.tags.empty? | |
| 104 | + tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("") | |
| 105 | + content_sections += (block.display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '') | |
| 106 | + end | |
| 94 | 107 | end |
| 95 | - when 'Body' | |
| 96 | - content_sections += (display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' ) | |
| 97 | - when 'Image' | |
| 98 | - image_section = image_tag item.image.public_filename if item.image | |
| 99 | - if !image_section.blank? | |
| 100 | - content_sections += (display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' ) | |
| 101 | - end | |
| 102 | - when 'Tags' | |
| 103 | - if !item.tags.empty? | |
| 104 | - tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("") | |
| 105 | - content_sections += (display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '') | |
| 106 | - end | |
| 107 | - end | |
| 108 | - } | |
| 108 | + } | |
| 109 | 109 | |
| 110 | - content_sections += read_more_section if !read_more_section.blank? | |
| 110 | + content_sections += read_more_section if !read_more_section.blank? | |
| 111 | 111 | |
| 112 | - content_tag('li', content_sections) | |
| 113 | - end | |
| 114 | - }.join(" ")) | |
| 112 | + content_tag('li', content_sections) | |
| 113 | + end | |
| 114 | + }.join(" ")) | |
| 115 | + end | |
| 115 | 116 | end |
| 116 | 117 | |
| 117 | 118 | def url_params |
| ... | ... | @@ -129,6 +130,23 @@ class DisplayContentBlock < Block |
| 129 | 130 | section[:checked] |
| 130 | 131 | end |
| 131 | 132 | |
| 133 | + #FIXME: this should be in a helper | |
| 134 | + def show_date(date, use_numbers = false, year=true) | |
| 135 | + if date && use_numbers | |
| 136 | + date_format = year ? _('%{month}/%{day}/%{year}') : _('%{month}/%{day}') | |
| 137 | + date_format % { :day => date.day, :month => date.month, :year => date.year } | |
| 138 | + elsif date | |
| 139 | + date_format = year ? _('%{month_name} %{day}, %{year}') : _('%{month_name} %{day}') | |
| 140 | + date_format % { :day => date.day, :month_name => month_name(date.month), :year => date.year } | |
| 141 | + else | |
| 142 | + '' | |
| 143 | + end | |
| 144 | + end | |
| 145 | + | |
| 146 | + def month_name(n) | |
| 147 | + _(MONTHS[n-1]) | |
| 148 | + end | |
| 149 | + | |
| 132 | 150 | protected |
| 133 | 151 | |
| 134 | 152 | def holder |
| ... | ... | @@ -151,20 +169,4 @@ class DisplayContentBlock < Block |
| 151 | 169 | { :profile => [:article], :environment => [:article] } |
| 152 | 170 | end |
| 153 | 171 | |
| 154 | - def show_date(date, use_numbers = false, year=true) | |
| 155 | - if date && use_numbers | |
| 156 | - date_format = year ? _('%{month}/%{day}/%{year}') : _('%{month}/%{day}') | |
| 157 | - date_format % { :day => date.day, :month => date.month, :year => date.year } | |
| 158 | - elsif date | |
| 159 | - date_format = year ? _('%{month_name} %{day}, %{year}') : _('%{month_name} %{day}') | |
| 160 | - date_format % { :day => date.day, :month_name => month_name(date.month), :year => date.year } | |
| 161 | - else | |
| 162 | - '' | |
| 163 | - end | |
| 164 | - end | |
| 165 | - | |
| 166 | - def month_name(n) | |
| 167 | - _(MONTHS[n-1]) | |
| 168 | - end | |
| 169 | - | |
| 170 | 172 | end | ... | ... |
plugins/display_content/test/unit/display_content_block_test.rb
| ... | ... | @@ -352,8 +352,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 352 | 352 | block.stubs(:box).returns(box) |
| 353 | 353 | box.stubs(:owner).returns(profile) |
| 354 | 354 | |
| 355 | - assert_match /.*<a.*>#{a1.title}<\/a>/, block.content | |
| 356 | - assert_match /.*<a.*>#{a2.title}<\/a>/, block.content | |
| 355 | + assert_match /.*<a.*>#{a1.title}<\/a>/, instance_eval(&block.content) | |
| 356 | + assert_match /.*<a.*>#{a2.title}<\/a>/, instance_eval(&block.content) | |
| 357 | 357 | end |
| 358 | 358 | |
| 359 | 359 | should 'list content for all articles lead defined in nodes' do |
| ... | ... | @@ -369,8 +369,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 369 | 369 | block.stubs(:box).returns(box) |
| 370 | 370 | box.stubs(:owner).returns(profile) |
| 371 | 371 | |
| 372 | - assert_match /<div class="lead">#{a1.lead}<\/div>/, block.content | |
| 373 | - assert_match /<div class="lead">#{a2.lead}<\/div>/, block.content | |
| 372 | + assert_match /<div class="lead">#{a1.lead}<\/div>/, instance_eval(&block.content) | |
| 373 | + assert_match /<div class="lead">#{a2.lead}<\/div>/, instance_eval(&block.content) | |
| 374 | 374 | end |
| 375 | 375 | |
| 376 | 376 | should 'not crash when referenced article is removed' do |
| ... | ... | @@ -384,8 +384,10 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 384 | 384 | box.stubs(:owner).returns(profile) |
| 385 | 385 | |
| 386 | 386 | Article.delete_all |
| 387 | - assert_match /<ul><\/ul>/, block.content | |
| 387 | + assert_match /<ul><\/ul>/, instance_eval(&block.content) | |
| 388 | 388 | end |
| 389 | + include ActionView::Helpers | |
| 390 | + include Rails.application.routes.url_helpers | |
| 389 | 391 | |
| 390 | 392 | should 'url_params return myprofile url params if the owner is a profile' do |
| 391 | 393 | profile = create_user('testuser').person |
| ... | ... | @@ -421,7 +423,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 421 | 423 | block.stubs(:box).returns(box) |
| 422 | 424 | box.stubs(:owner).returns(profile) |
| 423 | 425 | |
| 424 | - assert_match /.*<a.*>#{a.title}<\/a>/, block.content | |
| 426 | + assert_match /.*<a.*>#{a.title}<\/a>/, instance_eval(&block.content) | |
| 425 | 427 | end |
| 426 | 428 | |
| 427 | 429 | should 'show abstract if defined by user' do |
| ... | ... | @@ -435,7 +437,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 435 | 437 | block.stubs(:box).returns(box) |
| 436 | 438 | box.stubs(:owner).returns(profile) |
| 437 | 439 | |
| 438 | - assert_match /#{a.abstract}/, block.content | |
| 440 | + assert_match /#{a.abstract}/, instance_eval(&block.content) | |
| 439 | 441 | end |
| 440 | 442 | |
| 441 | 443 | should 'show body if defined by user' do |
| ... | ... | @@ -449,7 +451,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 449 | 451 | block.stubs(:box).returns(box) |
| 450 | 452 | box.stubs(:owner).returns(profile) |
| 451 | 453 | |
| 452 | - assert_match /#{a.body}/, block.content | |
| 454 | + assert_match /#{a.body}/, instance_eval(&block.content) | |
| 453 | 455 | end |
| 454 | 456 | |
| 455 | 457 | should 'display_attribute be true for title by default' do |
| ... | ... | @@ -490,7 +492,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase |
| 490 | 492 | block.stubs(:box).returns(box) |
| 491 | 493 | box.stubs(:owner).returns(profile) |
| 492 | 494 | |
| 493 | - assert_match /#{a.published_at}/, block.content | |
| 495 | + assert_match /#{a.published_at}/, instance_eval(&block.content) | |
| 494 | 496 | end |
| 495 | 497 | |
| 496 | 498 | should 'do not save children if a folder is checked' do | ... | ... |