class Hanami::Assets::Compressors::Abstract

Abstract base class for compressors.

Don't use this class directly, but please use subclasses instead.

@since 0.1.0 @api private

Attributes

compressor[R]

@since 0.1.0 @api private

Private Class Methods

for(engine_name) click to toggle source

Factory for compressors.

It loads a compressor for the given name.

@abstract Please use this method from the subclasses

@param engine_name [Symbol,String,NilClass,#compress] the name of the

engine to load or an instance of an engine

@return [Hanami::Assets::Compressors::Abstract] returns a concrete

implementation of a compressor

@raise [Hanami::Assets::Compressors::UnknownCompressorError] when the

given name refers to an unknown compressor engine

@since 0.1.0 @api private

# File lib/hanami/assets/compressors/abstract.rb, line 82
def self.for(engine_name)
  case engine_name
  when Symbol, String
    load_engine(name, engine_name)
  when nil
    require 'hanami/assets/compressors/null_compressor'
    NullCompressor.new
  else
    engine_name
  end
end
load_engine(type, engine_name) click to toggle source

Load the compressor for the given type and engine name.

@param type [String] asset type (eg. “Javascript” or “Stylesheet”) @param engine_name [Symbol,String] the name of the engine to load (eg. `:yui`)

@return [Hanami::Assets::Compress::Abstract] returns a concrete

implementation of a compressor

@since 0.1.0 @api private

# File lib/hanami/assets/compressors/abstract.rb, line 104
def self.load_engine(type, engine_name)
  type = Utils::String.demodulize(type)

  require "hanami/assets/compressors/#{ engine_name }_#{ Utils::String.underscore(type) }"
  Utils::Class.load!("#{ Utils::String.classify(engine_name) }#{ type }", Hanami::Assets::Compressors).new
rescue LoadError
  raise UnknownCompressorError.new(type, engine_name)
end

Public Instance Methods

compress(filename) click to toggle source

Compress the given asset

@param filename [String, Pathname] the absolute path to the asset

@return [String] the compressed asset

@since 0.1.0 @api private

# File lib/hanami/assets/compressors/abstract.rb, line 40
def compress(filename)
  compressor.compress(
    read(filename)
  )
end

Protected Instance Methods

read(filename) click to toggle source

Read the contents of given filename

@param filename [String, Pathname] the absolute path to the asset

@return [String] the contents of asset

@since 0.1.0 @api private

# File lib/hanami/assets/compressors/abstract.rb, line 59
def read(filename)
  ::File.read(filename)
end