hanami-assets 1.3.0 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 656523e5106429d46d4ef06f9e49a9d8b0c7c6e9a5887034137ee94959833827
4
- data.tar.gz: a9a823309ae222cf1fdaf789fd0619c51649abddd8cd11d8235516cd2a725edf
3
+ metadata.gz: 5176826ee1e6f1cdf7930ec50f52e9e2c3ddaad08c29081f50c3b523edf39910
4
+ data.tar.gz: 5cdb9005b3f3c818d0ede825faa6e022ea61bf0d11d5d48c290b96797f28b0e4
5
5
  SHA512:
6
- metadata.gz: ea5984af832c0541ad530607e548b77c35a265fcf30bb38f439424b17834766ec2ee14d1e04964f58a86332e42ee90a1e5a19f8be158e5f7cad81a831ca61e30
7
- data.tar.gz: 58d11b450a70857fe77fb6eb157eca3109fcd34ebda8bfa515bbe728248aa2a22935f0055c1df96345bd40f8c0b74f554957495b30af50be1e4d612f04aad779
6
+ metadata.gz: 249d3393b9b7936b601b680273da8f3ca07e5eca1dd684b0906d6132a476741a80729d7f0ac596de525b4e48a7a97cc5ca67bfc38806e9209ac1c6cf031d68c1
7
+ data.tar.gz: 66588d6713351e17e2777fcf08f2eb65aa06c9d67dc6329dcacd119dfa3d41c8a57b7fe0875863a9e2a1c4a792f0b4142f61c849ec26add1f6951250d6c3e685
@@ -1,6 +1,32 @@
1
1
  # Hanami::Assets
2
2
  Assets management for Ruby web applications
3
3
 
4
+ ## v1.3.5 - 2021-01-14
5
+ ### Added
6
+ - [Luca Guidi] Official support for Ruby: MRI 3.0
7
+ - [Luca Guidi] Official support for Ruby: MRI 2.7
8
+
9
+ ## v1.3.4 - 2019-10-11
10
+ ### Fixed
11
+ - [unleashy] Precompile assets using binary mode to ensure compatibility with Windows
12
+
13
+ ## v1.3.3 - 2019-09-13
14
+ ### Fixed
15
+ - [Landon Grindheim] Lazily load `sassc` only when required
16
+ - [Landon Grindheim] Ensure assets precompilation to not crash when SASS stylesheet doesn't have dependencies
17
+
18
+ ## v1.3.2 - 2019-08-02
19
+ ### Added
20
+ - [Landon Grindheim & Sean Collins] Added support for `sassc` gem, because `sass` is no longer maintained
21
+
22
+ ## v1.3.1 - 2019-01-18
23
+ ### Added
24
+ - [Luca Guidi] Official support for Ruby: MRI 2.6
25
+ - [Luca Guidi] Support `bundler` 2.0+
26
+
27
+ ### Fixed
28
+ - [Luca Guidi] Make optional nested assets feature to maintain backward compatibility with `1.2.x`
29
+
4
30
  ## v1.3.0 - 2018-10-24
5
31
 
6
32
  ## v1.3.0.beta1 - 2018-08-08
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2017 Luca Guidi
1
+ Copyright © 2014-2021 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -5,8 +5,7 @@ Assets management for Ruby web projects
5
5
  ## Status
6
6
 
