Sha256: ffdc16cf00cc1bf9b5e9eb33cf7443ad3cc35cd4fb67668c066b0774a0af532a
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
module Merit class Judge def initialize(sashes, rule, options = {}) @sashes = sashes @rule = rule # FIXME: Too much context? # A Judge should apply reputation independently of the action @action = options[:action] end # Grant badge if rule applies. If it doesn't, and the badge is temporary, # then remove it. def apply_badges if rule_applies? grant_badges else remove_badges if @rule.temporary end end def apply_points return unless rule_applies? @sashes.each do |sash| points = sash.add_points @rule.score ActivityLog.create( action_id: @action.id, related_change: points ) end end private def grant_badges @sashes.each do |sash| next unless new_or_multiple?(sash) badge_sash = sash.add_badge badge.id ActivityLog.create( action_id: @action.id, related_change: badge_sash, description: 'granted' ) end end def remove_badges @sashes.each do |sash| badge_sash = sash.rm_badge badge.id ActivityLog.create( action_id: @action.id, related_change: badge_sash, description: 'removed' ) end end def new_or_multiple?(sash) !sash.badge_ids.include?(badge.id) || @rule.multiple end def rule_applies? rule_object = BaseTargetFinder.find(@rule, @action) @rule.applies? rule_object end def badge @rule.badge end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
merit-1.5.0 | lib/merit/judge.rb |