diff --git a/lib/ext/article_follower.rb b/lib/ext/article_follower.rb index baa2573..af47ebd 100644 --- a/lib/ext/article_follower.rb +++ b/lib/ext/article_follower.rb @@ -2,7 +2,6 @@ require_dependency 'article_follower' class ArticleFollower - has_merit has_merit_actions end diff --git a/lib/merit/badge_rules.rb b/lib/merit/badge_rules.rb index cb731ca..d206991 100644 --- a/lib/merit/badge_rules.rb +++ b/lib/merit/badge_rules.rb @@ -81,9 +81,10 @@ module Merit ], observer: [ { - action: 'article_follower#create', + action: 'articlefollower#create', default_threshold: 5, to: lambda {|article| article.person }, + model: 'ArticleFollower', value: lambda { |article, person| person.present? ? person.article_followers.count : 0 } } ], @@ -117,9 +118,10 @@ module Merit ], articulator: [ { - action: 'article_follower#create', + action: 'articlefollower#create', default_threshold: 5, to: :person, + model: 'ArticleFollower', value: lambda { |article_follower, person| person.present? ? person.article_followers.count : 0 } }, { @@ -128,7 +130,6 @@ module Merit to: :author, value: lambda { |comment, author| author.present? ? author.comments.count : 0 } }, - #mobilizer#create ] } @@ -142,7 +143,9 @@ module Merit environment.gamification_plugin_badges.all.each do |badge| next if rules[badge.name.to_sym].nil? rules[badge.name.to_sym].each do |setting| - grant_on setting[:action], badge: badge.name, level: badge.level, to: setting[:to] do |source| + options = {badge: badge.name, level: badge.level, to: setting[:to]} + options[:model_name] = setting[:model] unless setting[:model].nil? + grant_on setting[:action], options do |source| can_be_granted = true rules[badge.name.to_sym].each do |s| if setting[:to].is_a? Symbol diff --git a/lib/merit/point_rules.rb b/lib/merit/point_rules.rb index 657df3f..39359ec 100644 --- a/lib/merit/point_rules.rb +++ b/lib/merit/point_rules.rb @@ -107,23 +107,25 @@ module Merit profile_action: false }, follower: { - action: 'follow#create', - undo_action: 'follow#destroy', - to: lambda {|follow| follow.profile }, + action: 'articlefollower#create', + undo_action: 'articlefollower#destroy', + to: :person, value: 1, description: _('Follower'), default_weight: 10, - condition: lambda {|follow, profile| profile.nil? or follow.source.profile == profile }, + model: 'ArticleFollower', + condition: lambda {|follow, profile| profile.nil? or follow.article.profile == profile }, profile_action: true }, followed_article_author: { - action: 'follow#create', - undo_action: 'follow#destroy', - to: lambda {|follow| follow.source.author }, + action: 'articlefollower#create', + undo_action: 'articlefollower#destroy', + to: lambda {|follow| follow.article.author }, value: 1, description: _('Followed'), default_weight: 20, - condition: lambda {|follow, profile| profile.nil? or follow.source.profile == profile }, + model: 'ArticleFollower', + condition: lambda {|follow, profile| profile.nil? or follow.article.profile == profile }, profile_action: true }, #mobilizer: { @@ -183,8 +185,9 @@ module Merit AVAILABLE_RULES.each do |point_type, setting| GamificationPlugin::PointsCategorization.for_type(point_type).includes(:profile).each do |categorization| [setting[:action], setting[:undo_action]].compact.zip([1, -1]).each do |action, signal| - block = lambda {|target| signal * calculate_score(target, categorization.weight, setting[:value])} - score block, on: action, to: setting[:to], category: categorization.id.to_s do |target| + options = {on: action, to: setting[:to], category: categorization.id.to_s} + options[:model_name] = setting[:model] unless setting[:model].nil? + score lambda {|target| signal * calculate_score(target, categorization.weight, setting[:value])}, options do |target| condition(setting, target, categorization.profile) end end -- libgit2 0.21.2