def generate(params = {}, fallback = {})
raise "Cannot generate regexp Routes" if regexp?
query_params = params.dup if params.is_a? Hash
url = @segments.map do |segment|
value =
if segment.is_a? Symbol
if params.is_a? Hash
params[segment] || fallback[segment]
query_params.delete segment
else
if segment == :id && params.respond_to?(:to_param)
params.to_param
elsif segment == :id && params.is_a?(Fixnum)
params
elsif params.respond_to?(segment)
params.send(segment)
else
fallback[segment]
end
end
elsif segment.respond_to? :to_s
segment
else
raise "Segment type '#{segment.class}' can't be converted to a string"
end
(value.respond_to?(:to_param) ? value.to_param : value).to_s.unescape_regexp
end.join
if query_params && format = query_params.delete(:format)
format = fallback[:format] if format == :current
url += ".#{format}"
end
if query_params && !query_params.empty?
url += "?" + Merb::Request.params_to_query_string(query_params)
end
url
end