Class: Levels::LazyEvaluator
- Inherits:
-
Object
- Object
- Levels::LazyEvaluator
- 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
-
#call(value) ⇒ Object
Internal: Interpret the value.
-
#initialize(level, key_formatter = nil) ⇒ LazyEvaluator
constructor
Internal: Initialize a new LazyEvaluator.
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 |