Commit 9507e81fe8546c5938886292101ff38ce619e570
1 parent
f448634b
Exists in
master
and in
29 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 |