7
7
  [![Gem Version](https://badge.fury.io/rb/hanami-assets.svg)](https://badge.fury.io/rb/hanami-assets)
8
- [![TravisCI](https://travis-ci.org/hanami/assets.svg?branch=master)](https://travis-ci.org/hanami/assets)
9
- [![CircleCI](https://circleci.com/gh/hanami/assets/tree/master.svg?style=svg)](https://circleci.com/gh/hanami/assets/tree/master)
8
+ [![CI](https://github.com/hanami/assets/workflows/ci/badge.svg?branch=master)](https://github.com/hanami/assets/actions?query=workflow%3Aci+branch%3Amaster)
10
9
  [![Test Coverage](https://codecov.io/gh/hanami/assets/branch/master/graph/badge.svg)](https://codecov.io/gh/hanami/assets)
11
10
  [![Depfu](https://badges.depfu.com/badges/4b37347bd74042ff96477495cc16531d/overview.svg)](https://depfu.com/github/hanami/assets?project=Bundler)
12
11
  [![Inline Docs](http://inch-ci.org/github/hanami/assets.svg)](http://inch-ci.org/github/hanami/assets)
@@ -15,7 +14,7 @@ Assets management for Ruby web projects
15
14
 
16
15
  * Home page: http://hanamirb.org
17
16
  * Community: http://hanamirb.org/community
18
- * Guides: http://hanamirb.org/guides
17
+ * Guides: https://guides.hanamirb.org
19
18
  * Mailing List: http://hanamirb.org/mailing-list
20
19
  * API Doc: http://rdoc.info/gems/hanami-assets
21
20
  * Bugs/Issues: https://github.com/hanami/assets/issues
@@ -200,7 +199,7 @@ handling: `.css` for stylesheets.
200
199
  The second one is optional and it's for a preprocessor: `.scss` for Sass.
201
200
 
202
201
  ```ruby
203
- require 'sass'
202
+ require 'sassc'
204
203
  require 'hanami/assets'
205
204
 
206
205
  Hanami::Assets.configure do
@@ -353,7 +352,7 @@ Hanami can use the following compressors (aka minifiers) for stylesheets.
353
352
 
354
353
  * `:builtin` - Ruby based compressor. It doesn't require any external gem. It's fast, but not an efficient compressor.
355
354
  * `:yui` - [YUI Compressor](http://yui.github.io/yuicompressor), it depends on [`yui-compressor`](https://rubygems.org/gems/yui-compressor) gem and it requires Java 1.4+
356
- * `:sass` - [Sass](http://sass-lang.com/), it depends on [`sass`](https://rubygems.org/gems/sass) gem
355
+ * `:sass` - [Sass](http://sass-lang.com/), it depends on [`sassc`](https://rubygems.org/gems/sassc) gem
357
356
 
358
357
  ```ruby
359
358
  Hanami::Assets.configure do
@@ -437,6 +436,28 @@ From now on, helpers will return the absolute URL for the asset, hosted on the C
437
436
  <script src="https://123.cloudfront.net/assets/application-d1829dc353b734e3adc24855693b70f9.js" type="text/javascript"></script>
438
437
  ```
439
438
 
439
+ ## Standalone mode
440
+
441
+ If you're using `hanami-assets` without `hanami`, you must explicitly boot the framework with:
442
+
443
+ ```ruby
444
+ Hanami::Assets.configure do
445
+ # ...
446
+ end.load!
447
+ ```
448
+
449
+ or
450
+
451
+ ```ruby
452
+ Hanami::Assets.configure do
453
+ # ...
454
+ end
455
+
456
+ # ...
457
+
458
+ Hanami::Assets.load!
459
+ ```
460
+
440
461
  ## Third party gems
441
462
 
442
463
  Developers can maintain gems that distribute assets for Hanami. For instance `hanami-ember` or `hanami-jquery`.
@@ -472,6 +493,6 @@ __Hanami::Assets__ uses [Semantic Versioning 2.0.0](http://semver.org)
472
493
 
473
494
  ## Copyright
474
495
 
475
- Copyright © 2014-2017 Luca Guidi – Released under MIT License
496
+ Copyright © 2014-2021 Luca Guidi – Released under MIT License
476
497
 
477
498
  This project was formerly known as Lotus (`lotus-assets`).
@@ -1,22 +1,23 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require 'optparse'
4
- require 'pathname'
4
+ require "optparse"
5
+ require "pathname"
5
6
 
6
7
  options = {}
7
8
  OptionParser.new do |opts|
8
- opts.banner = 'Usage: hanami-assets --config=path/to/config.rb'
9
+ opts.banner = "Usage: hanami-assets --config=path/to/config.rb"
9
10
 
10
- opts.on('-c', '--config FILE', 'Path to config') do |c|
11
+ opts.on("-c", "--config FILE", "Path to config") do |c|
11
12
  options[:config] = c
12
13
  end
13
14
  end.parse!
14
15
 
15
- config = options.fetch(:config) { raise ArgumentError.new('You must specify a configuration file') }
16
+ config = options.fetch(:config) { raise ArgumentError.new("You must specify a configuration file") }
16
17
  config = Pathname.new(config)
17
18
  config.exist? or raise ArgumentError.new("Cannot find configuration file: #{config}")
18
19
 
19
- require 'hanami/assets'
20
+ require "hanami/assets"
20
21
  load config
21
22
 
22
23
  Hanami::Assets.deploy
@@ -24,15 +24,17 @@ Gem::Specification.new do |spec|
24
24
  spec.add_runtime_dependency 'hanami-helpers', '~> 1.3'
25
25
  spec.add_runtime_dependency 'tilt', '~> 2.0', '>= 2.0.2'
26
26
 
27
- spec.add_development_dependency 'bundler'
27
+ spec.add_development_dependency 'bundler', '>= 1.6', '< 3'
28
28
  spec.add_development_dependency 'rake', '~> 12.0'
29
29
  spec.add_development_dependency 'rspec', '~> 3.7'
30
30
 
31
31
  spec.add_development_dependency 'yui-compressor', '~> 0.12'
32
32
  spec.add_development_dependency 'uglifier', '~> 2.7'
33
33
  spec.add_development_dependency 'closure-compiler', '~> 1.1'
34
- spec.add_development_dependency 'sass', '~> 3.4'
34
+ spec.add_development_dependency 'sassc', '~> 2.0'
35
35
 
36
36
  spec.add_development_dependency 'coffee-script', '~> 2.3'
37
37
  spec.add_development_dependency 'babel-transpiler', '~> 0.7'
38
+
39
+ spec.add_development_dependency 'rubocop', '0.81'
38
40
  end
@@ -1,4 +1,6 @@
1
- require 'hanami/utils/class_attribute'
1
+ # frozen_string_literal: true
2
+
3
+ require "hanami/utils/class_attribute"
2
4
 
3
5
  # Hanami
4
6
  #
@@ -16,10 +18,10 @@ module Hanami
16
18
  class Error < ::StandardError
17
19
  end
18
20
 
19
- require 'hanami/assets/version'
20
- require 'hanami/assets/configuration'
21
- require 'hanami/assets/config/global_sources'
22
- require 'hanami/assets/helpers'
21
+ require "hanami/assets/version"
22
+ require "hanami/assets/configuration"
23
+ require "hanami/assets/config/global_sources"
24
+ require "hanami/assets/helpers"
23
25
 
24
26
  include Utils::ClassAttribute
25
27
 
@@ -48,8 +50,8 @@ module Hanami
48
50
  #
49
51
  # @since 0.1.0
50
52
  def self.deploy
51
- require 'hanami/assets/precompiler'
52
- require 'hanami/assets/bundler'
53
+ require "hanami/assets/precompiler"
54
+ require "hanami/assets/bundler"
53
55
 
54
56
  Precompiler.new(configuration, duplicates).run
55
57
  Bundler.new(configuration, duplicates).run
@@ -59,8 +61,8 @@ module Hanami
59
61
  #
60
62
  # @since 0.4.0
61
63
  def self.precompile(configurations)
62
- require 'hanami/assets/precompiler'
63
- require 'hanami/assets/bundler'
64
+ require "hanami/assets/precompiler"
65
+ require "hanami/assets/bundler"
64
66
 
65
67
  Precompiler.new(configuration, configurations).run
66
68
  Bundler.new(configuration, configurations).run
@@ -1,9 +1,11 @@
1
- require 'fileutils'
2
- require 'json'
1
+ # frozen_string_literal: true
3
2
 
4
- require 'hanami/assets/bundler/compressor'
5
- require 'hanami/assets/bundler/asset'
6
- require 'hanami/assets/bundler/manifest_entry'
3
+ require "fileutils"
4
+ require "json"
5
+
6
+ require "hanami/assets/bundler/compressor"
7
+ require "hanami/assets/bundler/asset"
8
+ require "hanami/assets/bundler/manifest_entry"
7
9
 
8
10
  module Hanami
9
11
  module Assets
@@ -18,11 +20,11 @@ module Hanami
18
20
 
19
21
  # @since 0.1.0
20
22
  # @api private
21
- URL_SEPARATOR = '/'.freeze
23
+ URL_SEPARATOR = "/"
22
24
 
23
25
  # @since 0.1.0
24
26
  # @api private
25
- URL_REPLACEMENT = ''.freeze
27
+ URL_REPLACEMENT = ""
26
28
 
27
29
  # Return a new instance
28
30
  #
@@ -105,7 +107,7 @@ module Hanami
105
107
  # @api private
106
108
  def _convert_to_url(path)
107
109
  path.sub(public_directory.to_s, URL_REPLACEMENT)
108
- .gsub(File::SEPARATOR, URL_SEPARATOR)
110
+ .gsub(File::SEPARATOR, URL_SEPARATOR)
109
111
  end
110
112
 
111
113
  # @since 0.1.0
@@ -1,4 +1,6 @@
1
- require 'openssl'
1
+ # frozen_string_literal: true
2
+
3
+ require "openssl"
2
4
 
3
5
  module Hanami
4
6
  module Assets
@@ -20,7 +22,7 @@ module Hanami
20
22
 
21
23
  # @since 0.3.0
22
24
  # @api private
23
- WILDCARD_EXT = '.*'.freeze
25
+ WILDCARD_EXT = ".*"
24
26
 
25
27
  # Return a new instance
26
28
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  class Bundler
@@ -8,11 +10,11 @@ module Hanami
8
10
  class Compressor
9
11
  # @since 0.3.0
10
12
  # @api private
11
- JAVASCRIPT_EXT = '.js'.freeze
13
+ JAVASCRIPT_EXT = ".js"
12
14
 
13
15
  # @since 0.3.0
14
16
  # @api private
15
- STYLESHEET_EXT = '.css'.freeze
17
+ STYLESHEET_EXT = ".css"
16
18
 
17
19
  # Return a new instance
18
20
  #
@@ -39,19 +41,19 @@ module Hanami
39
41
  # @since 0.3.0
40
42
  # @api private
41
43
  def compressor(type)
42
- @configuration.__send__(:"#{ type }_compressor")
44
+ @configuration.__send__(:"#{type}_compressor")
43
45
  end
44
46
 
45
47
  # @since 0.3.0
46
48
  # @api private
47
49
  def _compress(compressor)
48
50
  compressor.compress(@path)
49
- rescue => e # rubocop:disable Style/RescueStandardError
51
+ rescue => exception # rubocop:disable Style/RescueStandardError
50
52
  warn(
51
53
  [
52
54
  "Skipping compression of: `#{@path}'",
53
- "Reason: #{e}\n",
54
- "\t#{e.backtrace.join("\n\t")}\n\n"
55
+ "Reason: #{exception}\n",
56
+ "\t#{exception.backtrace.join("\n\t")}\n\n"
55
57
  ].join("\n")
56
58
  )
57
59
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  class Bundler
@@ -8,7 +10,7 @@ module Hanami
8
10
  class ManifestEntry
9
11
  # @since 0.3.0
10
12
  # @api private
11
- SUBRESOURCE_INTEGRITY_SEPARATOR = '-'.freeze
13
+ SUBRESOURCE_INTEGRITY_SEPARATOR = "-"
12
14
 
13
15
  # Return a new instance
14
16
  #
@@ -22,7 +24,7 @@ module Hanami
22
24
  # @since 0.3.0
23
25
  # @api private
24
26
  def entry
25
- { name => values }
27
+ {name => values}
26
28
  end
27
29
 
28
30
  private
@@ -38,7 +40,7 @@ module Hanami
38
40
  def values
39
41
  Hash[
40
42
  target: _convert_to_url(@asset.expanded_fingerprinted_target),
41
- sri: subresource_integrity_values
43
+ sri: subresource_integrity_values
42
44
  ]
43
45
  end
44
46
 
@@ -54,7 +56,7 @@ module Hanami
54
56
  # @api private
55
57
  def _convert_to_url(path)
56
58
  path.sub(@asset.configuration.public_directory.to_s, URL_REPLACEMENT)
57
- .gsub(File::SEPARATOR, URL_SEPARATOR)
59
+ .gsub(File::SEPARATOR, URL_SEPARATOR)
58
60
  end
59
61
  end
60
62
  end
@@ -1,4 +1,6 @@
1
- require 'pathname'
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
2
4
 
3
5
  module Hanami
4
6
  module Assets
@@ -1,13 +1,15 @@
1
- require 'set'
2
- require 'find'
3
- require 'hanami/utils/class_attribute'
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+ require "find"
5
+ require "hanami/utils/class_attribute"
4
6
 
5
7
  module Hanami
6
8
  module Assets
7
9
  # Missing Asset error
8
10
  class MissingAsset < Error
9
11
  def initialize(name, sources)
10
- sources = sources.map(&:to_s).join(', ')
12
+ sources = sources.map(&:to_s).join(", ")
11
13
  super("Missing asset: `#{name}' (sources: #{sources})")
12
14
  end
13
15
  end
@@ -28,18 +30,18 @@ module Hanami
28
30
  #
29
31
  # @since 0.1.0
30
32
  # @api private
31
- class Compiler # rubocop:disable Metrics/ClassLength
33
+ class Compiler
32
34
  # @since 0.1.0
33
35
  # @api private
34
36
  DEFAULT_PERMISSIONS = 0o644
35
37
 
36
38
  # @since 0.1.0
37
39
  # @api private
38
- COMPILE_PATTERN = '*.*.*'.freeze # Example hello.js.es6
40
+ COMPILE_PATTERN = "*.*.*" # Example hello.js.es6
39
41
 
40
42
  # @since 0.1.0
41
43
  # @api private
42
- EXTENSIONS = { '.js' => true, '.css' => true, '.map' => true }.freeze
44
+ EXTENSIONS = {".js" => true, ".css" => true, ".map" => true}.freeze
43
45
 
44
46
  include Utils::ClassAttribute
45
47
 
@@ -67,10 +69,10 @@ module Hanami
67
69
  def self.compile(configuration, name)
68
70
  return unless configuration.compile
69
71
 
70
- require 'tilt'
71
- require 'hanami/assets/cache'
72
- require 'hanami/assets/compilers/sass'
73
- require 'hanami/assets/compilers/less'
72
+ require "tilt"
73
+ require "hanami/assets/cache"
74
+ require "hanami/assets/compilers/sass"
75
+ require "hanami/assets/compilers/less"
74
76
  fabricate(configuration, name).compile
75
77
  end
76
78
 
@@ -177,11 +179,10 @@ module Hanami
177
179
  relative_destination_name(name: Pathname.new(result), add_prefix: false)
178
180
  end
179
181
 
180
- # @since 0.1.0
182
+ # @since 1.3.0
181
183
  # @api private
182
184
  def destination_name
183
- result = @name.relative? ? relative_destination_name : absolute_destination_name
184
- result = result.to_s
185
+ result = destination_path
185
186
 
186
187
  if compile?
187
188
  result.scan(/\A[[[:alnum:]][\-\_]]*\.[[\w]]*/).first || result
@@ -190,6 +191,16 @@ module Hanami
190
191
  end
191
192
  end
192
193
 
194
+ # @since 1.3.1
195
+ # @api private
196
+ def destination_path
197
+ if @configuration.nested
198
+ @name.relative? ? relative_destination_name : absolute_destination_name
199
+ else
200
+ ::File.basename(@name)
201
+ end.to_s
202
+ end
203
+
193
204
  # @since 0.1.0
194
205
  # @api private
195
206
  def exist?
@@ -222,7 +233,7 @@ module Hanami
222
233
  # @since 0.1.0
223
234
  # @api private
224
235
  def copy!
225
- write { source.read }
236
+ write { source.binread }
226
237
  end
227
238
 
228
239
  # @since 0.1.0
@@ -235,7 +246,7 @@ module Hanami
235
246
  # @api private
236
247
  def write
237
248
  destination.dirname.mkpath
238
- destination.open(File::WRONLY | File::TRUNC | File::CREAT, DEFAULT_PERMISSIONS) do |file|
249
+ destination.open(File::WRONLY | File::TRUNC | File::CREAT | File::BINARY, DEFAULT_PERMISSIONS) do |file|
239
250
  file.write(yield)
240
251
  end
241
252
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  module Compilers
@@ -8,7 +10,7 @@ module Hanami
8
10
  class Less < Compiler
9
11
  # @since 0.3.0
10
12
  # @api private
11
- EXTENSIONS = /\.(less)\z/
13
+ EXTENSIONS = /\.(less)\z/.freeze
12
14
 
13
15
  # @since 0.3.0
14
16
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  module Compilers
@@ -8,12 +10,7 @@ module Hanami
8
10
  class Sass < Compiler
9
11
  # @since 0.3.0
10
12
  # @api private
11
- EXTENSIONS = /\.(sass|scss)\z/
12
-
13
- # @since 0.1.0
14
- # @api private
15
- CACHE_LOCATION = Pathname(Hanami.respond_to?(:root) ? # rubocop:disable Style/MultilineTernaryOperator
16
- Hanami.root : Dir.pwd).join('tmp', 'sass-cache')
13
+ EXTENSIONS = /\.(sass|scss)\z/.freeze
17
14
 
18
15
  # @since 0.3.0
19
16
  # @api private
@@ -21,24 +18,42 @@ module Hanami
21
18
  name.to_s =~ EXTENSIONS
22
19
  end
23
20
 
21
+ # @since 1.3.3
22
+ # @api private
23
+ def initialize(*)
24
+ super
25
+ require "sassc"
26
+ end
27
+
24
28
  private
25
29
 
26
30
  # @since 0.3.0
27
31
  # @api private
28
32
  def renderer
29
- Tilt.new(source, nil, load_paths: load_paths, cache_location: CACHE_LOCATION)
33
+ @renderer ||=
34
+ ::SassC::Engine.new(
35
+ source.read,
36
+ syntax: target_syntax,
37
+ load_paths: load_paths
38
+ )
30
39
  end
31
40
 
32
41
  # @since 0.3.0
33
42
  # @api private
34
43
  def dependencies
35
- engine.dependencies.map { |d| d.options[:filename] }
44
+ renderer.dependencies.map(&:filename)
45
+ rescue source::NotRenderedError
46
+ []
36
47
  end
37
48
 
38
- # @since 0.3.0
49
+ # @since 1.3.2
39
50
  # @api private
40
- def engine
41
- ::Sass::Engine.for_file(source.to_s, load_paths: load_paths, cache_location: CACHE_LOCATION)
51
+ def target_syntax
52
+ if source.extname =~ /sass\z/.freeze
53
+ :sass
54
+ else
55
+ :scss
56
+ end
42
57
  end
43
58
  end
44
59
  end
@@ -1,12 +1,11 @@
1
1
  require 'hanami/assets/compressors/stylesheet'
2
- require 'sass'
3
2
 
4
3
  module Hanami
5
4
  module Assets
6
5
  module Compressors
7
6
  # Sass compressor for stylesheet
8
7
  #
9
- # It depends on <tt>sass</tt> gem.
8
+ # It depends on <tt>sassc</tt> gem.
10
9
  #
11
10
  # @since 0.1.0
12
11
  # @api private
@@ -16,21 +15,20 @@ module Hanami
16
15
  class SassStylesheet < Stylesheet
17
16
  # @since 0.1.0
18
17
  # @api private
19
- #
20
- # FIXME This is the same logic that we have for Hanami::Assets::Compiler
21
- SASS_CACHE_LOCATION = Pathname(Hanami.respond_to?(:root) ? # rubocop:disable Style/MultilineTernaryOperator
22
- Hanami.root : Dir.pwd).join('tmp', 'sass-cache')
23
- # @since 0.1.0
24
- # @api private
25
18
  def initialize
26
- @compressor = Sass::Engine
19
+ require 'sassc'
20
+ @compressor = ::SassC::Engine
27
21
  end
28
22
 
29
23
  # @since 0.1.0
30
24
  # @api private
31
25
  def compress(filename)
32
- compressor.new(read(filename), filename: filename, syntax: :scss,
33
- style: :compressed, cache_location: SASS_CACHE_LOCATION).render
26
+ compressor.new(
27
+ read(filename),
28
+ filename: filename,
29
+ syntax: :scss,
30
+ style: :compressed
31
+ ).render
34
32
  end
35
33
  end
36
34
  end
@@ -1,4 +1,6 @@
1
- require 'hanami/utils/load_paths'
1
+ # frozen_string_literal: true
2
+
3
+ require "hanami/utils/load_paths"
2
4
 
3
5
  module Hanami
4
6
  module Assets
@@ -27,7 +29,7 @@ module Hanami
27
29
 
28
30
  # @since 0.1.0
29
31
  # @api private
30
- alias << push
32
+ alias_method :<<, :push
31
33
 
32
34
  private
33
35
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  # This error is raised when the application starts but can't be load the
@@ -83,11 +85,11 @@ module Hanami
83
85
  class Manifest
84
86
  # @since 0.4.0
85
87
  # @api private
86
- TARGET = 'target'.freeze
88
+ TARGET = "target"
87
89
 
88
90
  # @since 0.3.0
89
91
  # @api private
90
- SUBRESOURCE_INTEGRITY = 'sri'.freeze
92
+ SUBRESOURCE_INTEGRITY = "sri"
91
93
 
92
94
  # Return a new instance
93
95
  #
@@ -1,5 +1,7 @@
1
- require 'hanami/utils/load_paths'
2
- require 'hanami/utils/file_list'
1
+ # frozen_string_literal: true
2
+
3
+ require "hanami/utils/load_paths"
4
+ require "hanami/utils/file_list"
3
5
 
4
6
  module Hanami
5
7
  module Assets
@@ -20,7 +22,7 @@ module Hanami
20
22
  class Sources < Utils::LoadPaths
21
23
  # @since 0.3.0
22
24
  # @api private
23
- SKIPPED_FILE_PREFIX = '_'.freeze
25
+ SKIPPED_FILE_PREFIX = "_"
24
26
 
25
27
  # @since 0.1.0
26
28
  # @api private
@@ -1,61 +1,63 @@
1
- require 'pathname'
2
- require 'json'
3
- require 'hanami/utils/string'
4
- require 'hanami/utils/class'
5
- require 'hanami/utils/path_prefix'
6
- require 'hanami/utils/basic_object'
7
- require 'hanami/assets/config/manifest'
8
- require 'hanami/assets/config/sources'
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "json"
5
+ require "hanami/utils/string"
6
+ require "hanami/utils/class"
7
+ require "hanami/utils/path_prefix"
8
+ require "hanami/utils/basic_object"
9
+ require "hanami/assets/config/manifest"
10
+ require "hanami/assets/config/sources"
9
11
 
10
12
  module Hanami
11
13
  module Assets
12
14
  # Framework configuration
13
15
  #
14
16
  # @since 0.1.0
15
- class Configuration # rubocop:disable Metrics/ClassLength
17
+ class Configuration
16
18
  # @since 0.1.0
17
19
  # @api private
18
- DEFAULT_SCHEME = 'http'.freeze
20
+ DEFAULT_SCHEME = "http"
19
21
 
20
22
  # @since 0.1.0
21
23
  # @api private
22
- DEFAULT_HOST = 'localhost'.freeze
24
+ DEFAULT_HOST = "localhost"
23
25
 
24
26
  # @since 0.1.0
25
27
  # @api private
26
- DEFAULT_PORT = '2300'.freeze
28
+ DEFAULT_PORT = "2300"
27
29
 
28
30
  # @since 0.1.0
29
31
  # @api private
30
- DEFAULT_PUBLIC_DIRECTORY = 'public'.freeze
32
+ DEFAULT_PUBLIC_DIRECTORY = "public"
31
33
 
32
34
  # @since 0.1.0
33
35
  # @api private
34
- DEFAULT_MANIFEST = 'assets.json'.freeze
36
+ DEFAULT_MANIFEST = "assets.json"
35
37
 
36
38
  # @since 0.1.0
37
39
  # @api private
38
- DEFAULT_PREFIX = '/assets'.freeze
40
+ DEFAULT_PREFIX = "/assets"
39
41
 
40
42
  # @since 0.1.0
41
43
  # @api private
42
- URL_SEPARATOR = '/'.freeze
44
+ URL_SEPARATOR = "/"
43
45
 
44
46
  # @since 0.1.0
45
47
  # @api private
46
- HTTP_SCHEME = 'http'.freeze
48
+ HTTP_SCHEME = "http"
47
49
 
48
50
  # @since 0.1.0
49
51
  # @api private
50
- HTTP_PORT = '80'.freeze
52
+ HTTP_PORT = "80"
51
53
 
52
54
  # @since 0.1.0
53
55
  # @api private
54
- HTTPS_SCHEME = 'https'.freeze
56
+ HTTPS_SCHEME = "https"
55
57
 
56
58
  # @since 0.1.0
57
59
  # @api private
58
- HTTPS_PORT = '443'.freeze
60
+ HTTPS_PORT = "443"
59
61
 
60
62
  # @since 0.3.0
61
63
  # @api private
@@ -63,7 +65,7 @@ module Hanami
63
65
 
64
66
  # @since 0.3.0
65
67
  # @api private
66
- SUBRESOURCE_INTEGRITY_SEPARATOR = ' '.freeze
68
+ SUBRESOURCE_INTEGRITY_SEPARATOR = " "
67
69
 
68
70
  # Return a copy of the configuration of the framework instance associated
69
71
  # with the given class.
@@ -80,9 +82,10 @@ module Hanami
80
82
  # @since 0.1.0
81
83
  # @api private
82
84
  def self.for(base)
83
- # TODO: this implementation is similar to Hanami::Controller::Configuration consider to extract it into Hanami::Utils
85
+ # TODO: this implementation is similar to Hanami::Controller::Configuration
86
+ # consider to extract it into Hanami::Utils
84
87
  namespace = Utils::String.namespace(base)
85
- framework = Utils::Class.load("#{namespace}::Assets") || Utils::Class.load!('Hanami::Assets')
88
+ framework = Utils::Class.load("#{namespace}::Assets") || Utils::Class.load!("Hanami::Assets")
86
89
  framework.configuration
87
90
  end
88
91
 
@@ -129,6 +132,17 @@ module Hanami
129
132
  end
130
133
  end
131
134
 
135
+ # Support for nested path
136
+ #
137
+ # @since 1.3.1
138
+ def nested(value = nil)
139
+ if value.nil?
140
+ @nested
141
+ else
142
+ @nested = !!value
143
+ end
144
+ end
145
+
132
146
  # Subresource integrity mode
133
147
  #
134
148
  # Determine if the helpers should generate the integrity attribute for an
@@ -155,7 +169,7 @@ module Hanami
155
169
  if value.nil?
156
170
  @cdn
157
171
  else
158
- @cdn = !!value # rubocop:disable Style/DoubleNegation
172
+ @cdn = !!value
159
173
  end
160
174
  end
161
175
 
@@ -172,7 +186,8 @@ module Hanami
172
186
  # * <tt>:builtin</tt> - Ruby based implementation of jsmin. It doesn't require any external gem.
173
187
  # * <tt>:yui</tt> - YUI Compressor, it depends on <tt>yui-compressor</tt> gem and it requires Java 1.4+
174
188
  # * <tt>:uglifier</tt> - UglifyJS, it depends on <tt>uglifier</tt> gem and it requires Node.js
175
- # * <tt>:closure</tt> - Google Closure Compiler, it depends on <tt>closure-compiler</tt> gem and it requires Java
189
+ # * <tt>:closure</tt> - Google Closure Compiler, it depends on <tt>closure-compiler</tt> gem
190
+ # and it requires Java
176
191
  #
177
192
  # @param value [Symbol,#compress] the compressor
178
193
  #
@@ -220,9 +235,10 @@ module Hanami
220
235
  #
221
236
  # The following symbols are accepted:
222
237
  #
223
- # * <tt>:builtin</tt> - Ruby based compressor. It doesn't require any external gem. It's fast, but not an efficient compressor.
238
+ # * <tt>:builtin</tt> - Ruby based compressor. It doesn't require any external gem.
239
+ # It's fast, but not an efficient compressor.
224
240
  # * <tt>:yui</tt> - YUI-Compressor, it depends on <tt>yui-compressor</tt> gem and requires Java 1.4+
225
- # * <tt>:sass</tt> - Sass, it depends on <tt>sass</tt> gem
241
+ # * <tt>:sass</tt> - Sass, it depends on <tt>sassc</tt> gem
226
242
  #
227
243
  # @param value [Symbol,#compress] the compressor
228
244
  #
@@ -232,7 +248,7 @@ module Hanami
232
248
  # @see https://rubygems.org/gems/yui-compressor
233
249
  #
234
250
  # @see http://sass-lang.com
235
- # @see https://rubygems.org/gems/sass
251
+ # @see https://rubygems.org/gems/sassc
236
252
  #
237
253
  # @example YUI Compressor
238
254
  # require 'hanami/assets'
@@ -473,7 +489,7 @@ module Hanami
473
489
  # @see Hanami::Assets::Configuration#javascript_compressor
474
490
  # @see Hanami::Assets::Compressors::Javascript#for
475
491
  def js_compressor
476
- require 'hanami/assets/compressors/javascript'
492
+ require "hanami/assets/compressors/javascript"
477
493
  Hanami::Assets::Compressors::Javascript.for(javascript_compressor)
478
494
  end
479
495
 
@@ -490,13 +506,13 @@ module Hanami
490
506
  # @see Hanami::Assets::Configuration#stylesheet_compressor
491
507
  # @see Hanami::Assets::Compressors::Stylesheet#for
492
508
  def css_compressor
493
- require 'hanami/assets/compressors/stylesheet'
509
+ require "hanami/assets/compressors/stylesheet"
494
510
  Hanami::Assets::Compressors::Stylesheet.for(stylesheet_compressor)
495
511
  end
496
512
 
497
513
  # @since 0.1.0
498
514
  # @api private
499
- def duplicate # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
515
+ def duplicate
500
516
  Configuration.new.tap do |c|
501
517
  c.root = root
502
518
  c.scheme = scheme
@@ -506,6 +522,7 @@ module Hanami
506
522
  c.subresource_integrity = subresource_integrity
507
523
  c.cdn = cdn
508
524
  c.compile = compile
525
+ c.nested = nested
509
526
  c.public_directory = public_directory
510
527
  c.manifest = manifest
511
528
  c.sources = sources.dup
@@ -516,7 +533,7 @@ module Hanami
516
533
 
517
534
  # @since 0.1.0
518
535
  # @api private
519
- def reset! # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
536
+ def reset!
520
537
  @scheme = DEFAULT_SCHEME
521
538
  @host = DEFAULT_HOST
522
539
  @port = DEFAULT_PORT
@@ -526,6 +543,7 @@ module Hanami
526
543
  @cdn = false
527
544
  @fingerprint = false
528
545
  @compile = false
546
+ @nested = false
529
547
  @base_url = nil
530
548
  @destination_directory = nil
531
549
  @public_manifest = Config::NullManifest.new(self)
@@ -569,6 +587,10 @@ module Hanami
569
587
  # @api private
570
588
  attr_writer :compile
571
589
 
590
+ # @since 1.3.1
591
+ # @api private
592
+ attr_writer :nested
593
+
572
594
  # @since 0.1.0
573
595
  # @api private
574
596
  attr_writer :scheme
@@ -1,6 +1,8 @@
1
- require 'uri'
2
- require 'hanami/helpers/html_helper'
3
- require 'hanami/utils/escape'
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+ require "hanami/helpers/html_helper"
5
+ require "hanami/utils/escape"
4
6
 
5
7
  module Hanami
6
8
  module Assets
@@ -13,51 +15,50 @@ module Hanami
13
15
  # @see http://www.rubydoc.info/gems/hanami-helpers/Hanami/Helpers/HtmlHelper
14
16
  #
15
17
  # rubocop:disable Metrics/ModuleLength
16
- # rubocop:disable Naming/UncommunicativeMethodParamName
17
18
  module Helpers
18
19
  # @since 0.1.0
19
20
  # @api private
20
- NEW_LINE_SEPARATOR = "\n".freeze
21
+ NEW_LINE_SEPARATOR = "\n"
21
22
 
22
23
  # @since 0.1.0
23
24
  # @api private
24
- WILDCARD_EXT = '.*'.freeze
25
+ WILDCARD_EXT = ".*"
25
26
 
26
27
  # @since 0.1.0
27
28
  # @api private
28
- JAVASCRIPT_EXT = '.js'.freeze
29
+ JAVASCRIPT_EXT = ".js"
29
30
 
30
31
  # @since 0.1.0
31
32
  # @api private
32
- STYLESHEET_EXT = '.css'.freeze
33
+ STYLESHEET_EXT = ".css"
33
34
 
34
35
  # @since 0.1.0
35
36
  # @api private
36
- JAVASCRIPT_MIME_TYPE = 'text/javascript'.freeze
37
+ JAVASCRIPT_MIME_TYPE = "text/javascript"
37
38
 
38
39
  # @since 0.1.0
39
40
  # @api private
40
- STYLESHEET_MIME_TYPE = 'text/css'.freeze
41
+ STYLESHEET_MIME_TYPE = "text/css"
41
42
 
42
43
  # @since 0.1.0
43
44
  # @api private
44
- FAVICON_MIME_TYPE = 'image/x-icon'.freeze
45
+ FAVICON_MIME_TYPE = "image/x-icon"
45
46
 
46
47
  # @since 0.1.0
47
48
  # @api private
48
- STYLESHEET_REL = 'stylesheet'.freeze
49
+ STYLESHEET_REL = "stylesheet"
49
50
 
50
51
  # @since 0.1.0
51
52
  # @api private
52
- FAVICON_REL = 'shortcut icon'.freeze
53
+ FAVICON_REL = "shortcut icon"
53
54
 
54
55
  # @since 0.1.0
55
56
  # @api private
56
- DEFAULT_FAVICON = 'favicon.ico'.freeze
57
+ DEFAULT_FAVICON = "favicon.ico"
57
58
 
58
59
  # @since 0.3.0
59
60
  # @api private
60
- CROSSORIGIN_ANONYMOUS = 'anonymous'.freeze
61
+ CROSSORIGIN_ANONYMOUS = "anonymous"
61
62
 
62
63
  # @since 0.3.0
63
64
  # @api private
@@ -65,7 +66,7 @@ module Hanami
65
66
 
66
67
  # @since 1.1.0
67
68
  # @api private
68
- QUERY_STRING_MATCHER = /\?/
69
+ QUERY_STRING_MATCHER = /\?/.freeze
69
70
 
70
71
  include Hanami::Helpers::HtmlHelper
71
72
 
@@ -140,13 +141,15 @@ module Hanami
140
141
  #
141
142
  # <%= javascript 'application' %>
142
143
  #
143
- # # <script src="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js" type="text/javascript" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
144
+ # # <script src="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js"
145
+ # # type="text/javascript" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
144
146
  #
145
147
  # @example Subresource Integrity for 3rd Party Scripts
146
148
  #
147
149
  # <%= javascript 'https://example.com/assets/example.js', integrity: 'sha384-oqVu...Y8wC' %>
148
150
  #
149
- # # <script src="https://example.com/assets/example.js" type="text/javascript" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
151
+ # # <script src="https://example.com/assets/example.js" type="text/javascript"
152
+ # # integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
150
153
  #
151
154
  # @example Deferred Execution
152
155
  #
@@ -170,18 +173,19 @@ module Hanami
170
173
  #
171
174
  # <%= javascript 'application' %>
172
175
  #
173
- # # <script src="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js" type="text/javascript"></script>
176
+ # # <script src="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js"
177
+ # # type="text/javascript"></script>
174
178
  #
175
179
  # @example Disable Push Promise/Early Hints
176
180
  #
177
181
  # <%= javascript 'application', push: false %>
178
182
  # <%= javascript 'http://cdn.example.test/jquery.js', 'dashboard', push: false %>
179
- def javascript(*sources, push: true, **options) # rubocop:disable Metrics/MethodLength
183
+ def javascript(*sources, push: true, **options)
180
184
  options = options.reject { |k, _| k.to_sym == :src }
181
185
 
182
186
  _safe_tags(*sources) do |source|
183
187
  attributes = {
184
- src: _typed_asset_path(source, JAVASCRIPT_EXT, push: push, as: :script),
188
+ src: _typed_asset_path(source, JAVASCRIPT_EXT, push: push, as: :script),
185
189
  type: JAVASCRIPT_MIME_TYPE
186
190
  }
187
191
  attributes.merge!(options)
@@ -247,19 +251,22 @@ module Hanami
247
251
  #
248
252
  # <%= stylesheet 'application' %>
249
253
  #
250
- # # <link href="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css" type="text/css" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
254
+ # # <link href="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css"
255
+ # # type="text/css" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
251
256
  #
252
257
  # @example Subresource Integrity for 3rd Party Assets
253
258
  #
254
259
  # <%= stylesheet 'https://example.com/assets/example.css', integrity: 'sha384-oqVu...Y8wC' %>
255
260
  #
256
- # # <link href="https://example.com/assets/example.css" type="text/css" rel="stylesheet" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
261
+ # # <link href="https://example.com/assets/example.css"
262
+ # # type="text/css" rel="stylesheet" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
257
263
  #
258
264
  # @example Absolute URL
259
265
  #
260
266
  # <%= stylesheet 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' %>
261
267
  #
262
- # # <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css" rel="stylesheet">
268
+ # # <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
269
+ # # type="text/css" rel="stylesheet">
263
270
  #
264
271
  # @example Fingerprint Mode
265
272
  #
@@ -271,20 +278,21 @@ module Hanami
271
278
  #
272
279
  # <%= stylesheet 'application' %>
273
280
  #
274
- # # <link href="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css" type="text/css" rel="stylesheet">
281
+ # # <link href="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css"
282
+ # # type="text/css" rel="stylesheet">
275
283
  #
276
284
  # @example Disable Push Promise/Early Hints
277
285
  #
278
286
  # <%= stylesheet 'application', push: false %>
279
287
  # <%= stylesheet 'http://cdn.example.test/bootstrap.css', 'dashboard', push: false %>
280
- def stylesheet(*sources, push: true, **options) # rubocop:disable Metrics/MethodLength
288
+ def stylesheet(*sources, push: true, **options)
281
289
  options = options.reject { |k, _| k.to_sym == :href }
282
290
 
283
291
  _safe_tags(*sources) do |source|
284
292
  attributes = {
285
293
  href: _typed_asset_path(source, STYLESHEET_EXT, push: push, as: :style),
286
294
  type: STYLESHEET_MIME_TYPE,
287
- rel: STYLESHEET_REL
295
+ rel: STYLESHEET_REL
288
296
  }
289
297
  attributes.merge!(options)
290
298
 
@@ -435,7 +443,8 @@ module Hanami
435
443
  #
436
444
  # <%= favicon %>
437
445
  #
438
- # # <link href="https://assets.bookshelf.org/assets/favicon-28a6b886de2372ee3922fcaf3f78f2d8.ico" rel="shortcut icon" type="image/x-icon">
446
+ # # <link href="https://assets.bookshelf.org/assets/favicon-28a6b886de2372ee3922fcaf3f78f2d8.ico"
447
+ # rel="shortcut icon" type="image/x-icon">
439
448
  #
440
449
  # @example Enable Push Promise/Early Hints
441
450
  #
@@ -445,7 +454,7 @@ module Hanami
445
454
 
446
455
  attributes = {
447
456
  href: asset_path(source, push: options.delete(:push) || false, as: :image),
448
- rel: FAVICON_REL,
457
+ rel: FAVICON_REL,
449
458
  type: FAVICON_MIME_TYPE
450
459
  }
451
460
  attributes.merge!(options)
@@ -863,7 +872,7 @@ module Hanami
863
872
 
864
873
  # @api private
865
874
  def _subresource_integrity?
866
- !!self.class.assets_configuration.subresource_integrity # rubocop:disable Style/DoubleNegation
875
+ !!self.class.assets_configuration.subresource_integrity
867
876
  end
868
877
 
869
878
  # @api private
@@ -910,7 +919,7 @@ module Hanami
910
919
  end
911
920
 
912
921
  if !options[:src] && !block_given?
913
- raise ArgumentError.new('You should provide a source via `src` option or with a `source` HTML tag')
922
+ raise ArgumentError.new("You should provide a source via `src` option or with a `source` HTML tag")
914
923
  end
915
924
 
916
925
  options
@@ -920,7 +929,7 @@ module Hanami
920
929
  # @api private
921
930
  def _push_promise(url, as: nil)
922
931
  Thread.current[:__hanami_assets] ||= {}
923
- Thread.current[:__hanami_assets][url.to_s] = { as: as, crossorigin: _crossorigin?(url) }
932
+ Thread.current[:__hanami_assets][url.to_s] = {as: as, crossorigin: _crossorigin?(url)}
924
933
 
925
934
  url
926
935
  end
@@ -931,7 +940,6 @@ module Hanami
931
940
  source !~ QUERY_STRING_MATCHER && source !~ /#{Regexp.escape(ext)}\z/
932
941
  end
933
942
  end
934
- # rubocop:enable Naming/UncommunicativeMethodParamName
935
943
  # rubocop:enable Metrics/ModuleLength
936
944
  end
937
945
  end
@@ -1,5 +1,7 @@
1
- require 'fileutils'
2
- require 'hanami/assets/compiler'
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "hanami/assets/compiler"
3
5
 
4
6
  module Hanami
5
7
  module Assets
@@ -48,18 +50,18 @@ module Hanami
48
50
  # @api private
49
51
  def clear_manifest(manifest)
50
52
  JSON.parse(manifest).each_value do |asset_hash|
51
- asset_file_name = @configuration.public_directory.join(asset_hash['target'])
53
+ asset_file_name = @configuration.public_directory.join(asset_hash["target"])
52
54
  asset_file_name.unlink if asset_file_name.exist?
53
55
  end
54
56
  rescue JSON::ParserError
55
- warn 'Non JSON manifest found and unlinked.'
57
+ warn "Non JSON manifest found and unlinked."
56
58
  ensure
57
59
  manifest.unlink
58
60
  end
59
61
 
60
62
  # @since 0.1.0
61
63
  # @api private
62
- def precompile # rubocop:disable Metrics/MethodLength
64
+ def precompile
63
65
  applications.each do |duplicate|
64
66
  config = if duplicate.respond_to?(:configuration)
65
67
  duplicate.configuration
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  module Assets
3
5
  # Defines the version
4
6
  #
5
7
  # @since 0.1.0
6
- VERSION = '1.3.0'.freeze
8
+ VERSION = "1.3.5"
7
9
  end
8
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-24 00:00:00.000000000 Z
11
+ date: 2021-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hanami-utils
@@ -64,14 +64,20 @@ dependencies:
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
67
+ version: '1.6'
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: '3'
68
71
  type: :development
69
72
  prerelease: false
70
73
  version_requirements: !ruby/object:Gem::Requirement
71
74
  requirements:
72
75
  - - ">="
73
76
  - !ruby/object:Gem::Version
74
- version: '0'
77
+ version: '1.6'
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: '3'
75
81
  - !ruby/object:Gem::Dependency
76
82
  name: rake
77
83
  requirement: !ruby/object:Gem::Requirement
@@ -143,19 +149,19 @@ dependencies:
143
149
  - !ruby/object:Gem::Version
144
150
  version: '1.1'
145
151
  - !ruby/object:Gem::Dependency
146
- name: sass
152
+ name: sassc
147
153
  requirement: !ruby/object:Gem::Requirement
148
154
  requirements:
149
155
  - - "~>"
150
156
  - !ruby/object:Gem::Version
151
- version: '3.4'
157
+ version: '2.0'
152
158
  type: :development
153
159
  prerelease: false
154
160
  version_requirements: !ruby/object:Gem::Requirement
155
161
  requirements:
156
162
  - - "~>"
157
163
  - !ruby/object:Gem::Version
158
- version: '3.4'
164
+ version: '2.0'
159
165
  - !ruby/object:Gem::Dependency
160
166
  name: coffee-script
161
167
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +190,20 @@ dependencies:
184
190
  - - "~>"
185
191
  - !ruby/object:Gem::Version
186
192
  version: '0.7'
193
+ - !ruby/object:Gem::Dependency
194
+ name: rubocop
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - '='
198
+ - !ruby/object:Gem::Version
199
+ version: '0.81'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - '='
205
+ - !ruby/object:Gem::Version
206
+ version: '0.81'
187
207
  description: Assets management for Ruby web applications
188
208
  email:
189
209
  - me@lucaguidi.com
@@ -229,7 +249,7 @@ homepage: http://hanamirb.org
229
249
  licenses:
230
250
  - MIT
231
251
  metadata: {}
232
- post_install_message:
252
+ post_install_message:
233
253
  rdoc_options: []
234
254
  require_paths:
235
255
  - lib
@@ -244,9 +264,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
264
  - !ruby/object:Gem::Version
245
265
  version: '0'
246
266
  requirements: []
247
- rubyforge_project:
248
- rubygems_version: 2.7.7
249
- signing_key:
267
+ rubygems_version: 3.2.4
268
+ signing_key:
250
269
  specification_version: 4
251
270
  summary: Assets management
252
271
  test_files: []