Sha256: ded04ace7c37dc1b7b18e103d78b76f2e94cb70b49403ad6e96641c020814a8d

Contents?: true

Size: 1.43 KB

Versions: 19

Compression:

Stored size: 1.43 KB

Contents

# Merit::Action general schema
#   ______________________________________________________________
#   source  | action       | target
#   user_id | method,value | model,id | processed
#   ______________________________________________________________
#   1 | comment nil | List 8  | true
#   1 | vote 3      | List 12 | true
#   3 | follow nil  | User 1  | false
#   X | create nil  | User #{generated_id} | false
#   ______________________________________________________________
#
# Rules relate to merit_actions by action name ('controller#action' string)
module Merit::Models
  module ActionConcern
    extend ActiveSupport::Concern

    class_methods do
      def check_unprocessed
        where(processed: false).find_each(&:check_all_rules)
      end
    end

    # Check rules defined for a merit_action
    def check_all_rules
      mark_as_processed!
      return if had_errors

      check_rules rules_matcher.select_from(Merit::AppBadgeRules), :badges
      check_rules rules_matcher.select_from(Merit::AppPointRules), :points
    end

    private

    def check_rules(rules_array, badges_or_points)
      rules_array.each do |rule|
        judge = Merit::Judge.new(rule, action: self)
        judge.public_send(:"apply_#{badges_or_points}")
      end
    end

    def mark_as_processed!
      self.processed = true
      save
    end

    def rules_matcher
      @rules_matcher ||= ::Merit::RulesMatcher.new(target_model, action_method)
    end
  end
end

Version data entries

19 entries across 19 versions & 2 rubygems

Version Path
merit-4.0.3 lib/merit/models/action_concern.rb
qalam_merit-4.5.12 lib/merit/models/action_concern.rb
merit-4.0.2 lib/merit/models/action_concern.rb
qalam_merit-4.5.11 lib/merit/models/action_concern.rb
qalam_merit-4.5.10 lib/merit/models/action_concern.rb
qalam_merit-4.5.09 lib/merit/models/action_concern.rb
qalam_merit-4.5.08 lib/merit/models/action_concern.rb
qalam_merit-4.5.07 lib/merit/models/action_concern.rb
qalam_merit-4.5.06 lib/merit/models/action_concern.rb
qalam_merit-4.5.05 lib/merit/models/action_concern.rb
qalam_merit-4.5.04 lib/merit/models/action_concern.rb
qalam_merit-4.5.03 lib/merit/models/action_concern.rb
qalam_merit-4.5.02 lib/merit/models/action_concern.rb
qalam_merit-4.5.01 lib/merit/models/action_concern.rb
qalam_merit-4.5.00 lib/merit/models/action_concern.rb
qalam_merit-4.0.4 lib/merit/models/action_concern.rb
qalam_merit-4.0.35 lib/merit/models/action_concern.rb
merit-4.0.1 lib/merit/models/action_concern.rb
merit-4.0.0 lib/merit/models/action_concern.rb