Commit 203192d0ddaa8c9b5a7ee20ed5a9a6e9d04b4915
1 parent
95bab8a2
Exists in
ratings_minor_fixes
and in
3 other branches
Refactor DisplayContentBlock#content into views
This takes advantage of the structure at BoxesHelper for content rendering. It improves MVC compliance.
Showing
7 changed files
with
161 additions
and
165 deletions
Show diff stats
plugins/display_content/lib/display_content_block.rb
@@ -142,53 +142,6 @@ class DisplayContentBlock < Block | @@ -142,53 +142,6 @@ class DisplayContentBlock < Block | ||
142 | documents | 142 | documents |
143 | end | 143 | end |
144 | 144 | ||
145 | - def content(args={}) | ||
146 | - block = self | ||
147 | - | ||
148 | - items = self.docs | ||
149 | - | ||
150 | - proc do | ||
151 | - block.block_title(block.title, block.subtitle) + | ||
152 | - content_tag('ul', items.map {|item| | ||
153 | - if !item.folder? && item.class != RssFeed | ||
154 | - content_sections = '' | ||
155 | - read_more_section = '' | ||
156 | - tags_section = '' | ||
157 | - | ||
158 | - block.sections.select { |section| | ||
159 | - case section[:value] | ||
160 | - when 'publish_date' | ||
161 | - content_sections += (block.display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '') | ||
162 | - when 'title' | ||
163 | - content_sections += (block.display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '') | ||
164 | - when 'abstract' | ||
165 | - content_sections += (block.display_section?(section) ? (content_tag('div', item.abstract.html_safe , :class => 'lead')) : '' ) | ||
166 | - if block.display_section?(section) | ||
167 | - read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more') | ||
168 | - end | ||
169 | - when 'body' | ||
170 | - content_sections += (block.display_section?(section) ? (content_tag('div', item.body.html_safe ,:class => 'body')) : '' ) | ||
171 | - when 'image' | ||
172 | - image_section = image_tag item.image.public_filename if item.image | ||
173 | - if !image_section.blank? | ||
174 | - content_sections += (block.display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' ) | ||
175 | - end | ||
176 | - when 'tags' | ||
177 | - if !item.tags.empty? | ||
178 | - tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("") | ||
179 | - content_sections += (block.display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '') | ||
180 | - end | ||
181 | - end | ||
182 | - } | ||
183 | - | ||
184 | - content_sections += read_more_section if !read_more_section.blank? | ||
185 | -#raise sections.inspect | ||
186 | - content_tag('li', content_sections.html_safe) | ||
187 | - end | ||
188 | - }.join(" ").html_safe) | ||
189 | - end | ||
190 | - end | ||
191 | - | ||
192 | def url_params | 145 | def url_params |
193 | params = {:block_id => self.id} | 146 | params = {:block_id => self.id} |
194 | if self.owner.is_a?(Profile) | 147 | if self.owner.is_a?(Profile) |
plugins/display_content/test/unit/display_content_block_test.rb
@@ -347,53 +347,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -347,53 +347,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
347 | 347 | ||
348 | end | 348 | end |
349 | 349 | ||
350 | - should 'list links for all articles title defined in nodes' do | ||
351 | - profile = create_user('testuser').person | ||
352 | - Article.delete_all | ||
353 | - a1 = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id) | ||
354 | - a2 = fast_create(TextileArticle, :name => 'test article 2', :profile_id => profile.id) | ||
355 | - | ||
356 | - block = DisplayContentBlock.new | ||
357 | - block.sections = [{:value => 'title', :checked => true}] | ||
358 | - block.nodes = [a1.id, a2.id] | ||
359 | - box = mock() | ||
360 | - block.stubs(:box).returns(box) | ||
361 | - box.stubs(:owner).returns(profile) | ||
362 | - | ||
363 | - assert_match /.*<a.*>#{a1.title}<\/a>/, instance_eval(&block.content) | ||
364 | - assert_match /.*<a.*>#{a2.title}<\/a>/, instance_eval(&block.content) | ||
365 | - end | ||
366 | - | ||
367 | - should 'list content for all articles lead defined in nodes' do | ||
368 | - profile = create_user('testuser').person | ||
369 | - Article.delete_all | ||
370 | - a1 = fast_create(TinyMceArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'abstract article 1') | ||
371 | - a2 = fast_create(TinyMceArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2') | ||
372 | - | ||
373 | - block = DisplayContentBlock.new | ||
374 | - block.sections = [{:value => 'abstract', :checked => true}] | ||
375 | - block.nodes = [a1.id, a2.id] | ||
376 | - box = mock() | ||
377 | - block.stubs(:box).returns(box) | ||
378 | - box.stubs(:owner).returns(profile) | ||
379 | - | ||
380 | - assert_match /<div class="lead">#{a1.lead}<\/div>/, instance_eval(&block.content) | ||
381 | - assert_match /<div class="lead">#{a2.lead}<\/div>/, instance_eval(&block.content) | ||
382 | - end | ||
383 | - | ||
384 | - should 'not crash when referenced article is removed' do | ||
385 | - profile = create_user('testuser').person | ||
386 | - a1 = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id) | ||
387 | - | ||
388 | - block = DisplayContentBlock.new | ||
389 | - block.nodes = [a1.id] | ||
390 | - box = mock() | ||
391 | - block.stubs(:box).returns(box) | ||
392 | - box.stubs(:owner).returns(profile) | ||
393 | - | ||
394 | - Article.delete_all | ||
395 | - assert_match /<ul><\/ul>/, instance_eval(&block.content) | ||
396 | - end | ||
397 | include ActionView::Helpers | 350 | include ActionView::Helpers |
398 | include Rails.application.routes.url_helpers | 351 | include Rails.application.routes.url_helpers |
399 | 352 | ||
@@ -420,48 +373,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -420,48 +373,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
420 | assert_equal params, block.url_params | 373 | assert_equal params, block.url_params |
421 | end | 374 | end |
422 | 375 | ||
423 | - should 'show title if defined by user' do | ||
424 | - profile = create_user('testuser').person | ||
425 | - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id) | ||
426 | - | ||
427 | - block = DisplayContentBlock.new | ||
428 | - block.nodes = [a.id] | ||
429 | - block.sections = [{:value => 'title', :checked => true}] | ||
430 | - box = mock() | ||
431 | - block.stubs(:box).returns(box) | ||
432 | - box.stubs(:owner).returns(profile) | ||
433 | - | ||
434 | - assert_match /.*<a.*>#{a.title}<\/a>/, instance_eval(&block.content) | ||
435 | - end | ||
436 | - | ||
437 | - should 'show abstract if defined by user' do | ||
438 | - profile = create_user('testuser').person | ||
439 | - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'some abstract') | ||
440 | - | ||
441 | - block = DisplayContentBlock.new | ||
442 | - block.nodes = [a.id] | ||
443 | - block.sections = [{:value => 'abstract', :checked => true}] | ||
444 | - box = mock() | ||
445 | - block.stubs(:box).returns(box) | ||
446 | - box.stubs(:owner).returns(profile) | ||
447 | - | ||
448 | - assert_match /#{a.abstract}/, instance_eval(&block.content) | ||
449 | - end | ||
450 | - | ||
451 | - should 'show body if defined by user' do | ||
452 | - profile = create_user('testuser').person | ||
453 | - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body') | ||
454 | - | ||
455 | - block = DisplayContentBlock.new | ||
456 | - block.nodes = [a.id] | ||
457 | - block.sections = [{:value => 'body', :checked => true}] | ||
458 | - box = mock() | ||
459 | - block.stubs(:box).returns(box) | ||
460 | - box.stubs(:owner).returns(profile) | ||
461 | - | ||
462 | - assert_match /#{a.body}/, instance_eval(&block.content) | ||
463 | - end | ||
464 | - | ||
465 | should 'display_attribute be true for title by default' do | 376 | should 'display_attribute be true for title by default' do |
466 | profile = create_user('testuser').person | 377 | profile = create_user('testuser').person |
467 | 378 | ||
@@ -489,20 +400,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -489,20 +400,6 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
489 | assert block.display_section?({:value => 'publish_date', :checked => true}) | 400 | assert block.display_section?({:value => 'publish_date', :checked => true}) |
490 | end | 401 | end |
491 | 402 | ||
492 | - should 'show publishd date if defined by user' do | ||
493 | - profile = create_user('testuser').person | ||
494 | - a = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body') | ||
495 | - | ||
496 | - block = DisplayContentBlock.new | ||
497 | - block.nodes = [a.id] | ||
498 | - block.sections = [{:value => 'publish_date', :checked => true}] | ||
499 | - box = mock() | ||
500 | - block.stubs(:box).returns(box) | ||
501 | - box.stubs(:owner).returns(profile) | ||
502 | - | ||
503 | - assert_match /#{a.published_at}/, instance_eval(&block.content) | ||
504 | - end | ||
505 | - | ||
506 | should 'do not save children if a folder is checked' do | 403 | should 'do not save children if a folder is checked' do |
507 | profile = create_user('testuser').person | 404 | profile = create_user('testuser').person |
508 | Article.delete_all | 405 | Article.delete_all |
@@ -648,6 +545,117 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -648,6 +545,117 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
648 | assert_equal [], block.parent_nodes | 545 | assert_equal [], block.parent_nodes |
649 | end | 546 | end |
650 | 547 | ||
548 | +end | ||
549 | + | ||
550 | +require 'boxes_helper' | ||
551 | + | ||
552 | +class DisplayContentBlockViewTest < ActionView::TestCase | ||
553 | + include BoxesHelper | ||
554 | + | ||
555 | + should 'list links for all articles title defined in nodes' do | ||
556 | + profile = create_user('testuser').person | ||
557 | + Article.delete_all | ||
558 | + a1 = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id) | ||
559 | + a2 = fast_create(TextileArticle, :name => 'test article 2', :profile_id => profile.id) | ||
560 | + | ||
561 | + block = DisplayContentBlock.new | ||
562 | + block.sections = [{:value => 'title', :checked => true}] | ||
563 | + block.nodes = [a1.id, a2.id] | ||
564 | + box = mock() | ||
565 | + block.stubs(:box).returns(box) | ||
566 | + box.stubs(:owner).returns(profile) | ||
567 | + | ||
568 | + assert_match /.*<a.*>#{a1.title}<\/a>/, render_block_content(block) | ||
569 | + assert_match /.*<a.*>#{a2.title}<\/a>/, render_block_content(block) | ||
570 | + end | ||
571 | + | ||
572 | + should 'list content for all articles lead defined in nodes' do | ||
573 | + profile = create_user('testuser').person | ||
574 | + Article.delete_all | ||
575 | + a1 = fast_create(TinyMceArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'abstract article 1') | ||
576 | + a2 = fast_create(TinyMceArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2') | ||
577 | + | ||
578 | + block = DisplayContentBlock.new | ||
579 | + block.sections = [{:value => 'abstract', :checked => true}] | ||
580 | + block.nodes = [a1.id, a2.id] | ||
581 | + box = mock() | ||
582 | + block.stubs(:box).returns(box) | ||
583 | + box.stubs(:owner).returns(profile) | ||
584 | + | ||
585 | + assert_match /<div class="lead">#{a1.lead}<\/div>/, render_block_content(block) | ||
586 | + assert_match /<div class="lead">#{a2.lead}<\/div>/, render_block_content(block) | ||
587 | + end | ||
588 | + | ||
589 | + should 'not crash when referenced article is removed' do | ||
590 | + profile = create_user('testuser').person | ||
591 | + a1 = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id) | ||
592 | + | ||
593 | + block = DisplayContentBlock.new | ||
594 | + block.nodes = [a1.id] | ||
595 | + box = mock() | ||
596 | + block.stubs(:box).returns(box) | ||
597 | + box.stubs(:owner).returns(profile) | ||
598 | + | ||
599 | + Article.delete_all | ||
600 | + assert_match /<ul><\/ul>/, render_block_content(block) | ||
601 | + end | ||
602 | + | ||
603 | + should 'show title if defined by user' do | ||
604 | + profile = create_user('testuser').person | ||
605 | + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id) | ||
606 | + | ||
607 | + block = DisplayContentBlock.new | ||
608 | + block.nodes = [a.id] | ||
609 | + block.sections = [{:value => 'title', :checked => true}] | ||
610 | + box = mock() | ||
611 | + block.stubs(:box).returns(box) | ||
612 | + box.stubs(:owner).returns(profile) | ||
613 | + | ||
614 | + assert_match /.*<a.*>#{a.title}<\/a>/, render_block_content(block) | ||
615 | + end | ||
616 | + | ||
617 | + should 'show abstract if defined by user' do | ||
618 | + profile = create_user('testuser').person | ||
619 | + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'some abstract') | ||
620 | + | ||
621 | + block = DisplayContentBlock.new | ||
622 | + block.nodes = [a.id] | ||
623 | + block.sections = [{:value => 'abstract', :checked => true}] | ||
624 | + box = mock() | ||
625 | + block.stubs(:box).returns(box) | ||
626 | + box.stubs(:owner).returns(profile) | ||
627 | + | ||
628 | + assert_match /#{a.abstract}/, render_block_content(block) | ||
629 | + end | ||
630 | + | ||
631 | + should 'show body if defined by user' do | ||
632 | + profile = create_user('testuser').person | ||
633 | + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body') | ||
634 | + | ||
635 | + block = DisplayContentBlock.new | ||
636 | + block.nodes = [a.id] | ||
637 | + block.sections = [{:value => 'body', :checked => true}] | ||
638 | + box = mock() | ||
639 | + block.stubs(:box).returns(box) | ||
640 | + box.stubs(:owner).returns(profile) | ||
641 | + | ||
642 | + assert_match /#{a.body}/, render_block_content(block) | ||
643 | + end | ||
644 | + | ||
645 | + should 'show publishd date if defined by user' do | ||
646 | + profile = create_user('testuser').person | ||
647 | + a = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body') | ||
648 | + | ||
649 | + block = DisplayContentBlock.new | ||
650 | + block.nodes = [a.id] | ||
651 | + block.sections = [{:value => 'publish_date', :checked => true}] | ||
652 | + box = mock() | ||
653 | + block.stubs(:box).returns(box) | ||
654 | + box.stubs(:owner).returns(profile) | ||
655 | + | ||
656 | + assert_match /#{a.published_at}/, render_block_content(block) | ||
657 | + end | ||
658 | + | ||
651 | should 'show articles in recent order' do | 659 | should 'show articles in recent order' do |
652 | profile = create_user('testuser').person | 660 | profile = create_user('testuser').person |
653 | Article.delete_all | 661 | Article.delete_all |
@@ -663,8 +671,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -663,8 +671,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
663 | 671 | ||
664 | block.order_by_recent = true | 672 | block.order_by_recent = true |
665 | 673 | ||
666 | - a1_index = instance_eval(&block.content).index(a1.name) | ||
667 | - a2_index = instance_eval(&block.content).index(a2.name) | 674 | + a1_index = render_block_content(block).index(a1.name) |
675 | + a2_index = render_block_content(block).index(a2.name) | ||
668 | 676 | ||
669 | assert a2_index < a1_index | 677 | assert a2_index < a1_index |
670 | end | 678 | end |
@@ -684,8 +692,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -684,8 +692,8 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
684 | 692 | ||
685 | block.order_by_recent = false | 693 | block.order_by_recent = false |
686 | 694 | ||
687 | - a1_index = instance_eval(&block.content).index(a1.name) | ||
688 | - a2_index = instance_eval(&block.content).index(a2.name) | 695 | + a1_index = render_block_content(block).index(a1.name) |
696 | + a2_index = render_block_content(block).index(a2.name) | ||
689 | 697 | ||
690 | assert a1_index < a2_index | 698 | assert a1_index < a2_index |
691 | end | 699 | end |
@@ -706,7 +714,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -706,7 +714,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
706 | block.order_by_recent = true | 714 | block.order_by_recent = true |
707 | block.limit_to_show = 1 | 715 | block.limit_to_show = 1 |
708 | 716 | ||
709 | - a1_index = instance_eval(&block.content).index(a1.name) | 717 | + a1_index = render_block_content(block).index(a1.name) |
710 | 718 | ||
711 | assert a1_index.nil? | 719 | assert a1_index.nil? |
712 | end | 720 | end |
@@ -730,15 +738,15 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -730,15 +738,15 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
730 | block.stubs(:box).returns(box) | 738 | block.stubs(:box).returns(box) |
731 | box.stubs(:owner).returns(profile) | 739 | box.stubs(:owner).returns(profile) |
732 | 740 | ||
733 | - assert_nil instance_eval(&block.content).index(en_article.name) | ||
734 | - assert_nil instance_eval(&block.content).index(en_article2.name) | ||
735 | - assert instance_eval(&block.content).index(pt_article.name).present? | 741 | + assert_nil render_block_content(block).index(en_article.name) |
742 | + assert_nil render_block_content(block).index(en_article2.name) | ||
743 | + assert render_block_content(block).index(pt_article.name).present? | ||
736 | 744 | ||
737 | FastGettext.stubs(:locale).returns('en') | 745 | FastGettext.stubs(:locale).returns('en') |
738 | 746 | ||
739 | - assert instance_eval(&block.content).index(en_article.name) | ||
740 | - assert instance_eval(&block.content).index(en_article2.name) | ||
741 | - assert_nil instance_eval(&block.content).index(pt_article.name) | 747 | + assert render_block_content(block).index(en_article.name) |
748 | + assert render_block_content(block).index(en_article2.name) | ||
749 | + assert_nil render_block_content(block).index(pt_article.name) | ||
742 | end | 750 | end |
743 | 751 | ||
744 | should 'replace article with its translation' do | 752 | should 'replace article with its translation' do |
@@ -758,12 +766,12 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -758,12 +766,12 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
758 | block.stubs(:box).returns(box) | 766 | block.stubs(:box).returns(box) |
759 | box.stubs(:owner).returns(profile) | 767 | box.stubs(:owner).returns(profile) |
760 | 768 | ||
761 | - assert_nil instance_eval(&block.content).index(en_article.name) | ||
762 | - assert instance_eval(&block.content).index(pt_article.name).present? | 769 | + assert_nil render_block_content(block).index(en_article.name) |
770 | + assert render_block_content(block).index(pt_article.name).present? | ||
763 | 771 | ||
764 | FastGettext.stubs(:locale).returns('en') | 772 | FastGettext.stubs(:locale).returns('en') |
765 | 773 | ||
766 | - assert instance_eval(&block.content).index(en_article.name).present? | ||
767 | - assert_nil instance_eval(&block.content).index(pt_article.name) | 774 | + assert render_block_content(block).index(en_article.name).present? |
775 | + assert_nil render_block_content(block).index(pt_article.name) | ||
768 | end | 776 | end |
769 | end | 777 | end |
@@ -0,0 +1,4 @@ | @@ -0,0 +1,4 @@ | ||
1 | +li | ||
2 | + - unless item.folder? || item.class == RssFeed | ||
3 | + = render partial: 'blocks/section', collection: block.sections, locals: { block: block, item: item } | ||
4 | + = render partial: 'blocks/read_more', locals: { item: item, abstract_section: block.sections.bsearch { |section| section[:value] == 'abstract' }, block: block } | ||
0 | \ No newline at end of file | 5 | \ No newline at end of file |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +- if block.display_section?(section) | ||
2 | + - case section[:value] | ||
3 | + - when 'publish_date' | ||
4 | + div class='published-at' | ||
5 | + = show_date(item.published_at, false) | ||
6 | + - when 'title' | ||
7 | + div class='title' | ||
8 | + = link_to(h(item.title), item.url) | ||
9 | + - when 'abstract' | ||
10 | + div class='lead' | ||
11 | + = item.abstract | ||
12 | + - when 'body' | ||
13 | + div class='body' | ||
14 | + = item.body | ||
15 | + - when 'image' | ||
16 | + - unless item.image || item.image.public_filename | ||
17 | + div class='image' | ||
18 | + = link_to(image_tag(item.image.public_filename), item.url) | ||
19 | + - when 'tags' | ||
20 | + - unless item.tags.empty? | ||
21 | + div class='tags' | ||
22 | + = render partial: 'blocks/tag', collection: item.tags |
plugins/display_content/views/blocks/display_content.slim
0 → 100644