Class: Hanami::Assets::Compiler Private

Inherits:
Object
  • Object
show all
Includes:
Utils::ClassAttribute
Defined in:
lib/hanami/assets/compiler.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Assets compiler

It compiles assets that needs to be preprocessed (eg. Sass or ES6) into the destination directory.

Vanilla javascripts or stylesheets are just copied over.

Since:

  • 0.1.0

Constant Summary collapse

DEFAULT_PERMISSIONS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0

0o644
COMPILE_PATTERN =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0

'*.*.*'.freeze
EXTENSIONS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0

{ '.js' => true, '.css' => true, '.map' => true }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration, name) ⇒ Hanami::Assets::Compiler

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return a new instance

Parameters:

  • configuration (Hanami::Assets::Configuration)

    the application configuration associated with the given asset

  • name (String)

    the asset path

Since:

  • 0.1.0



115
116
117
118
# File 'lib/hanami/assets/compiler.rb', line 115

def initialize(configuration, name)
  @configuration = configuration
  @name          = Pathname.new(name)
end

Class Method Details

.cacheObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Assets cache

See Also:

Since:

  • 0.1.0



100
101
102
# File 'lib/hanami/assets/compiler.rb', line 100

def self.cache
  @@cache ||= Assets::Cache.new # rubocop:disable Style/ClassVars
end

.compile(configuration, name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Compile the given asset

Parameters:

  • configuration (Hanami::Assets::Configuration)

    the application configuration associated with the given asset

  • name (String)

    the asset path

Since:

  • 0.1.0



67
68
69
70
71
72
73
74
75
# File 'lib/hanami/assets/compiler.rb', line 67

def self.compile(configuration, name)
  return unless configuration.compile

  require 'tilt'
  require 'hanami/assets/cache'
  require 'hanami/assets/compilers/sass'
  require 'hanami/assets/compilers/less'
  fabricate(configuration, name).compile
end

.eligible?(_name) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)

Since:

  • 0.3.0



90
91
92
# File 'lib/hanami/assets/compiler.rb', line 90

def self.eligible?(_name)
  true
end

.fabricate(configuration, name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.3.0



79
80
81
82
83
84
85
86
# File 'lib/hanami/assets/compiler.rb', line 79

def self.fabricate(configuration, name)
  source = configuration.source(name)
  engine = (subclasses + [self]).find do |klass|
    klass.eligible?(source)
  end

  engine.new(configuration, name)
end

.inherited(subclass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.3.0



53
54
55
56
# File 'lib/hanami/assets/compiler.rb', line 53

def self.inherited(subclass)
  super
  subclasses.add(subclass)
end

Instance Method Details

#compileObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Compile the asset

Raises:

Since:

  • 0.1.0



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/hanami/assets/compiler.rb', line 127

def compile
  raise MissingAsset.new(@name, @configuration.sources) unless exist?
  return unless modified?

  if compile?
    compile!
  else
    copy!
  end

  cache!
end