Sha256: 8e50afe7b77f70457c9f4f641db9c1b7926337f6b56a0faf93fb5f0960bd7153
Contents?: true
Size: 1.38 KB
Versions: 3
Compression:
Stored size: 1.38 KB
Contents
require_relative 'observer' module Merit class Judge include Observer 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| point = sash.add_points @rule.score notify_observers(@action.id, point) end end private def grant_badges @sashes.each do |sash| next unless new_or_multiple?(sash) badge_sash = sash.add_badge badge.id notify_observers(@action.id, badge_sash, 'granted') end end def remove_badges @sashes.each do |sash| badge_sash = sash.rm_badge badge.id notify_observers(@action.id, badge_sash, '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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
merit-1.6.2 | lib/merit/judge.rb |
merit-1.6.1 | lib/merit/judge.rb |
merit-1.6.0 | lib/merit/judge.rb |