Sha256: ea2cfb529614e8d01c6bac66b6f33f836e5e1e7caed40a6a66c468238143714c
Contents?: true
Size: 1.53 KB
Versions: 2
Compression:
Stored size: 1.53 KB
Contents
require "merit/models/#{Merit.orm}/merit_action" class MeritAction # Check rules defined for a merit_action def check_rules(defined_rules) action_name = "#{target_model}\##{action_method}" unless had_errors # Check Badge rules if defined_rules[action_name].present? defined_rules[action_name].each do |rule| rule.grant_or_delete_badge(self) end end # Check Point rules actions_to_point = MeritPointRules.new.actions_to_point if actions_to_point[action_name].present? point_rule = actions_to_point[action_name] point_rule[:to].each do |to| if to == :action_user if !(target = User.find_by_id(user_id)) Rails.logger.warn "[merit] no user found to grant points" return end else begin target = target_object.send(to) rescue NoMethodError Rails.logger.warn "[merit] No target_object found on check_rules." return end end target.update_attribute(:points, target.points + point_rule[:score]) end end end processed! end # Action's target object def target_object(model_name = nil) # Grab custom model_name from Rule, or target_model from MeritAction triggered klass = model_name || target_model klass.singularize.camelize.constantize.find_by_id(target_id) end # Mark merit_action as processed def processed! self.update_attribute :processed, true end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
merit-0.4.2 | app/models/merit_action.rb |
merit-0.4.1 | app/models/merit_action.rb |