Sha256: 0ef7bda5440eae61e15cbcf7894796ef2ed39897a81d4e46187453407184abe5

Contents?: true

Size: 816 Bytes

Versions: 1

Compression:

Stored size: 816 Bytes

Contents

module Workflow
  class Event

    attr_accessor :name, :transitions_to, :meta, :action, :condition

    def initialize(name, transitions_to, condition = nil, meta = {}, &action)
      @name = name
      @transitions_to = transitions_to.to_sym
      @meta = meta
      @action = action
      @condition = if condition.nil? || condition.respond_to?(:call)
                     condition
                   else
                     raise TypeError, 'condition must be nil or callable (eg. a proc or lambda)'
                   end
    end

    def condition_applicable?(object)
      condition ? condition.call(object) : true
    end

    def draw(graph, from_state)
      graph.add_edges(from_state.name.to_s, transitions_to.to_s, meta.merge(:label => to_s))
    end

    def to_s
      @name.to_s
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
workflow-1.2.0 lib/workflow/event.rb