def url(env = {}, opts = {})
unless env.key?('rack.version')
opts = env
env = nil
end
@callbacks.each{|blk| blk.call(env,opts)} if env
requirements_met = (local_required_variables - (opts.keys + options.keys)).empty?
if !required_to_generate? && !requirements_met
nil
else
raise Ungeneratable, "Missing required variables" if !requirements_met
path = local_segments.inject([]){|url, segment| str = segment.to_s(opts); url << str if str; url}.join
match = /(.*?)\/?$/.match(path)
result = match[1]
path = url_mount.nil? ? result : File.join(url_mount.to_s(opts), result)
_host = opts.delete(:host) || host
_scheme = opts.delete(:scheme) || scheme
if _host || _scheme
_scheme ||= "http"
raise Ungeneratable, "Missing host when generating absolute url" if _scheme && !_host
uri = URI.parse(path)
uri.host = _host
uri.scheme = _scheme || "http"
uri.to_s
else
path
end
end
end