def compute_asset_host(source = "", options = {})
request = self.request if respond_to?(:request)
if defined? config
host = config.asset_host
elsif defined? ActionController::Base.asset_host
host = ActionController::Base.asset_host
end
host ||= request.base_url if request && options[:protocol] == :request
return unless host
if host.respond_to?(:call)
arity = host.respond_to?(:arity) ? host.arity : host.method(:call).arity
args = [source]
args << request if request && (arity > 1 || arity < 0)
host = host.call(*args)
elsif host =~ /%d/
host = host % (Zlib.crc32(source) % 4)
end
if host =~ URI_REGEXP
host
else
protocol = options[:protocol] || (request ? :request : :relative)
case protocol
when :relative
"//#{host}"
when :request
"#{request.protocol}#{host}"
else
"#{protocol}://#{host}"
end
end
end