Sha256: 7640c393296c1b8471ef0c59cf3ddd7504d4c8b291d155e5c71740890cb533a0

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

module Merit
  # This module sets up an after_filter to update merit_actions table.
  # It executes on every action, and checks rules only if
  # 'controller_name#action_name' has defined badge or point rules
  module ControllerExtensions
    def self.included(base)
      base.after_filter do |controller|
        action      = "#{controller_name}\##{action_name}"
        badge_rules = BadgeRules.new
        point_rules = PointRules.new
        if badge_rules.defined_rules[action].present? || point_rules.actions_to_point[action].present?
          merit_action_id = MeritAction.create(
            :user_id       => send(Merit.current_user_method).try(:id),
            :action_method => action_name,
            :action_value  => params[:value],
            :had_errors    => target_object.try(:errors).try(:present?) || false,
            :target_model  => controller_name,
            :target_id     => target_id
          ).id

          # Check rules in after_filter?
          if Merit.checks_on_each_request
            badge_rules.check_new_actions
          end
        end
      end
    end

    def target_object
      target_obj = instance_variable_get(:"@#{controller_name.singularize}")
      if target_obj.nil?
        Rails.logger.warn("[merit] No object found, maybe you need a '@#{controller_name.singularize}' variable in '#{controller_name}_controller'?")
      end
      target_obj
    end

    def target_id
      target_id = params[:id] || target_object.try(:id)
      # using friendly_id if id nil or string (), and target_object found
      if target_object.present? && (target_id.nil? || !(target_id =~ /^[0-9]+$/))
        target_id = target_object.id
      end
      target_id
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
merit-1.0.1 lib/merit/controller_extensions.rb
merit-1.0.0 lib/merit/controller_extensions.rb