class Triggerable::Rules::Automation
Attributes
pass_relation[RW]
Public Class Methods
new(model, options, block)
click to toggle source
Calls superclass method
# File lib/triggerable/rules/automation.rb, line 6 def initialize model, options, block super(model, options, block) @pass_relation = options[:pass_relation] @unscoped = options[:unscoped] end
Public Instance Methods
execute!()
click to toggle source
# File lib/triggerable/rules/automation.rb, line 12 def execute! ids = ActiveRecord::Base.connection.execute(build_query).map { |r| r['id'] } models = @unscoped ? model.unscoped : model models = models.where(id: ids) Triggerable::Engine.log(:debug, "#{desc}: processing #{models.count} object(s)") if @pass_relation execute_on!(models) else models.each { |object| execute_on!(object) } end end
Private Instance Methods
build_query()
click to toggle source
# File lib/triggerable/rules/automation.rb, line 28 def build_query table = model.arel_table query = table.where(@condition.scope(table)) .project(Arel.sql('id')) .to_sql Triggerable::Engine.log(:debug, "#{desc}: #{query}") query end
execute_on!(target)
click to toggle source
# File lib/triggerable/rules/automation.rb, line 39 def execute_on!(target) begin actions.each {|a| a.run_for!(target, name)} rescue Exception => ex Triggerable::Engine.log(:error, "#{desc} failed with exception #{ex}") end end