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