correct naming
This commit is contained in:
parent
941f0f565b
commit
a470c30a39
|
@ -10,7 +10,7 @@ u.add('/simple')
|
|||
u.add('/simple/:variable') .name(:one_variable).to{}
|
||||
u.add('/simple/:var1/:var2/:var3') .name(:three_variables).to{}
|
||||
u.add('/simple/:v1/:v2/:v3/:v4/:v5/:v6/:v7/:v8') .name(:eight_variables).to{}
|
||||
u.add('/with_condition/:cond1/:cond2').matching(:cond1 => /^\d+$/, :cond2 => /^[a-z]+$/) .name(:two_conditions).to{}
|
||||
u.add('/with_condition/:cond1/:cond2').matches_with(:cond1 => /^\d+$/, :cond2 => /^[a-z]+$/) .name(:two_conditions).to{}
|
||||
|
||||
TIMES = 50_000
|
||||
|
||||
|
|
|
@ -162,6 +162,12 @@ class HttpRouter
|
|||
end
|
||||
alias_method :compiling_url, :url
|
||||
|
||||
def url_ns(route, *args)
|
||||
compile
|
||||
url_ns(route, *args)
|
||||
end
|
||||
alias_method :compiling_url_ns, :url_ns
|
||||
|
||||
def path(route, *args)
|
||||
compile
|
||||
path(route, *args)
|
||||
|
@ -239,17 +245,19 @@ class HttpRouter
|
|||
routes.sort!{|r1, r2| r2.max_param_count <=> r1.max_param_count }
|
||||
end
|
||||
|
||||
instance_eval "undef :path; alias :path :raw_path;
|
||||
undef :url; alias :url :raw_url;
|
||||
undef :call; alias :call :raw_call", __FILE__, __LINE__
|
||||
instance_eval "undef :path; alias :path :raw_path;
|
||||
undef :url; alias :url :raw_url;
|
||||
undef :url_ns; alias :url_ns :raw_url_ns;
|
||||
undef :call; alias :call :raw_call", __FILE__, __LINE__
|
||||
@compiled = true
|
||||
end
|
||||
|
||||
def uncompile
|
||||
return unless @compiled
|
||||
instance_eval "undef :path; alias :path :compiling_path;
|
||||
undef :url; alias :url :compiling_url;
|
||||
undef :call; alias :call :compiling_call", __FILE__, __LINE__
|
||||
instance_eval "undef :path; alias :path :compiling_path;
|
||||
undef :url; alias :url :compiling_url;
|
||||
undef :url_ns; alias :url_ns :compiling_url_ns;
|
||||
undef :call; alias :call :compiling_call", __FILE__, __LINE__
|
||||
@root.uncompile
|
||||
@compiled = false
|
||||
end
|
||||
|
@ -259,7 +267,15 @@ class HttpRouter
|
|||
when Symbol then @named_routes.key?(route) && @named_routes[route].each{|r| url = r.url(*args); return url if url}
|
||||
when Route then return route.url(*args)
|
||||
end
|
||||
raise(InvalidRouteException)
|
||||
raise(InvalidRouteException.new "No route (url) could be generated for #{route.inspect}")
|
||||
end
|
||||
|
||||
def raw_url_ns(route, *args)
|
||||
case route
|
||||
when Symbol then @named_routes.key?(route) && @named_routes[route].each{|r| url = r.url_ns(*args); return url if url}
|
||||
when Route then return route.url_ns(*args)
|
||||
end
|
||||
raise(InvalidRouteException.new "No route (url_ns) could be generated for #{route.inspect}")
|
||||
end
|
||||
|
||||
def raw_path(route, *args)
|
||||
|
@ -267,7 +283,7 @@ class HttpRouter
|
|||
when Symbol then @named_routes.key?(route) && @named_routes[route].each{|r| path = r.path(*args); return path if path}
|
||||
when Route then return route.path(*args)
|
||||
end
|
||||
raise(InvalidRouteException)
|
||||
raise(InvalidRouteException.new "No route (path) could be generated for #{route.inspect}")
|
||||
end
|
||||
|
||||
def raw_call(env, perform_call = true)
|
||||
|
|
|
@ -7,7 +7,6 @@ class HttpRouter
|
|||
def initialize(route, path, validation_regex = nil)
|
||||
@route = route
|
||||
@path = path.dup
|
||||
puts "path is a string? #{@path.is_a?(String)}"
|
||||
@param_names = if @path.respond_to?(:names)
|
||||
@path.names.map(&:to_sym)
|
||||
elsif path.is_a?(String)
|
||||
|
@ -15,7 +14,6 @@ class HttpRouter
|
|||
else
|
||||
[]
|
||||
end
|
||||
puts "path #{@path.inspect} #{@param_names.inspect}"
|
||||
|
||||
if path.is_a?(String)
|
||||
path[0, 0] = '/' unless path[0] == ?/
|
||||
|
@ -43,20 +41,14 @@ class HttpRouter
|
|||
if validation_regex
|
||||
instance_eval <<-EOT, __FILE__, __LINE__ + 1
|
||||
def generate(args, options)
|
||||
puts 'generating!'
|
||||
puts "args: \#{args.inspect}"
|
||||
puts "options: \#{options.inspect}"
|
||||
generated_path = \"#{code}\"
|
||||
puts "after .. args: \#{args.inspect}"
|
||||
puts "generated path \#{generated_path.inspect}"
|
||||
p #{validation_regex.inspect}.match(generated_path)
|
||||
#{validation_regex.inspect}.match(generated_path) ? generated_path : nil
|
||||
#{validation_regex.inspect}.match(generated_path) ? URI.escape(generated_path) : nil
|
||||
end
|
||||
EOT
|
||||
else
|
||||
instance_eval <<-EOT, __FILE__, __LINE__ + 1
|
||||
def generate(args, options)
|
||||
\"#{code}\"
|
||||
URI.escape(\"#{code}\")
|
||||
end
|
||||
EOT
|
||||
end
|
||||
|
@ -72,6 +64,9 @@ class HttpRouter
|
|||
@path_generators = @paths.map do |p|
|
||||
generator = PathGenerator.new(route, p.is_a?(String) ? p : route.path_for_generation, p.is_a?(Regexp) ? p : nil)
|
||||
end
|
||||
@path_generators.sort! do |p1, p2|
|
||||
p2.param_names.size <=> p1.param_names.size
|
||||
end
|
||||
end
|
||||
|
||||
def max_param_count
|
||||
|
@ -82,11 +77,11 @@ class HttpRouter
|
|||
@path_generators.each {|p| yield p.path, p.param_names}
|
||||
end
|
||||
|
||||
def full_url(*args)
|
||||
"#{scheme_port.first}#{url(*args)}"
|
||||
def url(*args)
|
||||
"#{scheme_port.first}#{url_ns(*args)}"
|
||||
end
|
||||
|
||||
def url(*args)
|
||||
def url_ns(*args)
|
||||
"://#{@route.host || @router.default_host}#{scheme_port.last}#{path(*args)}"
|
||||
end
|
||||
|
||||
|
@ -109,7 +104,6 @@ class HttpRouter
|
|||
path_args_processing(a) do |args, options|
|
||||
path = args.empty? ? matching_path(options) : matching_path(args, options)
|
||||
path &&= path.generate(args, options)
|
||||
puts "path is #{path.inspect}"
|
||||
raise TooManyParametersException unless args.empty?
|
||||
raise InvalidRouteException.new("Error generating #{@route.path_for_generation}") unless path
|
||||
path ? [path, options] : nil
|
||||
|
@ -129,12 +123,15 @@ class HttpRouter
|
|||
return @path_generators.first if @path_generators.size == 1
|
||||
case params
|
||||
when Array, nil
|
||||
significant_keys = other_hash && param_names & other_hash.keys
|
||||
@path_generators.find { |path|
|
||||
params_size = params ? params.size : 0
|
||||
path.param_names.size == (significant_keys ? (params_size) + significant_keys.size : params_size) }
|
||||
@path_generators.find do |path|
|
||||
significant_key_count = params ? params.size : 0
|
||||
significant_key_count += (path.param_names & other_hash.keys).size if other_hash
|
||||
significant_key_count >= path.param_names.size
|
||||
end
|
||||
# params_size = params ? params.size : 0
|
||||
# path.param_names.size == (significant_keys ? (params_size) + significant_keys.size : params_size) }
|
||||
when Hash
|
||||
@path_generators.find { |path| p path.param_names; (params && !params.empty? && (path.param_names & params.keys).size == path.param_names.size) || path.param_names.empty? }
|
||||
@path_generators.find { |path| (params && !params.empty? && (path.param_names & params.keys).size == path.param_names.size) || path.param_names.empty? }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -69,8 +69,8 @@ class HttpRouter
|
|||
nil
|
||||
end
|
||||
|
||||
def full_url(*args)
|
||||
@generator.full_url(*args)
|
||||
def url_ns(*args)
|
||||
@generator.url_ns(*args)
|
||||
rescue InvalidRouteException
|
||||
nil
|
||||
end
|
||||
|
|
|
@ -30,7 +30,12 @@ class HttpRouter
|
|||
end
|
||||
|
||||
def name(name = nil)
|
||||
name ? route.name = name : route.name
|
||||
if name
|
||||
route.name = name
|
||||
self
|
||||
else
|
||||
route.name
|
||||
end
|
||||
end
|
||||
|
||||
def process_opts(opts)
|
||||
|
@ -39,7 +44,6 @@ class HttpRouter
|
|||
opts.delete(:conditions)
|
||||
end
|
||||
opts.each do |k, v|
|
||||
puts "k #{k.inspect} with adding? #{@route.respond_to?(:"add_#{k}")}"
|
||||
if @route.respond_to?(:"#{k}=")
|
||||
@route.send(:"#{k}=", v)
|
||||
elsif @route.respond_to?(:"add_#{k}")
|
||||
|
|
|
@ -2,18 +2,22 @@ require 'json'
|
|||
require "#{File.dirname(__FILE__)}/generic"
|
||||
class GenerationTest < AbstractTest
|
||||
def run_tests
|
||||
@tests.map(&:case).each do |(expected_result, name, args)|
|
||||
args = [args] unless args.is_a?(Array)
|
||||
args.compact!
|
||||
args.map!{|a| a.is_a?(Hash) ? Hash[a.map{|k,v| [k.to_sym, v]}] : a }
|
||||
result = begin
|
||||
@router.path(name.to_sym, *args)
|
||||
rescue HttpRouter::InvalidRouteException
|
||||
nil
|
||||
rescue HttpRouter::MissingParameterException
|
||||
nil
|
||||
@tests.map(&:case).each do |(expected_result, name, oargs)|
|
||||
oargs = [oargs] unless oargs.is_a?(Array)
|
||||
oargs.compact!
|
||||
oargs.map!{|a| a.is_a?(Hash) ? Hash[a.map{|k,v| [k.to_sym, v]}] : a }
|
||||
[[:path, ''], [:url_ns, '://localhost'], [:url, 'http://localhost']].each do |(meth, prefix)|
|
||||
args = oargs.map{|o| o.dup rescue o}
|
||||
result = begin
|
||||
path = @router.send(meth, name.to_sym, *args.dup)
|
||||
path
|
||||
rescue HttpRouter::InvalidRouteException
|
||||
nil
|
||||
rescue HttpRouter::MissingParameterException
|
||||
nil
|
||||
end
|
||||
error("Result #{result.inspect} did not match expectation #{expected_result.inspect}") unless result == (expected_result ? prefix + expected_result : expected_result)
|
||||
end
|
||||
error("Result #{result.inspect} did not match expectation #{expected_result.inspect}") unless result == expected_result
|
||||
end
|
||||
print '.'
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue