Sha256: 26daafbe09534ac9315a29644407500a352f6c3eb9b6731cc241f4a9c1208322

Contents?: true

Size: 1.13 KB

Versions: 25

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true
module Dynflow
  module Testing
    class ManagedClock

      attr_reader :pending_pings

      include Algebrick::Types

      def initialize
        @pending_pings = []
      end

      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

      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

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

      def current_time
        @current_time ||= Time.now
      end

      def clear
        @pending_pings.clear
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
dynflow-1.8.2 lib/dynflow/testing/managed_clock.rb
dynflow-1.8.1 lib/dynflow/testing/managed_clock.rb
dynflow-1.8.0 lib/dynflow/testing/managed_clock.rb
dynflow-1.7.0 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.11 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.10 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.8 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.7 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.6 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.5 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.4 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.3 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.2 lib/dynflow/testing/managed_clock.rb
dynflow-1.6.1 lib/dynflow/testing/managed_clock.rb
dynflow-1.4.9 lib/dynflow/testing/managed_clock.rb
dynflow-1.4.8 lib/dynflow/testing/managed_clock.rb
dynflow-1.5.0 lib/dynflow/testing/managed_clock.rb
dynflow-1.4.7 lib/dynflow/testing/managed_clock.rb
dynflow-1.4.6 lib/dynflow/testing/managed_clock.rb
dynflow-1.4.5 lib/dynflow/testing/managed_clock.rb