Sha256: 3a9bec6a8db4cd29bf68b0155dcbf6366ac4d28672116ec07fa62bbe7dd0e0a1

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

class MeritAction < ActiveRecord::Base
  # Check rules defined for a merit_action
  def check_badge_rules(defined_rules)
    action_name = "#{target_model}\##{action_method}"

    # 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
            Rails.logger.warn "[merit] No target_object found on check_badge_rules."
            return
          end
        end
        target.update_attribute(:points, target.points + point_rule[:score])
      end
    end

    processed!
  end

  # Action's target object
  def target_object
    klass = target_model.singularize.camelize.constantize
    klass.find_by_id(target_id)
  end

  # Mark merit_action as processed
  def processed!
    self.update_attribute(:processed, true)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
merit-0.1.3 app/models/merit_action.rb