Sha256: 2791320903ebc737fd77d30f12f84ed7e4a489c54cdac3cd6bcf1e72c3e8f7ff

Contents?: true

Size: 724 Bytes

Versions: 8

Compression:

Stored size: 724 Bytes

Contents

module Workflow
  class EventCollection < Hash

    def [](name)
      super name.to_sym # Normalize to symbol
    end

    def push(name, event)
      key = name.to_sym
      self[key] ||= []
      self[key] << event
    end

    def flat
      self.values.flatten.uniq do |event|
        [:name, :transitions_to, :meta, :action].map { |m| event.send(m) }
      end
    end

    def include?(name_or_obj)
      case name_or_obj
      when Event
        flat.include? name_or_obj
      else
        !(self[name_or_obj].nil?)
      end
    end

    def first_applicable(name, object_context)
      (self[name] || []).detect do |event|
        event.condition_applicable?(object_context) && event
      end
    end

  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
workflow-3.0.0 lib/workflow/event_collection.rb
workflow-2.0.2 lib/workflow/event_collection.rb
workflow-2.0.1 lib/workflow/event_collection.rb
workflow-2.0.0 lib/workflow/event_collection.rb
workflow-2.0.0.pre lib/workflow/event_collection.rb
workflow-orchestrator-1.3.1 lib/workflow/event_collection.rb
workflow-orchestrator-1.3.0 lib/workflow/event_collection.rb
workflow-1.2.0 lib/workflow/event_collection.rb