Sha256: caac1b2c6fdfd98352be581223690f7c6b75ecd0c0ae910c1fb6ac8085c53238

Contents?: true

Size: 1 KB

Versions: 2

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module Dynflow
  class ExecutionHistory
    include Algebrick::TypeCheck
    include Enumerable

    Event = Algebrick.type do
      fields! time:     Integer,
              name:     String,
              world_id: type { variants String, NilClass }
    end

    module Event
      def inspect
        ["#{Time.at(time).utc}: #{name}", world_id].compact.join(' @ ')
      end
    end

    attr_reader :events

    def initialize(events = [])
      @events = (events || []).each { |e| Type! e, Event }
    end

    def each(&block)
      @events.each(&block)
    end

    def add(name, world_id = nil)
      @events << Event[Time.now.to_i, name, world_id]
    end

    def to_hash
      @events.map(&:to_hash)
    end

    def inspect
      "ExecutionHistory: #{@events.inspect}"
    end

    def self.new_from_hash(value)
      value ||= [] # for compatibility with tasks before the
      # introduction of execution history
      self.new(value.map { |hash| Event[hash] })
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dynflow-1.9.0 lib/dynflow/execution_history.rb
dynflow-1.8.3 lib/dynflow/execution_history.rb