Class: Levels::Audit::ValueObserver

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

Overview

The ValueObserver iterates over levels to find the appriate values. It accumulates all possible values and indicates which is the “final” value.

Instance Method Summary collapse

Constructor Details

#initialize(root_observer, evaluator) ⇒ ValueObserver

Initialize a new ValueObserver.

root_observer - Levels::Audit::RootObserver. evaluator - Ducktype #call used to interpret raw values.



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

def initialize(root_observer, evaluator)
  @root_observer = root_observer
  @evaluator = evaluator
end

Instance Method Details

#observe_values(levels, group_key, value_key) ⇒ Object

Get the possible values for a group+value key. The values are retrieved and evaluated in context of the RootObserver so that recursive values are tracked.

levels - Array of Levels::Level. group_key - Levels::Key. value_key - Levels::Key.

Returns a Levels::Audit::Values.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/levels/audit/value_observer.rb', line 26

def observe_values(levels, group_key, value_key)
  valid_levels = levels.find_all do |level|
    level.defined?(group_key) &&
    level[group_key].defined?(value_key)
  end

  values = valid_levels.map.with_index do |level, index|
    group = level[group_key]

    Value.new(level._level_name, index == valid_levels.size - 1) do |value|
      @root_observer.with_current_value(value) do
        @evaluator.call(group[value_key])
      end
    end
  end

  Values.new(group_key, value_key, values)
end