Commit 0ee65a55b16910bea00ad348f2d535b04e7dec9b
Exists in
master
and in
1 other branch
Merge branch 'working' into 'master'
Avoid recursive loop saving profile See merge request !12
Showing
4 changed files
with
21 additions
and
9 deletions
Show diff stats
lib/merit/point_rules.rb
| @@ -61,7 +61,6 @@ module Merit | @@ -61,7 +61,6 @@ module Merit | ||
| 61 | action: 'vote#create', | 61 | action: 'vote#create', |
| 62 | undo_action: 'vote#destroy', | 62 | undo_action: 'vote#destroy', |
| 63 | to: lambda {|vote| vote.voteable.author}, | 63 | to: lambda {|vote| vote.voteable.author}, |
| 64 | - profile: lambda {|vote| vote.voteable.profile}, | ||
| 65 | value: lambda {|vote| vote.vote}, | 64 | value: lambda {|vote| vote.vote}, |
| 66 | description: _('Author of a voted content'), | 65 | description: _('Author of a voted content'), |
| 67 | default_weight: 20, | 66 | default_weight: 20, |
| @@ -71,7 +70,6 @@ module Merit | @@ -71,7 +70,6 @@ module Merit | ||
| 71 | action: 'vote#create', | 70 | action: 'vote#create', |
| 72 | undo_action: 'vote#destroy', | 71 | undo_action: 'vote#destroy', |
| 73 | to: lambda {|vote| vote.voteable}, | 72 | to: lambda {|vote| vote.voteable}, |
| 74 | - profile: lambda {|vote| vote.voteable.profile}, | ||
| 75 | value: lambda {|vote| vote.vote}, | 73 | value: lambda {|vote| vote.vote}, |
| 76 | description: _('Voted content'), | 74 | description: _('Voted content'), |
| 77 | default_weight: 30, | 75 | default_weight: 30, |
| @@ -101,7 +99,6 @@ module Merit | @@ -101,7 +99,6 @@ module Merit | ||
| 101 | value: 1, | 99 | value: 1, |
| 102 | description: _('Profile Completion'), | 100 | description: _('Profile Completion'), |
| 103 | default_weight: 100, | 101 | default_weight: 100, |
| 104 | - model_name: "User", | ||
| 105 | condition: lambda {|person, profile| person.person? and person.profile_completion_score_condition }, | 102 | condition: lambda {|person, profile| person.person? and person.profile_completion_score_condition }, |
| 106 | }, | 103 | }, |
| 107 | follower: { | 104 | follower: { |
| @@ -159,8 +156,10 @@ module Merit | @@ -159,8 +156,10 @@ module Merit | ||
| 159 | [setting[:action], setting[:undo_action]].compact.zip([1, -1]).each do |action, signal| | 156 | [setting[:action], setting[:undo_action]].compact.zip([1, -1]).each do |action, signal| |
| 160 | options = {on: action, to: setting[:to], category: categorization.id.to_s} | 157 | options = {on: action, to: setting[:to], category: categorization.id.to_s} |
| 161 | options[:model_name] = setting[:model] unless setting[:model].nil? | 158 | options[:model_name] = setting[:model] unless setting[:model].nil? |
| 162 | - score lambda {|target| signal * calculate_score(target, categorization.weight, setting[:value])}, options do |target| | ||
| 163 | - condition(setting, target, categorization.profile) | 159 | + weight = categorization.weight |
| 160 | + profile = categorization.profile | ||
| 161 | + score lambda {|target| signal * calculate_score(target, weight, setting[:value])}, options do |target| | ||
| 162 | + condition(setting, target, profile) | ||
| 164 | end | 163 | end |
| 165 | end | 164 | end |
| 166 | end | 165 | end |
lib/merit/rank_observer.rb
| @@ -5,7 +5,7 @@ module Merit | @@ -5,7 +5,7 @@ module Merit | ||
| 5 | merit = changed_data[:merit_object] | 5 | merit = changed_data[:merit_object] |
| 6 | if merit.kind_of?(Merit::Score::Point) | 6 | if merit.kind_of?(Merit::Score::Point) |
| 7 | profile = merit.score.sash.profile | 7 | profile = merit.score.sash.profile |
| 8 | - profile.update_attribute(:level, profile.gamification_plugin_calculate_level) if profile.present? | 8 | + profile.update_column(:level, profile.gamification_plugin_calculate_level) if profile.present? |
| 9 | end | 9 | end |
| 10 | end | 10 | end |
| 11 | end | 11 | end |
test/unit/profile_test.rb
| @@ -44,6 +44,18 @@ class ProfileTest < ActiveSupport::TestCase | @@ -44,6 +44,18 @@ class ProfileTest < ActiveSupport::TestCase | ||
| 44 | assert_equal 1, profile.gamification_plugin_calculate_level | 44 | assert_equal 1, profile.gamification_plugin_calculate_level |
| 45 | end | 45 | end |
| 46 | 46 | ||
| 47 | + should 'update profile level when a profile action makes a score with zero point' do | ||
| 48 | + #avoid loop when the score changes by zero and | ||
| 49 | + person = create_user('testuser').person | ||
| 50 | + Person.any_instance.stubs(:is_profile_complete?).returns(true) | ||
| 51 | + create_point_rule_definition('profile_completion', nil, {value: 0}) | ||
| 52 | + GamificationPlugin.gamification_set_rules(environment) | ||
| 53 | + assert_equal 0, person.level | ||
| 54 | + assert_nothing_raised do | ||
| 55 | + person.save | ||
| 56 | + end | ||
| 57 | + end | ||
| 58 | + | ||
| 47 | should 'update profile level when the score changes' do | 59 | should 'update profile level when the score changes' do |
| 48 | create_point_rule_definition('article_author') | 60 | create_point_rule_definition('article_author') |
| 49 | community = fast_create(Community) | 61 | community = fast_create(Community) |
views/gamification_plugin_badges/show.html.erb
| @@ -24,9 +24,10 @@ | @@ -24,9 +24,10 @@ | ||
| 24 | 24 | ||
| 25 | <p> | 25 | <p> |
| 26 | <b>Threshold:</b> | 26 | <b>Threshold:</b> |
| 27 | - <% @gamification_plugin_badge.custom_fields.is_a? Hash %> | ||
| 28 | - <% @gamification_plugin_badge.custom_fields.keys.each do |key| %> | ||
| 29 | - <div><%= _(key) + ': ' + @gamification_plugin_badge.custom_fields[key].fetch("threshold", "") %></div> | 27 | + <% if @gamification_plugin_badge.custom_fields.is_a? Hash %> |
| 28 | + <% @gamification_plugin_badge.custom_fields.keys.each do |key| %> | ||
| 29 | + <div><%= _(key) + ': ' + @gamification_plugin_badge.custom_fields[key].fetch("threshold", "") %></div> | ||
| 30 | + <% end %> | ||
| 30 | <% end %> | 31 | <% end %> |
| 31 | </p> | 32 | </p> |
| 32 | 33 |