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