class Merit::Judge
Public Class Methods
new(rule, options = {})
click to toggle source
# File lib/merit/judge.rb, line 7 def initialize(rule, options = {}) @rule = rule @action = options[:action] Merit.observers.each do |class_name| add_observer class_name.constantize.new end end
Public Instance Methods
apply_badges()
click to toggle source
Grant badge if rule applies. If it doesn't, and the badge is temporary, then remove it.
# File lib/merit/judge.rb, line 17 def apply_badges if rule_applies? grant_badges else remove_badges if @rule.temporary end end
apply_points()
click to toggle source
# File lib/merit/judge.rb, line 25 def apply_points return unless rule_applies? sashes.each do |sash| point = sash.add_points points, category: category notify_observers( description: I18n.t("merit.granted_points", points: points), merit_object: point, sash_id: point.sash_id ) end end
Private Instance Methods
badge()
click to toggle source
# File lib/merit/judge.rb, line 90 def badge @rule.badge end
category()
click to toggle source
# File lib/merit/judge.rb, line 82 def category @rule.category end
grant_badges()
click to toggle source
# File lib/merit/judge.rb, line 39 def grant_badges sashes.each do |sash| next unless new_or_multiple?(sash) badge_sash = sash.add_badge badge.id notify_observers( description: I18n.t("merit.granted_badge", badge_name: badge.name), merit_object: badge_sash, sash_id: badge_sash.sash_id ) end end
new_or_multiple?(sash)
click to toggle source
# File lib/merit/judge.rb, line 62 def new_or_multiple?(sash) !sash.badge_ids.include?(badge.id) || @rule.multiple end
notify_observers(changed_data = {})
click to toggle source
Calls superclass method
# File lib/merit/judge.rb, line 94 def notify_observers(changed_data = {}) changed hash = { granted_at: @action.created_at, merit_action_id: @action.id }.merge(changed_data) super(hash) end
points()
click to toggle source
# File lib/merit/judge.rb, line 74 def points if @rule.score.respond_to?(:call) @rule.score.call(rule_object) else @rule.score end end
remove_badges()
click to toggle source
# File lib/merit/judge.rb, line 51 def remove_badges sashes.each do |sash| if sash.rm_badge badge.id notify_observers( description: I18n.t("merit.removed_badge", badge_name: badge.name), sash_id: sash.id ) end end end
rule_applies?()
click to toggle source
# File lib/merit/judge.rb, line 70 def rule_applies? @rule.applies? rule_object end
rule_object()
click to toggle source
# File lib/merit/judge.rb, line 66 def rule_object BaseTargetFinder.find(@rule, @action) end
sashes()
click to toggle source
# File lib/merit/judge.rb, line 86 def sashes @sashes ||= SashFinder.find @rule, @action end