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

"*.*.*"
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



117
118
119
120
# File 'lib/hanami/assets/compiler.rb', line 117

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



102
103
104
# File 'lib/hanami/assets/compiler.rb', line 102

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



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

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



92
93
94
# File 'lib/hanami/assets/compiler.rb', line 92

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



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

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



55
56
57
58
# File 'lib/hanami/assets/compiler.rb', line 55

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



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

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

  if compile?
    compile!
  else
    copy!
  end

  cache!
end