lib/usher/node.rb in joshbuddy-usher-0.4.2 vs lib/usher/node.rb in joshbuddy-usher-0.4.3
- old
+ new
@@ -88,92 +88,50 @@
end
route
end
def find(request, path, params = [])
- part = path.shift unless path.size.zero?
-
- if @exclusive_type
- path.unshift part
- [@lookup[request.send(@exclusive_type)], @lookup[nil]].each do |n|
- ret = n.find(request, path.dup, params.dup) if n
- ret and return ret
- end
- elsif path.size.zero? && !part
- if terminates?
- Response.new(terminates, params)
- elsif params.last.is_a?(Array) && @lookup[nil]
- if @lookup[nil].exclusive_type
- @lookup[nil].find(request, path, params)
- else
- Response.new(@lookup[nil].terminates, params)
+ if exclusive_type
+ [lookup[request.send(exclusive_type)], lookup[nil]].each do |n|
+ if n && (ret = n.find(request, path.dup, params.dup))
+ return ret
end
end
- elsif next_part = @lookup[part]
- if next_part.value.is_a?(Route::Variable)
+ elsif path.size.zero? && terminates?
+ Response.new(terminates, params)
+ elsif next_part = lookup[part = path.shift] || lookup[nil]
+ case next_part.value
+ when Route::Variable
case next_part.value.type
when :*
params << [next_part.value.name, []] unless params.last && params.last.first == next_part.value.name
loop do
- if (next_part.value.look_ahead === part || (!part.is_a?(Symbol) && !next_part.value.regex_matcher.match(part)))
+ if (next_part.value.look_ahead === part || (!part.is_a?(Symbol) && next_part.value.regex_matcher && !next_part.value.regex_matcher.match(part)))
path.unshift(part)
path.unshift(next_part.parent.value) if next_part.parent.value.is_a?(Symbol)
break
else
unless part.is_a?(Symbol) && !next_part.value.globs_capture_separators
- part = next_part.value.transform!(part)
next_part.value.valid!(part)
params.last.last << part
end
end
if path.size.zero?
break
else
part = path.shift
end
end
- next_part.find(request, path, params)
when :':'
- part = next_part.value.transform!(part)
next_part.value.valid!(part)
var = next_part.value
params << [next_part.value.name, part]
until (path.first == var.look_ahead) || path.empty?
params.last.last << path.shift.to_s
end
- next_part.find(request, path, params)
end
- else
- next_part.find(request, path, params)
end
- elsif next_part = @lookup[nil]
- if next_part.value.is_a?(Route::Variable)
- case next_part.value.type
- when :*
- params << [next_part.value.name, []] unless params.last && params.last.first == next_part.value.name
- if next_part.value.look_ahead === part
- path.unshift(part)
- path.unshift(next_part.parent.value) if next_part.parent.value.is_a?(Symbol)
- next_part.find(request, path, params)
- else
- unless part.is_a?(Symbol) && !next_part.value.globs_capture_separators
- part = next_part.value.transform!(part)
- next_part.value.valid!(part)
- params.last.last << part
- end
- find(request, path, params)
- end
- when :':'
- part = next_part.value.transform!(part)
- next_part.value.valid!(part)
- var = next_part.value
- params << [next_part.value.name, part]
- until (path.first == var.look_ahead) || path.empty?
- params.last.last << path.shift.to_s
- end
- next_part.find(request, path, params)
- end
- end
+ next_part.find(request, path, params)
else
nil
end
end