Module: DMN

Defined in:
lib/dmn.rb,
lib/dmn/rule.rb,
lib/dmn/input.rb,
lib/dmn/output.rb,
lib/dmn/version.rb,
lib/dmn/decision.rb,
lib/dmn/variable.rb,
lib/dmn/definitions.rb,
lib/dmn/configuration.rb,
lib/dmn/decision_table.rb,
lib/dmn/information_requirement.rb

Defined Under Namespace

Classes: Configuration, Decision, DecisionTable, Definitions, EvaluationError, InformationRequirement, Input, Output, Rule, SyntaxError, Variable

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.configObject



59
60
61
# File 'lib/dmn.rb', line 59

def self.config
  @config ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Yields:



63
64
65
# File 'lib/dmn.rb', line 63

def self.configure
  yield(config)
end

.decide(decision_id, definitions: nil, definitions_json: nil, definitions_xml: nil, variables: {}) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/dmn.rb', line 42

def self.decide(decision_id, definitions: nil, definitions_json: nil, definitions_xml: nil, variables: {})
  if definitions_xml.present?
    definitions = DMN::Definitions.from_xml(definitions_xml)
  elsif definitions_json.present?
    definitions = DMN::Definitions.from_json(definitions_json)
  end
  definitions.evaluate(decision_id, variables: variables)
end

.definitions_from_json(json) ⇒ Object



55
56
57
# File 'lib/dmn.rb', line 55

def self.definitions_from_json(json)
  DMN::Definitions.from_json(json)
end

.definitions_from_xml(xml) ⇒ Object



51
52
53
# File 'lib/dmn.rb', line 51

def self.definitions_from_xml(xml)
  DMN::Definitions.from_xml(xml)
end

.evaluate(expression_text, variables: {}) ⇒ Object

Raises:



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

def self.evaluate(expression_text, variables: {})
  literal_expression = FEEL::LiteralExpression.new(text: expression_text)
  raise SyntaxError, "Expression is not valid" unless literal_expression.valid?
  literal_expression.evaluate(variables)
end

.test(input, unary_tests_text, variables: {}) ⇒ Object

Raises:



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

def self.test(input, unary_tests_text, variables: {})
  unary_tests = FEEL::UnaryTests.new(text: unary_tests_text)
  raise SyntaxError, "Unary tests are not valid" unless unary_tests.valid?
  unary_tests.test(input, variables)
end