Module: Sprockets::URIUtils
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Included In:
| |
Defined in: | lib/sprockets/uri_utils.rb |
Overview
Internal: Asset
URI related parsing utilities. Mixed into Environment
.
An Asset URI identifies the compiled Asset
result. It shares the file: scheme and requires an absolute path.
Other query parameters
type - String output content type. Otherwise assumed from file extension.
This maybe different than the extension if the asset is transformed
from one content type to another. For an example .coffee -> .js.
id - Unique fingerprint of the entire asset and all its metadata. Assets
will only have the same id if they serialize to an identical value.
pipeline - String name of pipeline.
Instance Method Summary
-
#build_asset_uri(path, params = {})
Internal: Build Asset URI.
-
#build_file_digest_uri(path)
Internal: Build file-digest dependency URI.
-
#encode_uri_query_params(params)
Internal: Serialize hash of params into query string.
-
#join_file_uri(scheme, host, path, query)
Internal: Join file: URI component parts into String.
-
#join_uri(scheme, userinfo, host, port, registry, path, opaque, query, fragment)
Internal: Join URI component parts into String.
-
#parse_asset_uri(uri)
Internal: Parse Asset URI.
-
#parse_file_digest_uri(uri)
Internal: Parse file-digest dependency URI.
-
#parse_uri_query_params(query)
Internal: Parse query string into hash of params.
-
#split_file_uri(uri)
Internal: Parse file: URI into component parts.
-
#split_uri(uri)
Internal: Parse URI into component parts.
-
#valid_asset_uri?(str) ⇒ Boolean
Internal: Check if String is a valid
Asset
URI.
Instance Method Details
#build_asset_uri(path, params = {})
Internal: Build Asset URI.
Examples
build("/tmp/js/application.coffee", type: "application/javascript")
# => "file:///tmp/js/application.coffee?type=application/javascript"
path - String file path params - Hash of optional parameters
Returns String URI.
# File 'lib/sprockets/uri_utils.rb', line 114
def build_asset_uri(path, params = {}) join_file_uri("file", nil, path, encode_uri_query_params(params)) end
#build_file_digest_uri(path)
Internal: Build file-digest dependency URI.
Examples
build("/tmp/js/application.js")
# => "file-digest:/tmp/js/application.js"
path - String file path
Returns String URI.
# File 'lib/sprockets/uri_utils.rb', line 148
def build_file_digest_uri(path) join_file_uri('file-digest'.freeze, nil, path, nil) end
#encode_uri_query_params(params)
Internal: Serialize hash of params into query string.
params - Hash of params to serialize
Returns String query or nil if empty.
# File 'lib/sprockets/uri_utils.rb', line 157
def encode_uri_query_params(params) query = [] params.each do |key, value| case value when Integer query << "#{key}=#{value}" when String, Symbol query << "#{key}=#{URI::Generic::DEFAULT_PARSER.escape(value.to_s)}" when TrueClass query << "#{key}" when FalseClass, NilClass else raise TypeError, "unexpected type: #{value.class}" end end "#{query.join('&'.freeze)}" if query.any? end
#join_file_uri(scheme, host, path, query)
Internal: Join file: URI component parts into String.
Returns String.
# File 'lib/sprockets/uri_utils.rb', line 62
def join_file_uri(scheme, host, path, query) str = +"#{scheme}://" str << host if host path = "/#{path}" unless path.start_with?("/".freeze) str << URI::Generic::DEFAULT_PARSER.escape(path) str << "?#{query}" if query str end
#join_uri(scheme, userinfo, host, port, registry, path, opaque, query, fragment)
Internal: Join URI component parts into String.
Returns String.
# File 'lib/sprockets/uri_utils.rb', line 36
def join_uri(scheme, userinfo, host, port, registry, path, opaque, query, fragment) URI::Generic.new(scheme, userinfo, host, port, registry, path, opaque, query, fragment).to_s end
#parse_asset_uri(uri)
Internal: Parse Asset URI.
Examples
parse("file:///tmp/js/application.coffee?type=application/javascript")
# => "/tmp/js/application.coffee", {type: "application/javascript"}
uri - String asset URI
Returns String path and Hash of symbolized parameters.
# File 'lib/sprockets/uri_utils.rb', line 93
def parse_asset_uri(uri) scheme, _, path, query = split_file_uri(uri) unless scheme == 'file' raise URI::InvalidURIError, "expected file:// scheme: #{uri}" end return path, parse_uri_query_params(query) end
#parse_file_digest_uri(uri)
Internal: Parse file-digest dependency URI.
Examples
parse("file-digest:/tmp/js/application.js")
# => "/tmp/js/application.js"
uri - String file-digest URI
Returns String path.
# File 'lib/sprockets/uri_utils.rb', line 128
def parse_file_digest_uri(uri) scheme, _, path, _ = split_file_uri(uri) unless scheme == 'file-digest'.freeze raise URI::InvalidURIError, "expected file-digest scheme: #{uri}" end path end
#parse_uri_query_params(query)
Internal: Parse query string into hash of params
query - String query string
Return Hash of params.
# File 'lib/sprockets/uri_utils.rb', line 182
def parse_uri_query_params(query) query.to_s.split('&'.freeze).reduce({}) do |h, p| k, v = p.split('='.freeze, 2) v = URI::Generic::DEFAULT_PARSER.unescape(v) if v h[k.to_sym] = v || true h end end
#split_file_uri(uri)
Internal: Parse file: URI into component parts.
uri - String uri
Returns [scheme, host, path, query].
# File 'lib/sprockets/uri_utils.rb', line 45
def split_file_uri(uri) scheme, _, host, _, _, path, _, query, _ = URI.split(uri) path = URI::Generic::DEFAULT_PARSER.unescape(path) path.force_encoding(Encoding::UTF_8) # Hack for parsing Windows "/C:/Users/IEUser" paths if File::ALT_SEPARATOR && path[2] == ':' path = path[1..-1] end [scheme, host || '', path, query] end
#split_uri(uri)
Internal: Parse URI into component parts.
uri - String uri
Returns Array of components.
# File 'lib/sprockets/uri_utils.rb', line 29
def split_uri(uri) URI.split(uri) end
#valid_asset_uri?(str) ⇒ Boolean
Internal: Check if String is a valid Asset
URI.
str - Possible String asset URI.
Returns true or false.
# File 'lib/sprockets/uri_utils.rb', line 76
def valid_asset_uri?(str) # Quick prefix check before attempting a full parse str.start_with?("file://".freeze) && parse_asset_uri(str) ? true : false rescue URI::InvalidURIError false end