File: //usr/local/rvm/gems/default/gems/sprockets-4.0.2/lib/sprockets/dependencies.rb
# frozen_string_literal: true
require 'sprockets/digest_utils'
require 'sprockets/path_digest_utils'
require 'sprockets/uri_utils'
module Sprockets
# `Dependencies` is an internal mixin whose public methods are exposed on the
# `Environment` and `CachedEnvironment` classes.
module Dependencies
include DigestUtils, PathDigestUtils, URIUtils
# Public: Mapping dependency schemes to resolver functions.
#
# key - String scheme
# value - Proc.call(Environment, String)
#
# Returns Hash.
def dependency_resolvers
config[:dependency_resolvers]
end
# Public: Default set of dependency URIs for assets.
#
# Returns Set of String URIs.
def dependencies
config[:dependencies]
end
# Public: Register new dependency URI resolver.
#
# scheme - String scheme
# block -
# environment - Environment
# uri - String dependency URI
#
# Returns nothing.
def register_dependency_resolver(scheme, &block)
self.config = hash_reassoc(config, :dependency_resolvers) do |hash|
hash.merge(scheme => block)
end
end
# Public: Add environmental dependency inheirted by all assets.
#
# uri - String dependency URI
#
# Returns nothing.
def add_dependency(uri)
self.config = hash_reassoc(config, :dependencies) do |set|
set + Set.new([uri])
end
end
alias_method :depend_on, :add_dependency
# Internal: Resolve dependency URIs.
#
# Returns resolved Object.
def resolve_dependency(str)
# Optimize for the most common scheme to
# save 22k allocations on an average Spree app.
scheme = if str.start_with?('file-digest:'.freeze)
'file-digest'.freeze
else
str[/([^:]+)/, 1]
end
if resolver = config[:dependency_resolvers][scheme]
resolver.call(self, str)
else
nil
end
end
end
end