Commit 9507e81fe8546c5938886292101ff38ce619e570
1 parent
f448634b
Exists in
master
and in
22 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,50 +68,51 @@ class DisplayContentBlock < Block | ||
| 68 | holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)}) | 68 | holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)}) |
| 69 | end | 69 | end |
| 70 | 70 | ||
| 71 | - include ActionView::Helpers | ||
| 72 | - include Rails.application.routes.url_helpers | ||
| 73 | def content(args={}) | 71 | def content(args={}) |
| 72 | + block = self | ||
| 74 | extra_condition = display_folder_children ? 'OR articles.parent_id IN(:nodes)':'' | 73 | extra_condition = display_folder_children ? 'OR articles.parent_id IN(:nodes)':'' |
| 75 | 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}]) | 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 | end | 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 | end | 116 | end |
| 116 | 117 | ||
| 117 | def url_params | 118 | def url_params |
| @@ -129,6 +130,23 @@ class DisplayContentBlock < Block | @@ -129,6 +130,23 @@ class DisplayContentBlock < Block | ||
| 129 | section[:checked] | 130 | section[:checked] |
| 130 | end | 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 | protected | 150 | protected |
| 133 | 151 | ||
| 134 | def holder | 152 | def holder |
| @@ -151,20 +169,4 @@ class DisplayContentBlock < Block | @@ -151,20 +169,4 @@ class DisplayContentBlock < Block | ||
| 151 | { :profile => [:article], :environment => [:article] } | 169 | { :profile => [:article], :environment => [:article] } |
| 152 | end | 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 | end | 172 | end |
plugins/display_content/test/unit/display_content_block_test.rb
| @@ -352,8 +352,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -352,8 +352,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 352 | block.stubs(:box).returns(box) | 352 | block.stubs(:box).returns(box) |
| 353 | box.stubs(:owner).returns(profile) | 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 | end | 357 | end |
| 358 | 358 | ||
| 359 | should 'list content for all articles lead defined in nodes' do | 359 | should 'list content for all articles lead defined in nodes' do |
| @@ -369,8 +369,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -369,8 +369,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 369 | block.stubs(:box).returns(box) | 369 | block.stubs(:box).returns(box) |
| 370 | box.stubs(:owner).returns(profile) | 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 | end | 374 | end |
| 375 | 375 | ||
| 376 | should 'not crash when referenced article is removed' do | 376 | should 'not crash when referenced article is removed' do |
| @@ -384,8 +384,10 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -384,8 +384,10 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 384 | box.stubs(:owner).returns(profile) | 384 | box.stubs(:owner).returns(profile) |
| 385 | 385 | ||
| 386 | Article.delete_all | 386 | Article.delete_all |
| 387 | - assert_match /<ul><\/ul>/, block.content | 387 | + assert_match /<ul><\/ul>/, instance_eval(&block.content) |
| 388 | end | 388 | end |
| 389 | + include ActionView::Helpers | ||
| 390 | + include Rails.application.routes.url_helpers | ||
| 389 | 391 | ||
| 390 | should 'url_params return myprofile url params if the owner is a profile' do | 392 | should 'url_params return myprofile url params if the owner is a profile' do |
| 391 | profile = create_user('testuser').person | 393 | profile = create_user('testuser').person |
| @@ -421,7 +423,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -421,7 +423,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 421 | block.stubs(:box).returns(box) | 423 | block.stubs(:box).returns(box) |
| 422 | box.stubs(:owner).returns(profile) | 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 | end | 427 | end |
| 426 | 428 | ||
| 427 | should 'show abstract if defined by user' do | 429 | should 'show abstract if defined by user' do |
| @@ -435,7 +437,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -435,7 +437,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 435 | block.stubs(:box).returns(box) | 437 | block.stubs(:box).returns(box) |
| 436 | box.stubs(:owner).returns(profile) | 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 | end | 441 | end |
| 440 | 442 | ||
| 441 | should 'show body if defined by user' do | 443 | should 'show body if defined by user' do |
| @@ -449,7 +451,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -449,7 +451,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 449 | block.stubs(:box).returns(box) | 451 | block.stubs(:box).returns(box) |
| 450 | box.stubs(:owner).returns(profile) | 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 | end | 455 | end |
| 454 | 456 | ||
| 455 | should 'display_attribute be true for title by default' do | 457 | should 'display_attribute be true for title by default' do |
| @@ -490,7 +492,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -490,7 +492,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
| 490 | block.stubs(:box).returns(box) | 492 | block.stubs(:box).returns(box) |
| 491 | box.stubs(:owner).returns(profile) | 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 | end | 496 | end |
| 495 | 497 | ||
| 496 | should 'do not save children if a folder is checked' do | 498 | should 'do not save children if a folder is checked' do |