class StateMachinesIntrospector

Public Class Methods

new(subject, state_machine_name=nil) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 2
def initialize(subject, state_machine_name=nil)
  @subject = subject
  @state_machine_name = state_machine_name
end

Public Instance Methods

all_states() click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 15
def all_states
  state_machine.states.to_a.map(&:name)
end
current_state_value() click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 11
def current_state_value
  @subject.send(state_machine_attribute)
end
defined_states(states) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 27
def defined_states(states)
  states.select { |s| state_defined? s }
end
event_defined?(event) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 43
def event_defined?(event)
  @subject.respond_to? "can_#{event}?"
end
invalid_events(events) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 39
def invalid_events(events)
  events.reject { |e| valid_event? e }
end
state(name) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 19
def state(name)
  state_machine.states.find { |s| s.name == name }
end
state_machine_attribute() click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 7
def state_machine_attribute
  state_machine.attribute
end
undefined_events(events) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 31
def undefined_events(events)
  events.reject { |e| event_defined? e }
end
undefined_states(states) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 23
def undefined_states(states)
  states.reject { |s| state_defined? s }
end
valid_events(events) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 35
def valid_events(events)
  events.select { |e| valid_event? e }
end
valid_transition?(event, to_state) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 47
def valid_transition?(event, to_state)
  @subject.send(event)
  current_state_value == to_state
end

Private Instance Methods

state_defined?(state_name) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 68
def state_defined?(state_name)
  state(state_name)
end
state_machine() click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 54
def state_machine
  if @state_machine_name
    unless machine = @subject.class.state_machines[@state_machine_name]
      raise StateMachinesIntrospectorError,
        "#{@subject.class} does not have a state machine defined " \
        "on #{@state_machine_name}"
    end
  else
    machine = @subject.class.state_machine
  end

  machine
end
valid_event?(event) click to toggle source
# File lib/state_machines_rspec/state_machines_introspector.rb, line 72
def valid_event?(event)
  @subject.send("can_#{event}?")
end