class Hanami::Assets::Bundler
Bundle assets from a single application.
@since 0.1.0 @api private
Bundle assets from a single application.
@since 0.1.0 @api private
Constants
- DEFAULT_PERMISSIONS
@since 0.1.0 @api private
- URL_REPLACEMENT
@since 0.1.0 @api private
- URL_SEPARATOR
@since 0.1.0 @api private
Public Class Methods
Return a new instance
@param configuration [Hanami::Assets::Configuration] a single application configuration
@param duplicates [Array<Hanami::Assets>] the duplicated frameworks
(one for each application)
@return [Hanami::Assets::Bundler] a new instance
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 40 def initialize(configuration, duplicates) @manifest = Hash[] @configuration = configuration @duplicates = duplicates end
Public Instance Methods
Start the process.
For each asset contained in the sources and third party gems, it will:
* Compress * Create a fingerprinted version of the file * Generate a subresource integrity digest
At the end it will generate a manifest
@see Hanami::Assets::Configuration#fingerprint
@see Hanami::Assets::Configuration#manifest
@see Hanami::Assets::Configuration#manifest_path
# File lib/hanami/assets/bundler.rb, line 59 def run assets.each do |path| unless File.directory?(path) configuration = _configuration_for(path) process(Asset.new(path, configuration)) end end write_manifest_file end
Private Instance Methods
@since 0.3.0 @api private
# File lib/hanami/assets/bundler.rb, line 130 def _configuration_for(asset) url = _convert_to_url(asset) configurations.find { |config| url.start_with?(config.prefix) } || @configuration end
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 108 def _convert_to_url(path) path.sub(public_directory.to_s, URL_REPLACEMENT) .gsub(File::SEPARATOR, URL_SEPARATOR) end
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 124 def _set_permissions(path) ::File.chmod(DEFAULT_PERMISSIONS, path) end
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 115 def _write(path, content) Pathname.new(path).dirname.mkpath ::File.write(path, content) _set_permissions(path) end
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 102 def assets Dir.glob("#{@configuration.destination_directory}#{::File::SEPARATOR}**#{::File::SEPARATOR}*") end
@since 0.3.0 @api private
# File lib/hanami/assets/bundler.rb, line 89 def compress_in_place!(asset) compressed = Compressor.new(asset.path, asset.configuration).compress _write(asset.path, compressed) unless compressed.nil? end
@since 0.4.0 @api private
# File lib/hanami/assets/bundler.rb, line 145 def configurations if @duplicates.empty? [@configuration] else @duplicates.map { |dup| dup.respond_to?(:configuration) ? dup.configuration : dup } end end
@since 0.3.0 @api private
# File lib/hanami/assets/bundler.rb, line 82 def copy_to_fingerprinted_location!(asset) FileUtils.cp(asset.path, asset.fingerprinted_target) _set_permissions(asset.fingerprinted_target) end
@since 0.3.0 @api private
# File lib/hanami/assets/bundler.rb, line 74 def process(asset) compress_in_place!(asset) copy_to_fingerprinted_location!(asset) @manifest.merge!(ManifestEntry.new(asset).entry) end
@since 0.1.0 @api private
# File lib/hanami/assets/bundler.rb, line 139 def public_directory @configuration.public_directory end
@since 0.3.0 @api private
# File lib/hanami/assets/bundler.rb, line 96 def write_manifest_file _write(@configuration.manifest_path, JSON.dump(@manifest)) end