Class: ErpRules::RulesEngine::RulesFacade

Inherits:
Object
  • Object
show all
Defined in:
lib/erp_rules/rules_engine/rules_facade.rb

Instance Method Summary collapse

Instance Method Details

#invoke(ruleset, context, rules_engine_klass) ⇒ Object

get the configured rule engine and invoke



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/erp_rules/rules_engine/rules_facade.rb', line 6

def invoke(ruleset, context, rules_engine_klass)
  t_start= Time.new
  #get the directives
  directivesMap=context[:directives]
  # here we add in any global directives
  directivesMap=Hash.new if(directivesMap==nil)
  # suppress execution context return
  #(we do this for performance reasons since the execution ctx isnt altered
  directivesMap[:suppress_execution_context_return]=true

  # add the directives map to the context
  context[:directives]=directivesMap;
  ## now we invoke the rule facade
  Rails.logger.debug("Invoking RulesFacade")
  Rails.logger.debug("Ruleset:#{ruleset}")
  Rails.logger.debug("context:#{context}")
  #get the name of the rule engine
  Rails.logger.debug("RULE CLASS : #{rules_engine_klass}")

  #we will use eval instead of Kernel.const_get since the rule engines
  # should be namespaced
  klass = (rules_engine_klass.is_a?(String)) ? eval(rules_engine_klass) : rules_engine_klass
  # create an instance of its singleton
  rule_engine = klass

  #invoke the rule engine
  result=rule_engine.invoke(ruleset,context)
  Rails.logger.debug("\n------------------------------------------------------------------------------------------")
  Rails.logger.debug("RULE ENGINE   :#{rule_engine}")
  Rails.logger.debug("\n------------------------------------------------------------------------------------------")
  Rails.logger.debug("INVOKE RESULTS:"+result.to_yaml)
  Rails.logger.debug("\n------------------------------------------------------------------------------------------")

  Rails.logger.debug("\n------------------------------------------------------------------------------------------")
  t_end=Time.new
  Rails.logger.debug("Rule invocation time:#{(t_end.to_f-t_start.to_f)} sec")
  Rails.logger.debug("\n------------------------------------------------------------------------------------------")

  result
end