Class: Levels::Audit::RootObserver

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

Overview

The RootObserver observes all accesses to group and value data.

Instance Method Summary collapse

Constructor Details

#initialize(evaluator) ⇒ RootObserver

Initialize a new RootObserver

evaluator - Ducktype #call used to interpret raw values.



10
11
12
13
# File 'lib/levels/audit/root_observer.rb', line 10

def initialize(evaluator)
  @evaluator = evaluator
  @current_value_stack = []
end

Instance Method Details

#current_valueObject

Private: Get the current value.

Returns a Levels::Audit::Value or nil.



50
51
52
# File 'lib/levels/audit/root_observer.rb', line 50

def current_value
  @current_value_stack.last
end

#observe_group(user_observer) ⇒ Object

Get an observer to watch when values are accessed from a group.

event_handler - Levels::EventHandler to receive observations.

Returns a Levels::Audit::GroupObserver.



20
21
22
23
24
25
26
27
28
# File 'lib/levels/audit/root_observer.rb', line 20

def observe_group(user_observer)
  if current_value
    observer = NestedGroupObserver.new(value_observer)
    current_value.add_nested_group_observer(observer)
    observer
  else
    GroupObserver.new(value_observer, user_observer)
  end
end

#with_current_value(value) ⇒ Object

Private: Set the current value context. This is used to capture recursive values.

value - Levels::Audit::Value.

Yields.

Returns nothing.



38
39
40
41
42
43
44
45
# File 'lib/levels/audit/root_observer.rb', line 38

def with_current_value(value)
  begin
    @current_value_stack << value
    yield
  ensure
    @current_value_stack.pop
  end
end