class Ellington::Route
Attributes
initialized[R]
Public Class Methods
board(passenger)
click to toggle source
# File lib/ellington/route.rb, line 51 def board(passenger) lines.first.board passenger end
connect(line, after: [], strict: false)
click to toggle source
# File lib/ellington/route.rb, line 96 def connect(line, after: [], strict: false) connections << Ellington::Connection.new(line, *after, strict: false) end
connections()
click to toggle source
# File lib/ellington/route.rb, line 92 def connections @connections ||= Ellington::ConnectionList.new end
inherited(subclass)
click to toggle source
# File lib/ellington/route.rb, line 43 def inherited(subclass) (@subclasses ||= []) << subclass end
initial_state()
click to toggle source
# File lib/ellington/route.rb, line 82 def initial_state @initial_state ||= "PRE #{name}" end
initialized?()
click to toggle source
# File lib/ellington/route.rb, line 47 def initialized? @initialized end
line_completed(line_info)
click to toggle source
# File lib/ellington/route.rb, line 108 def line_completed(line_info) route_info = Ellington::RouteInfo.new(self, line_info) connections = required_connections(route_info.passenger) return complete_route(route_info) if connections.empty? connections.each do |connection| connection.line.board route_info.passenger end end
lines()
click to toggle source
# File lib/ellington/route.rb, line 55 def lines @lines ||= Ellington::LineList.new(self) end
new()
click to toggle source
Calls superclass method
# File lib/ellington/route.rb, line 10 def initialize super self.class if lines.empty? message = "#{self.class.name} has no lines!" raise Ellington::NoLinesDeclared.new(message) end if goal.empty? message = "#{self.class.name} has no lines!" raise Ellington::NoGoalDeclared.new(message) end initialize_lines states end
pass_target(*line_goals)
click to toggle source
# File lib/ellington/route.rb, line 86 def pass_target(*line_goals) @goal ||= Ellington::Target.new(*line_goals.flatten) end
passenger_attrs_to_log()
click to toggle source
# File lib/ellington/route.rb, line 100 def passenger_attrs_to_log @passenger_attrs_to_log ||= [] end
set_passenger_attrs_to_log(*attrs)
click to toggle source
# File lib/ellington/route.rb, line 104 def set_passenger_attrs_to_log(*attrs) @passenger_attrs_to_log = attrs end
states()
click to toggle source
# File lib/ellington/route.rb, line 59 def states @states ||= begin catalog = StateJacket::Catalog.new catalog.add initial_state => lines.first.stations.first.states.keys lines.each do |line| line.states.each do |state, transitions| catalog[state] = transitions.nil? ? nil : transitions.dup end end connections.each do |connection| connection.states.each do |state| catalog[state] ||= [] catalog[state].concat connection.line.stations.first.states.keys end end catalog.lock catalog end end
Protected Class Methods
complete_route(route_info)
click to toggle source
# File lib/ellington/route.rb, line 119 def complete_route(route_info) if passed.satisfied?(route_info.passenger) || failed.satisfied?(route_info.passenger) log route_info.route_completed_message changed notify_observers route_info end end
log(message)
click to toggle source
# File lib/ellington/route.rb, line 133 def log(message) return unless Ellington.logger Ellington.logger.info message end
required_connections(passenger)
click to toggle source
# File lib/ellington/route.rb, line 127 def required_connections(passenger) connections.select do |connection| connection.required?(passenger) end end
Public Instance Methods
initialize_lines()
click to toggle source
# File lib/ellington/route.rb, line 27 def initialize_lines lines.each do |line| line.route = self line.add_observer self, :line_completed line.stations.each do |station| station.line = line station.add_observer line, :station_completed end end end