1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionpack/lib/action_dispatch/journey/gtg/simulator.rb
Andrew White 56fee39c39 Integrate Journey into Action Dispatch
Move the Journey code underneath the ActionDispatch namespace so
that we don't pollute the global namespace with names that may
be used for models.

Fixes rails/journey#49.
2012-12-19 22:13:08 +00:00

44 lines
879 B
Ruby

require 'strscan'
module ActionDispatch
module Journey
module GTG
class MatchData
attr_reader :memos
def initialize memos
@memos = memos
end
end
class Simulator
attr_reader :tt
def initialize transition_table
@tt = transition_table
end
def simulate string
input = StringScanner.new string
state = [0]
while sym = input.scan(%r([/.?]|[^/.?]+))
state = tt.move(state, sym)
end
acceptance_states = state.find_all { |s|
tt.accepting? s
}
return if acceptance_states.empty?
memos = acceptance_states.map { |x| tt.memo x }.flatten.compact
MatchData.new memos
end
alias :=~ :simulate
alias :match :simulate
end
end
end
end