Commit 9f2ce2c2c31d51844f5c593847a17fe15750fc86

Authored by Victor Costa
1 parent d8556255

Proposal view refactor

lib/proposals_discussion_plugin/proposal_helper.rb 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +module ProposalsDiscussionPlugin::ProposalHelper
  2 +
  3 + def proposal_score(proposal)
  4 + return '' unless proposal.published?
  5 + normalized_score = proposal.normalized_score
  6 + pos = 26 * (normalized_score*4 - 1).round
  7 + content_tag 'span', ' ', :title => "#{normalized_score}", :style => "background-position-y: -#{pos}px"
  8 + end
  9 +
  10 + def proposal_locations(proposal)
  11 + proposal.locations.map do |location|
  12 + content_tag 'span', location.name, :class => "location"
  13 + end.join(', ')
  14 + end
  15 +
  16 + def proposal_tags(proposal)
  17 + proposal.tags.map { |t| link_to(t, :controller => 'profile', :profile => proposal.profile.identifier, :action => 'tags', :id => t.name ) }.join("\n")
  18 + end
  19 +
  20 +end
... ...
test/unit/proposal_helper_test.rb 0 → 100644
... ... @@ -0,0 +1,44 @@
  1 +require_relative '../test_helper'
  2 +
  3 +class ProposalHelperTest < ActionView::TestCase
  4 +
  5 + def setup
  6 + @proposal = ProposalsDiscussionPlugin::Proposal.new(:name => 'test', :abstract => 'abstract')
  7 + end
  8 +
  9 + include ProposalsDiscussionPlugin::ProposalHelper
  10 +
  11 + attr_reader :proposal
  12 +
  13 + should 'display proposal score' do
  14 + proposal.expects(:normalized_score).returns(1)
  15 + assert proposal_score(proposal).present?
  16 + end
  17 +
  18 + should 'not display score for unpublished proposals' do
  19 + proposal.expects(:published?).returns(false)
  20 + assert proposal_score(proposal).blank?
  21 + end
  22 +
  23 + should 'display proposal locations' do
  24 + proposal.expects(:locations).returns([Region.new])
  25 + assert proposal_locations(proposal).present?
  26 + end
  27 +
  28 + should 'return blank if a proposal has no locations' do
  29 + proposal.expects(:locations).returns([])
  30 + assert proposal_locations(proposal).blank?
  31 + end
  32 +
  33 + should 'display proposal tags' do
  34 + proposal.expects(:tags).returns([ActsAsTaggableOn::Tag.new])
  35 + proposal.expects(:profile).returns(fast_create(Profile))
  36 + assert proposal_tags(proposal).present?
  37 + end
  38 +
  39 + should 'return blank if a proposal has no tags' do
  40 + proposal.expects(:tags).returns([])
  41 + assert proposal_tags(proposal).blank?
  42 + end
  43 +
  44 +end
... ...
views/content_viewer/_proposal_card.html.erb
  1 +<% extend ProposalsDiscussionPlugin::ProposalHelper %>
1 2 <div class="proposal">
2 3 <div class="author">
3 4 <%= link_to_profile profile_image(proposal_card.author, :minor, :class => 'disable-zoom') + '<br/>' + proposal_card.author.short_name, proposal_card.author.identifier, :class => 'profile-link' %>
... ... @@ -21,24 +22,14 @@
21 22 <%= proposal_card.abstract %>
22 23 </div>
23 24 <div class="score">
24   - <% if proposal_card.published? %>
25   - <% normalized_score = proposal_card.normalized_score %>
26   - <% pos = 26 * (normalized_score*4 - 1).round %>
27   - <span title="<%= normalized_score %>" style="background-position-y: -<%= pos %>px">&nbsp;</span>
28   - <% end %>
  25 + <%= proposal_score(proposal_card) %>
  26 + </div>
  27 + <div class="locations">
  28 + <%= proposal_locations(proposal_card) %>
  29 + </div>
  30 + <div class="tags" id="article-tags">
  31 + <%= proposal_tags(proposal_card) %>
29 32 </div>
30   - <% if proposal_card.locations.present? %>
31   - <div class="locations">
32   - <% proposal_card.locations.each do |location| %>
33   - <span class="location"><%= location.name %></span>
34   - <% end %>
35   - </div>
36   - <% end %>
37   - <% if !proposal_card.tags.empty? %>
38   - <div class="tags" id="article-tags">
39   - <%= proposal_card.tags.map { |t| link_to(t, :controller => 'profile', :profile => @profile.identifier, :action => 'tags', :id => t.name ) }.join("\n") %>
40   - </div>
41   - <% end %>
42 33 <div class="comments-count">
43 34 <%= n_("%s comment", "%s comments", proposal_card.comments_count) % proposal_card.comments_count %>
44 35 </div>
... ...