mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
56fee39c39
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.
44 lines
879 B
Ruby
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
|