Sha256: a2f9ae5017c86bc2fb952e5864601c6caca015ad38e0900bcc7895da8859f504

Contents?: true

Size: 1.33 KB

Versions: 6

Compression:

Stored size: 1.33 KB

Contents

module StateMachina
  class Event
    attr_reader :model_name, :machine_name, :name, :metadata
    attr_accessor :machine, :guard_context
    alias_method :state_machine, :machine

    def initialize(model_name, machine_name, name, metadata: {})
      @model_name = model_name
      @machine_name = machine_name
      @name = name.to_s
      @metadata = metadata
    end

    def transition(from_state_name, to_state_name, guard: nil, metadata: {})
      machine = StateMachina::Registry.find_machine!(model_name, machine_name)
      transition = StateMachina::Transition.new(model_name, machine.name, name, from_state_name, to_state_name, guard: guard, metadata: metadata)

      StateMachina::Registry.register_transition(transition)
    end

    def transitions
      transitions = StateMachina::Registry.find_transitions(model_name, machine_name, name)
      transitions.each do |transition|
        transition.machine = machine
        transition.guard_context = guard_context
      end
      transitions
    end

    def execute
      resolve_to_transition&.execute
    end

    def resolve_to_transition
      transitions.find do |transition|
        transition.possible? && transition.permitted?
      end
    end

    def possible?
      transitions.any?(&:possible?)
    end

    def permitted?
      transitions.any?(&:permitted?)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
state_machina-0.1.5 lib/state_machina/event.rb
state_machina-0.1.4 lib/state_machina/event.rb
state_machina-0.1.3 lib/state_machina/event.rb
state_machina-0.1.2 lib/state_machina/event.rb
state_machina-0.1.1 lib/state_machina/event.rb
state_machina-0.1.0 lib/state_machina/event.rb