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
-
#condition_callbacks(conditions) ⇒ Object
Hook the necessary callback function.
- #failing_with_conditions(rv, inst, args, budget = nil, &block) ⇒ Object
- #post_with_conditions(rv, inst, args, budget = nil, &block) ⇒ Object
- #pre_with_conditions(inst, args, budget = nil, &block) ⇒ Object
Instance Method Details
#condition_callbacks(conditions) ⇒ Object
Hook the necessary callback function
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 |