Class: Levels::LazyEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/levels/lazy_evaluator.rb

Overview

Whenever a value is read, it’s interpreted by the LazyEvaluator. This class implements all of the interpolation rules.

Defined Under Namespace

Classes: DSL

Instance Method Summary collapse

Constructor Details

#initialize(level, key_formatter = nil) ⇒ LazyEvaluator

Internal: Initialize a new LazyEvaluator.

level - Levels::Level or equivalent, used to find referenced

groups and keys.

key_formatter - Levels::System::KeyFormatter.



12
13
14
15
# File 'lib/levels/lazy_evaluator.rb', line 12

def initialize(level, key_formatter = nil)
  @level = level
  @key_formatter = key_formatter || Levels::System::KeyFormatter.new
end

Instance Method Details

#call(value) ⇒ Object

Internal: Interpret the value.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/levels/lazy_evaluator.rb', line 18

def call(value)
  loop do
    case value
    #when /\$\{[A-Z_]+\}/
    when Proc
      dsl = DSL.new(@level)
      value = dsl.instance_exec(&value)
    when Array
      return value.map { |v| call(v) }
    else
      return value
    end
  end
end