Commit c9306125e630b9f77b61382afdc41a0ac5d2b093

Authored by Victor Costa
1 parent 564beb33

Fix profile condition in point rules

Showing 1 changed file with 19 additions and 13 deletions   Show diff stats
lib/merit/point_rules.rb
@@ -10,7 +10,7 @@ module Merit @@ -10,7 +10,7 @@ module Merit
10 value: 1, 10 value: 1,
11 description: _('Comment author'), 11 description: _('Comment author'),
12 default_weight: 40, 12 default_weight: 40,
13 - condition: lambda {|comment, profile| profile.nil? or comment.source.profile == profile}, 13 + target_profile: lambda {|comment| comment.source.profile },
14 }, 14 },
15 comment_article_author: { 15 comment_article_author: {
16 action: 'comment#create', 16 action: 'comment#create',
@@ -19,7 +19,7 @@ module Merit @@ -19,7 +19,7 @@ module Merit
19 value: 1, 19 value: 1,
20 description: _('Article author of a comment'), 20 description: _('Article author of a comment'),
21 default_weight: 50, 21 default_weight: 50,
22 - condition: lambda {|comment, profile| profile.nil? or comment.source.profile == profile}, 22 + target_profile: lambda {|comment| comment.source.profile },
23 }, 23 },
24 comment_article: { 24 comment_article: {
25 action: 'comment#create', 25 action: 'comment#create',
@@ -28,7 +28,7 @@ module Merit @@ -28,7 +28,7 @@ module Merit
28 value: 1, 28 value: 1,
29 description: _('Source article of a comment'), 29 description: _('Source article of a comment'),
30 default_weight: 50, 30 default_weight: 50,
31 - condition: lambda {|comment, profile| profile.nil? or comment.source.profile == profile}, 31 + target_profile: lambda {|comment| comment.source.profile },
32 }, 32 },
33 comment_community: { 33 comment_community: {
34 action: 'comment#create', 34 action: 'comment#create',
@@ -37,7 +37,8 @@ module Merit @@ -37,7 +37,8 @@ module Merit
37 value: 1, 37 value: 1,
38 description: _('Article community of a comment'), 38 description: _('Article community of a comment'),
39 default_weight: 50, 39 default_weight: 50,
40 - condition: lambda {|comment, profile| profile.nil? or (comment.profile.community? and comment.profile == profile) } 40 + target_profile: lambda {|comment| comment.source.profile },
  41 + condition: lambda {|comment, profile| comment.profile.community?}
41 }, 42 },
42 article_author: { 43 article_author: {
43 action: 'article#create', 44 action: 'article#create',
@@ -46,7 +47,7 @@ module Merit @@ -46,7 +47,7 @@ module Merit
46 value: 1, 47 value: 1,
47 description: _('Article author'), 48 description: _('Article author'),
48 default_weight: 50, 49 default_weight: 50,
49 - condition: lambda {|article, profile| profile.nil? or article.profile == profile}, 50 + target_profile: lambda {|article| article.profile },
50 }, 51 },
51 article_community: { 52 article_community: {
52 action: 'article#create', 53 action: 'article#create',
@@ -55,7 +56,8 @@ module Merit @@ -55,7 +56,8 @@ module Merit
55 value: 1, 56 value: 1,
56 description: _('Article community'), 57 description: _('Article community'),
57 default_weight: 10, 58 default_weight: 10,
58 - condition: lambda {|article, profile| profile.nil? or (article.profile.present? and article.profile.community? and article.profile == profile) } 59 + target_profile: lambda {|article| article.profile },
  60 + condition: lambda {|article, profile| article.profile.present? and article.profile.community? }
59 }, 61 },
60 vote_voteable_author: { 62 vote_voteable_author: {
61 action: 'vote#create', 63 action: 'vote#create',
@@ -64,7 +66,7 @@ module Merit @@ -64,7 +66,7 @@ module Merit
64 value: lambda {|vote| vote.vote}, 66 value: lambda {|vote| vote.vote},
65 description: _('Author of a voted content'), 67 description: _('Author of a voted content'),
66 default_weight: 20, 68 default_weight: 20,
67 - condition: lambda {|vote, profile| profile.nil? or (vote.voteable and vote.voteable.profile == profile) } 69 + target_profile: lambda {|vote| vote.voteable.present? ? vote.voteable.profile : nil },
68 }, 70 },
69 vote_voteable: { 71 vote_voteable: {
70 action: 'vote#create', 72 action: 'vote#create',
@@ -73,7 +75,7 @@ module Merit @@ -73,7 +75,7 @@ module Merit
73 value: lambda {|vote| vote.vote}, 75 value: lambda {|vote| vote.vote},
74 description: _('Voted content'), 76 description: _('Voted content'),
75 default_weight: 30, 77 default_weight: 30,
76 - condition: lambda {|vote, profile| profile.nil? or (vote.voteable and vote.voteable.profile == profile) } 78 + target_profile: lambda {|vote| vote.voteable.present? ? vote.voteable.profile : nil },
77 }, 79 },
78 vote_voter: { 80 vote_voter: {
79 action: 'vote#create', 81 action: 'vote#create',
@@ -82,7 +84,7 @@ module Merit @@ -82,7 +84,7 @@ module Merit
82 value: lambda {|vote| 1}, 84 value: lambda {|vote| 1},
83 description: _('Voter'), 85 description: _('Voter'),
84 default_weight: 10, 86 default_weight: 10,
85 - condition: lambda {|vote, profile| profile.nil? or (vote.voteable and vote.voteable.profile == profile) } 87 + target_profile: lambda {|vote| vote.voteable.present? ? vote.voteable.profile : nil },
86 }, 88 },
87 friends: { 89 friends: {
88 action: 'friendship#create', 90 action: 'friendship#create',
@@ -109,7 +111,7 @@ module Merit @@ -109,7 +111,7 @@ module Merit
109 description: _('Follower'), 111 description: _('Follower'),
110 default_weight: 10, 112 default_weight: 10,
111 model: 'ArticleFollower', 113 model: 'ArticleFollower',
112 - condition: lambda {|follow, profile| profile.nil? or follow.article.profile == profile }, 114 + target_profile: lambda {|follow| follow.article.profile },
113 }, 115 },
114 followed_article: { 116 followed_article: {
115 action: 'articlefollower#create', 117 action: 'articlefollower#create',
@@ -119,7 +121,7 @@ module Merit @@ -119,7 +121,7 @@ module Merit
119 description: _('Article followed'), 121 description: _('Article followed'),
120 default_weight: 30, 122 default_weight: 30,
121 model: 'ArticleFollower', 123 model: 'ArticleFollower',
122 - condition: lambda {|follow, profile| profile.nil? or follow.article.profile == profile }, 124 + target_profile: lambda {|follow| follow.article.profile },
123 }, 125 },
124 followed_article_author: { 126 followed_article_author: {
125 action: 'articlefollower#create', 127 action: 'articlefollower#create',
@@ -129,7 +131,7 @@ module Merit @@ -129,7 +131,7 @@ module Merit
129 description: _('Author of a followed content'), 131 description: _('Author of a followed content'),
130 default_weight: 20, 132 default_weight: 20,
131 model: 'ArticleFollower', 133 model: 'ArticleFollower',
132 - condition: lambda {|follow, profile| profile.nil? or follow.article.profile == profile }, 134 + target_profile: lambda {|follow| follow.article.profile },
133 } 135 }
134 } 136 }
135 137
@@ -147,6 +149,10 @@ module Merit @@ -147,6 +149,10 @@ module Merit
147 end 149 end
148 end 150 end
149 151
  152 + def profile_condition(setting, target, profile)
  153 + profile.nil? || setting[:target_profile].blank? || setting[:target_profile].call(target) == profile
  154 + end
  155 +
150 def self.setup 156 def self.setup
151 AVAILABLE_RULES.map do |rule_name, rule| 157 AVAILABLE_RULES.map do |rule_name, rule|
152 point_type = GamificationPlugin::PointsType.find_by_name rule_name 158 point_type = GamificationPlugin::PointsType.find_by_name rule_name
@@ -167,7 +173,7 @@ module Merit @@ -167,7 +173,7 @@ module Merit
167 weight = categorization.weight 173 weight = categorization.weight
168 profile = categorization.profile 174 profile = categorization.profile
169 score lambda {|target| signal * calculate_score(target, weight, setting[:value])}, options do |target| 175 score lambda {|target| signal * calculate_score(target, weight, setting[:value])}, options do |target|
170 - condition(setting, target, profile) 176 + profile_condition(setting, target, profile) && condition(setting, target, profile)
171 end 177 end
172 end 178 end
173 end 179 end