Commit 1f192ed48a676f24d3f2bb95982f392d801042cf
1 parent
75804df3
Exists in
master
and in
1 other branch
Display undo action in points
Showing
7 changed files
with
52 additions
and
8 deletions
Show diff stats
lib/gamification_plugin/dashboard_helper.rb
... | ... | @@ -21,6 +21,10 @@ module GamificationPlugin::DashboardHelper |
21 | 21 | url.present? ? link_to(text, url) : text |
22 | 22 | end |
23 | 23 | |
24 | + def score_point_action_class(point) | |
25 | + point.undo_rule? ? 'undo_action':'do_action' | |
26 | + end | |
27 | + | |
24 | 28 | def ranking(target, from_date=nil, limit=10) |
25 | 29 | # FIXME move these queries to profile model |
26 | 30 | ranking = Profile.select('profiles.*, sum(num_points) as gamification_points, ROW_NUMBER() OVER(order by sum(num_points) DESC) as gamification_position').joins(:sash => {:scores => :score_points}).where(:type => target.class).order('sum(num_points) DESC').group('profiles.id') | ... | ... |
lib/merit/point_rules.rb
... | ... | @@ -173,8 +173,7 @@ module Merit |
173 | 173 | end |
174 | 174 | |
175 | 175 | def self.target_url(point) |
176 | - point_type = GamificationPlugin::PointsType.where(id: point.score.category).first | |
177 | - rule_name = point_type.present? ? point_type.name : point.score.category | |
176 | + rule_name = point.point_type.present? ? point.point_type.name : point.score.category | |
178 | 177 | target_url = AVAILABLE_RULES[rule_name.to_sym][:target_url] |
179 | 178 | return nil if target_url.blank? || point.action.blank? |
180 | 179 | ... | ... |
lib/merit_ext.rb
... | ... | @@ -17,6 +17,15 @@ module Merit |
17 | 17 | class Score |
18 | 18 | class Point |
19 | 19 | belongs_to :action |
20 | + | |
21 | + def point_type | |
22 | + @point_type ||= GamificationPlugin::PointsType.where(id: score.category).first | |
23 | + end | |
24 | + | |
25 | + def undo_rule? | |
26 | + rule = Merit::PointRules::AVAILABLE_RULES[point_type.name.to_sym] | |
27 | + rule[:undo_action] == "#{action.target_model}##{action.action_method}" | |
28 | + end | |
20 | 29 | end |
21 | 30 | end |
22 | 31 | ... | ... |
public/style.css
test/functional/gamification_plugin_profile_controller_test.rb
... | ... | @@ -11,12 +11,13 @@ class GamificationPluginProfileControllerTest < ActionController::TestCase |
11 | 11 | attr_accessor :person, :environment |
12 | 12 | |
13 | 13 | should 'display points in gamification dashboard' do |
14 | - person.add_points(20, :category => :comment_author) | |
15 | - person.add_points(30, :category => :article_author) | |
14 | + create_all_point_rules | |
15 | + article = create(TextArticle, :profile_id => fast_create(Community).id, :author => person) | |
16 | + create(Comment, :source => article, :author_id => create_user.person.id) | |
16 | 17 | get :dashboard, :profile => person.identifier |
17 | - assert_tag :div, :attributes => {:class => 'score article_author positive'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => '30'} | |
18 | - assert_tag :div, :attributes => {:class => 'score comment_author positive'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => '20'} | |
19 | - assert_tag :div, :attributes => {:class => 'score total'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => '50'} | |
18 | + assert_tag :div, :attributes => {:class => 'score article_author positive do_action'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => default_point_weight(:article_author).to_s} | |
19 | + assert_tag :div, :attributes => {:class => 'score comment_article_author positive do_action'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => default_point_weight(:comment_article_author).to_s} | |
20 | + assert_tag :div, :attributes => {:class => 'score total'}, :child => {:tag => 'span', :attributes => {:class => 'value'}, :content => (default_point_weight(:comment_article_author) + default_point_weight(:article_author)).to_s} | |
20 | 21 | end |
21 | 22 | |
22 | 23 | should 'display level in gamification dashboard' do | ... | ... |
... | ... | @@ -0,0 +1,27 @@ |
1 | +require_relative "../test_helper" | |
2 | + | |
3 | +class MeritExtTest < ActiveSupport::TestCase | |
4 | + | |
5 | + should 'check if the point was originated by an undo action' do | |
6 | + point = Merit::Score::Point.new | |
7 | + point_type = GamificationPlugin::PointsType.new(name: :comment_author) | |
8 | + point.expects(:point_type).returns(point_type) | |
9 | + action = mock | |
10 | + action.expects(:target_model).returns('comment') | |
11 | + action.expects(:action_method).returns('destroy') | |
12 | + point.expects(:action).at_least_once.returns(action) | |
13 | + assert point.undo_rule? | |
14 | + end | |
15 | + | |
16 | + should 'check if the point was originated by a do action' do | |
17 | + point = Merit::Score::Point.new | |
18 | + point_type = GamificationPlugin::PointsType.new(name: :comment_author) | |
19 | + point.expects(:point_type).returns(point_type) | |
20 | + action = mock | |
21 | + action.expects(:target_model).returns('comment') | |
22 | + action.expects(:action_method).returns('create') | |
23 | + point.expects(:action).at_least_once.returns(action) | |
24 | + assert !point.undo_rule? | |
25 | + end | |
26 | + | |
27 | +end | ... | ... |
views/gamification/dashboard.html.erb
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | <div class="scores"> |
23 | 23 | <h3><%= _('Latest Score Points') %></h3> |
24 | 24 | <% @target.score_points.order('created_at desc').limit(5).each do |point| %> |
25 | - <div class="score <%= point.score.category %> <%= score_point_class(point) %>"> | |
25 | + <div class="score <%= point.point_type.name %> <%= score_point_class(point) %> <%= score_point_action_class(point) %>"> | |
26 | 26 | <span class="value"><%= point.num_points %></span> |
27 | 27 | <span class="category"><%= score_point_target_link point, _(score_point_category(point)) %></span> |
28 | 28 | <span class="date timeago" title="<%= point.created_at %>"><%= point.created_at %></span> | ... | ... |