class StateMachinesRspec::Matchers::Events::Matcher

Attributes

failure_message[R]

Public Class Methods

new(events) click to toggle source
# File lib/matchers/events/matcher.rb, line 9
def initialize(events)
  @options = events.extract_options!
  @events = events
end

Public Instance Methods

description() click to toggle source
# File lib/matchers/events/matcher.rb, line 29
def description
  message = @events.map{ |event| event.inspect }.join(', ')
  message << " when #{state_name.inspect}" if state_name
  message
end
matches?(subject) click to toggle source
# File lib/matchers/events/matcher.rb, line 14
def matches?(subject)
  @subject = subject
  @introspector = StateMachinesIntrospector.new(@subject,
                                               @options.fetch(:on, nil))
  enter_when_state
  return false if undefined_events?
  return false unless matches_events?(@events)
  @failure_message.nil?
end
matches_events?(events) click to toggle source
# File lib/matchers/events/matcher.rb, line 24
def matches_events?(events)
  raise NotImplementedError,
    "subclasses of #{self.class} must override matches_events?"
end

Protected Instance Methods

state_machine_scope() click to toggle source
# File lib/matchers/events/matcher.rb, line 37
def state_machine_scope
  @options.fetch(:on, nil)
end

Private Instance Methods

enter_when_state() click to toggle source
# File lib/matchers/events/matcher.rb, line 43
def enter_when_state
  if state_name
    unless when_state = @introspector.state(state_name)
      raise StateMachinesIntrospectorError,
        "#{@subject.class} does not define state: #{state_name}"
    end

    @subject.send("#{@introspector.state_machine_attribute}=",
                  when_state.value)
  end
end
state_name() click to toggle source
# File lib/matchers/events/matcher.rb, line 55
def state_name
  @options.fetch(:when, nil)
end
undefined_events?() click to toggle source
# File lib/matchers/events/matcher.rb, line 59
def undefined_events?
  undefined_events = @introspector.undefined_events(@events)
  unless undefined_events.empty?
    @failure_message = "state_machine: #{@introspector.state_machine_attribute} " +
                       "does not define events: #{undefined_events.join(', ')}"
  end

  !undefined_events.empty?
end