Class: Proforma::ExtendedEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/proforma/extended_evaluator.rb,
lib/proforma/extended_evaluator/version.rb,
lib/proforma/extended_evaluator/resolver.rb,
lib/proforma/extended_evaluator/formatter.rb

Overview

This class provides robust functionality for value resolution and text templating. For value resolution it uses its own dot-notation and message-based object traversal algorithm. For text templating it uses the Stringento library.

Defined Under Namespace

Classes: Formatter, Resolver

Constant Summary collapse

VERSION =
'1.1.0'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(formatter: Formatter.new, resolver: Resolver.new) ⇒ ExtendedEvaluator

Returns a new instance of ExtendedEvaluator.

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
# File 'lib/proforma/extended_evaluator.rb', line 27

def initialize(formatter: Formatter.new, resolver: Resolver.new)
  raise ArgumentError, 'formatter is required'  unless formatter
  raise ArgumentError, 'resolver is required'   unless resolver

  @formatter  = formatter
  @resolver   = resolver

  freeze
end

Instance Attribute Details

#formatterObject (readonly)

Returns the value of attribute formatter.



25
26
27
# File 'lib/proforma/extended_evaluator.rb', line 25

def formatter
  @formatter
end

#resolverObject (readonly)

Returns the value of attribute resolver.



25
26
27
# File 'lib/proforma/extended_evaluator.rb', line 25

def resolver
  @resolver
end

Instance Method Details

#text(object, expression) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/proforma/extended_evaluator.rb', line 41

def text(object, expression)
  record = object.is_a?(Array) || object.nil? ? {} : object

  Stringento.evaluate(
    expression.to_s,
    record,
    resolver: resolver,
    formatter: formatter
  )
end

#value(object, expression) ⇒ Object



37
38
39
# File 'lib/proforma/extended_evaluator.rb', line 37

def value(object, expression)
  resolver.resolve(expression, object)
end