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