Sha256: 2dcc9bd169ab994cf4311c9424fa3946f4ad6c346c3d026d281c032a7c1de827
Contents?: true
Size: 1.55 KB
Versions: 8
Compression:
Stored size: 1.55 KB
Contents
module Merit # Sets up an app-wide after_filter, and inserts merit_action entries if # there are defined rules (for badges or points) for current # 'controller_path#action_name' module ControllerExtensions def self.included(base) base.after_filter do |controller| if rules_defined? log_merit_action Merit::Action.check_unprocessed if Merit.checks_on_each_request end end end private def log_merit_action Merit::Action.create( user_id: send(Merit.current_user_method).try(:id), action_method: action_name, action_value: params[:value], had_errors: had_errors?, target_model: controller_path, target_id: target_id ).id end def rules_defined? RulesMatcher.new(controller_path, action_name).any_matching? end def had_errors? target_object.respond_to?(:errors) && target_object.errors.try(:present?) end def target_object target_obj = instance_variable_get(:"@#{controller_name.singularize}") if target_obj.nil? str = '[merit] No object found, maybe you need a ' + "'@#{controller_name.singularize}' variable in " + "'#{controller_path}_controller'?" Rails.logger.warn str end target_obj end def target_id target_id = target_object.try(:id) # If target_id is nil # then use params[:id]. if target_id.nil? && params[:id].to_s =~ /^[0-9]+$/ target_id = params[:id] end target_id end end end
Version data entries
8 entries across 8 versions & 1 rubygems