class Hanami::Assets::Precompiler

Precompile all the assets, coming from all the applications and third party gems into the public directory of the project.

@since 0.1.0 @api private

Public Class Methods

new(configuration, duplicates) click to toggle source

Return a new instance

@param configuration [Hanami::Assets::Configuration] the MAIN

configuration of Hanami::Assets

@param duplicates [Array<Hanami::Assets>] the duplicated frameworks

(one for each application)

@return [Hanami::Assets::Precompiler] a new instance

@since 0.1.0 @api private

# File lib/hanami/assets/precompiler.rb, line 26
def initialize(configuration, duplicates)
  @configuration = configuration
  @duplicates    = duplicates
end

Public Instance Methods

run() click to toggle source

Start the process

@since 0.1.0 @api private

# File lib/hanami/assets/precompiler.rb, line 35
def run
  clear_assets_directory
  precompile
end

Private Instance Methods

applications() click to toggle source

@since 0.1.0 @api private

# File lib/hanami/assets/precompiler.rb, line 82
def applications
  if @duplicates.empty?
    [@configuration]
  else
    @duplicates
  end
end
clear_assets_directory() click to toggle source

@since 0.3.0 @api private

# File lib/hanami/assets/precompiler.rb, line 44
def clear_assets_directory
  delete @configuration.manifest_path
  delete @configuration.destination_directory
end
clear_manifest(manifest) click to toggle source

@since 0.3.0 @api private

# File lib/hanami/assets/precompiler.rb, line 51
def clear_manifest(manifest)
  JSON.parse(manifest).each_value do |asset_hash|
    asset_file_name = @configuration.public_directory.join(asset_hash["target"])
    asset_file_name.unlink if asset_file_name.exist?
  end
rescue JSON::ParserError
  warn "Non JSON manifest found and unlinked."
ensure
  manifest.unlink
end
delete(path) click to toggle source

@since 0.3.0 @api private

# File lib/hanami/assets/precompiler.rb, line 92
def delete(path)
  FileUtils.rm_rf(path) if path.exist?
end
precompile() click to toggle source

@since 0.1.0 @api private

# File lib/hanami/assets/precompiler.rb, line 64
def precompile
  applications.each do |duplicate|
    config = if duplicate.respond_to?(:configuration)
               duplicate.configuration
             else
               duplicate
             end

    config.compile true

    config.files.each do |file|
      Compiler.compile(config, file)
    end
  end
end