Class: Dynflow::Testing::ManagedClock

Inherits:
Object
  • Object
show all
Includes:
Algebrick::Types
Defined in:
lib/dynflow/testing/managed_clock.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeManagedClock

Returns a new instance of ManagedClock.



10
11
12
# File 'lib/dynflow/testing/managed_clock.rb', line 10

def initialize
  @pending_pings = []
end

Instance Attribute Details

#pending_pingsObject (readonly)

Returns the value of attribute pending_pings.



6
7
8
# File 'lib/dynflow/testing/managed_clock.rb', line 6

def pending_pings
  @pending_pings
end

Instance Method Details

#clearObject



40
41
42
# File 'lib/dynflow/testing/managed_clock.rb', line 40

def clear
  @pending_pings.clear
end

#current_timeObject



36
37
38
# File 'lib/dynflow/testing/managed_clock.rb', line 36

def current_time
  @current_time ||= Time.now
end

#ping(who, time, with_what = nil, where = :<<) ⇒ Object



14
15
16
17
18
19
# File 'lib/dynflow/testing/managed_clock.rb', line 14

def ping(who, time, with_what = nil, where = :<<)
  time = current_time + time if time.is_a? Numeric
  with = with_what.nil? ? None : Some[Object][with_what]
  @pending_pings << Clock::Timer[who, time, with, where]
  @pending_pings.sort!
end

#progress(ignored_subjects = []) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/dynflow/testing/managed_clock.rb', line 21

def progress(ignored_subjects = [])
  if next_ping = @pending_pings.shift
    if !next_ping.what.respond_to?(:value) || !ignored_subjects.include?(next_ping.what.value)
      # we are testing an isolated system = we can move in time
      # without actually waiting
      @current_time = next_ping.when
      next_ping.apply
    end
  end
end

#progress_all(ignored_subjects = []) ⇒ Object



32
33
34
# File 'lib/dynflow/testing/managed_clock.rb', line 32

def progress_all(ignored_subjects = [])
  progress(ignored_subjects) until @pending_pings.empty?
end