module Sqreen::Conditionable

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

Attributes

failing_conditions[RW]
post_conditions[RW]
pre_conditions[RW]

Public Instance Methods

condition_callbacks(conditions) click to toggle source

Hook the necessary callback function

@param conditions [Hash] hash of callback names => conditions

# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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