class Propshaft::Compiler::JsAssetUrls
Constants
- ASSET_URL_PATTERN
Public Instance Methods
compile(asset, input)
click to toggle source
# File lib/propshaft/compiler/js_asset_urls.rb, line 8 def compile(asset, input) input.gsub(ASSET_URL_PATTERN) { asset_url(resolve_path(asset.logical_path.dirname, $1), asset.logical_path, $2, $1) } end
referenced_by(asset, references: Set.new)
click to toggle source
# File lib/propshaft/compiler/js_asset_urls.rb, line 12 def referenced_by(asset, references: Set.new) asset.content.scan(ASSET_URL_PATTERN).each do |referenced_asset_url, _| referenced_asset = load_path.find(resolve_path(asset.logical_path.dirname, referenced_asset_url)) if referenced_asset && references.exclude?(referenced_asset) references << referenced_asset references.merge referenced_by(referenced_asset, references: references) end end references end
Private Instance Methods
asset_url(resolved_path, logical_path, fingerprint, pattern)
click to toggle source
# File lib/propshaft/compiler/js_asset_urls.rb, line 36 def asset_url(resolved_path, logical_path, fingerprint, pattern) asset = load_path.find(resolved_path) if asset %["#{url_prefix}/#{asset.digested_path}#{fingerprint}"] else Propshaft.logger.warn("Unable to resolve '#{pattern}' for missing asset '#{resolved_path}' in #{logical_path}") %["#{pattern}"] end end
resolve_path(directory, filename)
click to toggle source
# File lib/propshaft/compiler/js_asset_urls.rb, line 26 def resolve_path(directory, filename) if filename.start_with?("../") Pathname.new(directory + filename).relative_path_from("").to_s elsif filename.start_with?("/") filename.delete_prefix("/").to_s else (directory + filename.delete_prefix("./")).to_s end end