Module: Sqreen::Conditionable

Included in:
Rules::RuleCB
Defined in:
lib/sqreen/conditionable.rb

Overview

A module that will dynamically had preconditions to the pre/post/failing callbacks

Instance Method Summary collapse

Instance Method Details

#condition_callbacks(conditions) ⇒ Object

Hook the necessary callback function

Parameters:

  • conditions (Hash)

    hash of callback names => conditions



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sqreen/conditionable.rb', line 15

def condition_callbacks(conditions)
  conditions = {} if conditions.nil?
  base = self.class
  %w(pre post failing).each do |cb|
    conds = conditions[cb]
    next unless base.method_defined?(cb)
    send("#{cb}_conditions=", ConditionEvaluator.new(conds)) unless conds.nil?
    defd = base.instance_variable_defined?("@conditional_hooked_#{cb}")
    next if defd && base.instance_variable_get("@conditional_hooked_#{cb}")
    base.send(:alias_method, "#{cb}_without_conditions", cb)
    base.send(:alias_method, cb, "#{cb}_with_conditions")
    base.instance_variable_set("@conditional_hooked_#{cb}", true)
  end
end

#failing_with_conditions(rv, inst, args, budget = nil, &block) ⇒ Object



42
43
44
45
46
# File 'lib/sqreen/conditionable.rb', line 42

def failing_with_conditions(rv, inst, args, budget = nil, &block)
  eargs = [nil, framework, inst, args, @data, rv]
  return nil if !failing_conditions.nil? && !failing_conditions.evaluate(*eargs)
  failing_without_conditions(rv, inst, args, budget, &block)
end

#post_with_conditions(rv, inst, args, budget = nil, &block) ⇒ Object



36
37
38
39
40
# File 'lib/sqreen/conditionable.rb', line 36

def post_with_conditions(rv, inst, args, budget = nil, &block)
  eargs = [nil, framework, inst, args, @data, rv]
  return nil if !post_conditions.nil? && !post_conditions.evaluate(*eargs)
  post_without_conditions(rv, inst, args, budget, &block)
end

#pre_with_conditions(inst, args, budget = nil, &block) ⇒ Object



30
31
32
33
34
# File 'lib/sqreen/conditionable.rb', line 30

def pre_with_conditions(inst, args, budget = nil, &block)
  eargs = [nil, framework, inst, args, @data, nil]
  return nil if !pre_conditions.nil? && !pre_conditions.evaluate(*eargs)
  pre_without_conditions(inst, args, budget, &block)
end