lib/usher/util/generate.rb in usher-0.5.10 vs lib/usher/util/generate.rb in usher-0.5.11
- old
+ new
@@ -57,21 +57,21 @@
# set.generator.generate(route.primary_path, {:controller => 'c', :action => 'a'}) == '/c/a' => true
def generate(routing_lookup, params = nil)
generate_path(path_for_routing_lookup(routing_lookup, params), params)
end
- def generate_path(path, params = nil)
+ def generate_path(path, params = nil, generate_extra = true)
params = Array(params) if params.is_a?(String)
if params.is_a?(Array)
given_size = params.size
extra_params = params.last.is_a?(Hash) ? params.pop : nil
params = Hash[*path.dynamic_parts.inject([]){|a, dynamic_part| a.concat([dynamic_part.name, params.shift || raise(MissingParameterException.new("got #{given_size}, expected #{path.dynamic_parts.size} parameters"))]); a}]
params.merge!(extra_params) if extra_params
end
result = Rack::Utils.uri_escape(generate_path_for_base_params(path, params))
- unless params.nil? || params.empty?
+ unless !generate_extra || params.nil? || params.empty?
extra_params = generate_extra_params(params, result[??])
result << extra_params
end
result
end
@@ -112,9 +112,19 @@
def #{name}_path(name, params = nil)
@@generator.generate(name, options)
end
END_EVAL
end
+ end
+ end
+
+ def generate_base_url(params = nil)
+ if usher.parent_route
+ usher.parent_route.router.generator.generate_path(usher.parent_route.paths.first, params, false)
+ elsif params && params.key?(:default)
+ params[:default].to_s
+ else
+ '/'
end
end
def generate_start(path, request)
result = (path.route.generate_with && path.route.generate_with.scheme || request.scheme).dup