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