Sha256: 1e85b76f46684f3946a2d19ecc2f21df51d21dd0bdc9fa7f7b963f7236efba68
Contents?: true
Size: 1.87 KB
Versions: 2
Compression:
Stored size: 1.87 KB
Contents
require "merit/models/#{Merit.orm}/merit_action" class MeritAction attr_accessible :user_id, :action_method, :action_value, :had_errors, :target_model, :target_id, :processed, :log # Check rules defined for a merit_action def check_rules unless had_errors check_badge_rules check_point_rules end processed! end def check_badge_rules return if badge_rules.nil? badge_rules.each { |rule| rule.grant_or_delete_badge(self) } end def check_point_rules return if point_rules.nil? point_rules.each { |rule| rule.grant_points(self) } end def badge_rules @badge_rules ||= Merit::BadgeRules.new.defined_rules[action_str] || [] end def point_rules @point_rules ||= Merit::PointRules.new.actions_to_point[action_str] || [] end def action_str "#{target_model}\##{action_method}" end def target(to) @target ||= (to == :action_user) ? action_user : other_target(to) end def action_user begin Merit.user_model.find(user_id) rescue ActiveRecord::RecordNotFound Rails.logger.warn "[merit] no #{Merit.user_model} found with id #{user_id}" return end end def other_target(to) begin target_object.send(to) rescue NoMethodError Rails.logger.warn "[merit] NoMethodError on '#{target_object.inspect}.#{to}' (called from MeritAction#other_target)" return end 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) rescue => e Rails.logger.warn "[merit] no target_object found: #{e}" end def log!(str) self.log = "#{self.log}#{str}|" self.save end # Mark merit_action as processed def processed! self.processed = true self.save end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
merit-1.0.1 | app/models/merit_action.rb |
merit-1.0.0 | app/models/merit_action.rb |