hanami-assets 0.3.0 → 0.4.0

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
  SHA1:
3
- metadata.gz: 6ac62b03f4a875750283f436f0c830152e9decba
4
- data.tar.gz: 31d8b0704edd9bf86756ebe3ca481226e12f1c73
3
+ metadata.gz: d8e0e90a36ecac6502638dc45f8e6ccc9a125996
4
+ data.tar.gz: fb02ee2c512d39ec402912eb7068d1a58dbce6e0
5
5
  SHA512:
6
- metadata.gz: 906de34660db373299b9e779a770c67a7192b209927050f4743f4b58510df4e4be9c8f51c13a4db2b3b1a8b6c89628f6fee087526cbd31b51071bfcd78500539
7
- data.tar.gz: fd378bbdf3479319c9d8b0a5e1aa53384551eef44b7c9c6ed746397c4114d3efb78c25f14711d5221194ae19bf44c5d450a3a882b8b30ea6516061b44b9d7884
6
+ metadata.gz: 20709714238a4e6be95896009c24bdca8a638a4f0b09c12e52b55970da48bce30b4c372d5df9dcb527dee6a89fe0a119d30a28cc0e6c3535ca4591afefdaf9f5
7
+ data.tar.gz: 6b62752acaf443cba4740817be6f494feb5794a0d3254d193872d86dc9d1b141fd8a9c3a2171bb89c2aca34edbdb1439acd261caa0aa84e7d23bd045c65128a7
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Hanami::Assets
2
2
  Assets management for Ruby web applications
3
3
 
4
+ ## v0.4.0 - 2016-11-15
5
+ ### Fixed
6
+ - [Luca Guidi] Ensure `NullManifest` to be pretty printable
7
+
8
+ ### Changed
9
+ - [Luca Guidi] Official support for Ruby: MRI 2.3+ and JRuby 9.1.5.0+
10
+ - [Sean Collins] Rename digest into fingerprint
11
+
4
12
  ## v0.3.0 - 2016-07-22
5
13
  ### Added
6
14
  - [Matthew Gibbons & Sean Collins] Subresource Integrity (SRI)
data/README.md CHANGED
@@ -25,7 +25,7 @@ Assets management for Ruby web projects
25
25
 
26
26
  ## Rubies
27
27
 
28
- __Hanami::Assets__ supports Ruby (MRI) 2.2+
28
+ __Hanami::Assets__ supports Ruby (MRI) 2.3+ and JRuby 9.1.5.0+
29
29
 
30
30
  ## Installation
31
31
 
@@ -372,19 +372,19 @@ Hanami::Assets.configure do
372
372
  end
373
373
  ```
374
374
 
375
- ### Digest Mode
375
+ ### Fingerprint Mode
376
376
 
377
377
  This is a mode that can be activated via configuration and it's suitable for production environments.
378
- When generating files, it adds a string to the end of each file name, which is a cachesum of its contents.
378
+ When generating files, it adds a string to the end of each file name, which is a [checksum](https://en.wikipedia.org/wiki/Checksum) of its contents.
379
379
  This lets you leverage caching while still ensuring that clients get the most up-to-date assets (this is known as *cache busting*).
380
380
 
381
381
  ```ruby
382
382
  Hanami::Assets.configure do
383
- digest true
383
+ fingerprint true
384
384
  end
385
385
  ```
386
386
 
387
- Once turned on, it will look at `/public/assets.json`, and helpers such as `javascript` will return a relative URL that includes the digest of the asset.
387
+ Once turned on, it will look at `/public/assets.json`, and helpers such as `javascript` will return a relative URL that includes the fingerprint of the asset.
388
388
 
389
389
  ```erb
390
390
  <%= javascript 'application' %>
@@ -17,10 +17,10 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
- spec.required_ruby_version = '>= 2.2.0'
20
+ spec.required_ruby_version = '>= 2.3.0'
21
21
 
22
- spec.add_runtime_dependency 'hanami-utils', '~> 0.8'
23
- spec.add_runtime_dependency 'hanami-helpers', '~> 0.4'
22
+ spec.add_runtime_dependency 'hanami-utils', '~> 0.9'
23
+ spec.add_runtime_dependency 'hanami-helpers', '~> 0.5'
24
24
  spec.add_runtime_dependency 'tilt', '~> 2.0', '>= 2.0.2'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.6'
data/lib/hanami/assets.rb CHANGED
@@ -53,6 +53,17 @@ module Hanami
53
53
  Bundler.new(configuration, duplicates).run
54
54
  end
55
55
 
56
+ # Precompile assets
57
+ #
58
+ # @since 0.4.0
59
+ def self.precompile(configurations)
60
+ require 'hanami/assets/precompiler'
61
+ require 'hanami/assets/bundler'
62
+
63
+ Precompiler.new(configuration, configurations).run
64
+ Bundler.new(configuration, configurations).run
65
+ end
66
+
56
67
  # Preload the framework
57
68
  #
58
69
  # This MUST be used in production mode
@@ -38,11 +38,7 @@ module Hanami
38
38
  def initialize(configuration, duplicates)
39
39
  @manifest = Hash[]
40
40
  @configuration = configuration
41
- @configurations = if duplicates.empty?
42
- [@configuration]
43
- else
44
- duplicates.map(&:configuration)
45
- end
41
+ @duplicates = duplicates
46
42
  end
47
43
 
48
44
  # Start the process.
@@ -50,12 +46,12 @@ module Hanami
50
46
  # For each asset contained in the sources and third party gems, it will:
51
47
  #
52
48
  # * Compress
53
- # * Create a checksum version
54
- # * Generate an integrity digest
49
+ # * Create a fingerprinted version of the file
50
+ # * Generate a subresource integrity digest
55
51
  #
56
- # At the end it will generate a digest manifest
52
+ # At the end it will generate a manifest
57
53
  #
58
- # @see Hanami::Assets::Configuration#digest
54
+ # @see Hanami::Assets::Configuration#fingerprint
59
55
  # @see Hanami::Assets::Configuration#manifest
60
56
  # @see Hanami::Assets::Configuration#manifest_path
61
57
  def run
@@ -132,7 +128,7 @@ module Hanami
132
128
  def _configuration_for(asset)
133
129
  url = _convert_to_url(asset)
134
130
 
135
- @configurations.find { |config| url.start_with?(config.prefix) } ||
131
+ configurations.find { |config| url.start_with?(config.prefix) } ||
136
132
  @configuration
137
133
  end
138
134
 
@@ -141,6 +137,16 @@ module Hanami
141
137
  def public_directory
142
138
  @configuration.public_directory
143
139
  end
140
+
141
+ # @since 0.4.0
142
+ # @api private
143
+ def configurations
144
+ if @duplicates.empty?
145
+ [@configuration]
146
+ else
147
+ @duplicates.map { |dup| dup.respond_to?(:configuration) ? dup.configuration : dup }
148
+ end
149
+ end
144
150
  end
145
151
  end
146
152
  end
@@ -1,22 +1,22 @@
1
1
  module Hanami
2
2
  module Assets
3
3
  # This error is raised when the application starts but can't be load the
4
- # digest manifest.
4
+ # manifest file.
5
5
  #
6
6
  # @since 0.1.0
7
7
  # @api private
8
- class MissingDigestManifestError < Error
8
+ class MissingManifestFileError < Error
9
9
  def initialize(path)
10
10
  super("Can't read manifest: #{path}")
11
11
  end
12
12
  end
13
13
 
14
14
  # This error is raised when an asset is referenced from the DOM, but it's
15
- # not present in the digest manifest
15
+ # not present in the manifest
16
16
  #
17
17
  # @since 0.1.0
18
18
  # @api private
19
- class MissingDigestAssetError < Error
19
+ class MissingManifestAssetError < Error
20
20
  def initialize(asset, manifest_path)
21
21
  super("Can't find asset `#{asset}' in manifest (#{manifest_path})")
22
22
  end
@@ -27,29 +27,29 @@ module Hanami
27
27
  # @since 0.1.0
28
28
  # @api private
29
29
  module Config
30
- # Default value for configuration's digest manifest.
30
+ # Default value for configuration's manifest.
31
31
  #
32
- # It indicates that the digest manifest wasn't loaded yet.
32
+ # It indicates that the manifest wasn't loaded yet.
33
33
  #
34
34
  # At the load time, this should be replaced by an instance of
35
35
  # <tt>Hanami::Assets::Config::Manifest</tt>.
36
36
  #
37
37
  # If for some reason that won't happen, the instance of this class is
38
38
  # still referenced by the configuration and all the method invocations
39
- # will raise a <tt>Hanami::Assets::MissingDigestManifestError</tt>.
39
+ # will raise a <tt>Hanami::Assets::MissingManifestFileError</tt>.
40
40
  #
41
41
  # @since 0.1.0
42
42
  # @api private
43
43
  #
44
44
  # @see Hanami::Assets::Configuration#manifest
45
45
  # @see Hanami::Assets::Configuration#manifest_path
46
- # @see Hanami::Assets::Configuration#digest
47
- class NullDigestManifest < Utils::BasicObject
46
+ # @see Hanami::Assets::Configuration#fingerprint
47
+ class NullManifest < Utils::BasicObject
48
48
  # Return a new instance
49
49
  #
50
50
  # @param configuration [Hanami::Assets::Configuration]
51
51
  #
52
- # @return [Hanami::Assets::Config::NullDigestManifest] a new instance
52
+ # @return [Hanami::Assets::Config::NullManifest] a new instance
53
53
  #
54
54
  # @since 0.1.0
55
55
  # @api private
@@ -57,23 +57,23 @@ module Hanami
57
57
  @configuration = configuration
58
58
  end
59
59
 
60
- # @raise [Hanami::Assets::MissingDigestManifestError]
60
+ # @raise [Hanami::Assets::MissingManifestFileError]
61
61
  #
62
62
  # @since 0.1.0
63
63
  # @api private
64
64
  def method_missing(*)
65
65
  ::Kernel.raise(
66
- ::Hanami::Assets::MissingDigestManifestError.new(@configuration.manifest_path)
66
+ ::Hanami::Assets::MissingManifestFileError.new(@configuration.manifest_path)
67
67
  )
68
68
  end
69
69
  end
70
70
 
71
- # Digest manifest
71
+ # Manifest file
72
72
  #
73
73
  # @since 0.1.0
74
74
  # @api private
75
- class DigestManifest
76
- # @since 0.3.0
75
+ class Manifest
76
+ # @since 0.4.0
77
77
  # @api private
78
78
  TARGET = 'target'.freeze
79
79
 
@@ -83,8 +83,8 @@ module Hanami
83
83
 
84
84
  # Return a new instance
85
85
  #
86
- # @param assets [Hash] the content of the digest manifest
87
- # @param manifest_path [Pathname] the path to the digest manifest
86
+ # @param assets [Hash] the content of the manifest
87
+ # @param manifest_path [Pathname] the path to the manifest
88
88
  #
89
89
  # @return [Hanami::Assets::Config::Manifest] a new instance
90
90
  #
@@ -98,20 +98,20 @@ module Hanami
98
98
  @manifest_path = manifest_path
99
99
  end
100
100
 
101
- # Resolve the given asset into a digest path
101
+ # Resolve the given asset into a fingerprinted path
102
102
  #
103
103
  # For a given path <tt>/assets/application.js</tt> it will return
104
104
  # <tt>/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js</tt>
105
105
  #
106
106
  # @param asset [#to_s] the relative asset path
107
107
  #
108
- # @return [String] the digest path
108
+ # @return [String] the fingerprinted path
109
109
  #
110
- # @raise [Hanami::Assets::MissingDigestAssetError] when the asset can't be
110
+ # @raise [Hanami::Assets::MissingManifestAssetError] when the asset can't be
111
111
  # found in manifest
112
112
  def resolve(asset)
113
113
  @assets.fetch(asset.to_s) do
114
- raise Hanami::Assets::MissingDigestAssetError.new(asset, @manifest_path)
114
+ raise Hanami::Assets::MissingManifestAssetError.new(asset, @manifest_path)
115
115
  end
116
116
  end
117
117
 
@@ -86,9 +86,9 @@ module Hanami
86
86
  framework.configuration
87
87
  end
88
88
 
89
- # @since 0.1.0
89
+ # @since 0.4.0
90
90
  # @api private
91
- attr_reader :digest_manifest
91
+ attr_reader :public_manifest
92
92
 
93
93
  # Return a new instance
94
94
  #
@@ -96,8 +96,9 @@ module Hanami
96
96
  #
97
97
  # @since 0.1.0
98
98
  # @api private
99
- def initialize
99
+ def initialize(&blk)
100
100
  reset!
101
+ instance_eval(&blk) if block_given?
101
102
  end
102
103
 
103
104
  # Compile mode
@@ -114,17 +115,17 @@ module Hanami
114
115
  end
115
116
  end
116
117
 
117
- # Digest mode
118
+ # Fingerprint mode
118
119
  #
119
- # Determine if the helpers should generate the digest path for an asset.
120
+ # Determine if the helpers should generate the fingerprinted path for an asset.
120
121
  # Usually this is turned on in production mode.
121
122
  #
122
123
  # @since 0.1.0
123
- def digest(value = nil)
124
+ def fingerprint(value = nil)
124
125
  if value.nil?
125
- @digest
126
+ @fingerprint
126
127
  else
127
- @digest = value
128
+ @fingerprint = value
128
129
  end
129
130
  end
130
131
 
@@ -411,8 +412,8 @@ module Hanami
411
412
  "#{@base_url}#{compile_path(source)}"
412
413
  end
413
414
 
414
- # An array of digest algorithms to use for generating asset subresource
415
- # integrity checks
415
+ # An array of crypographically secure hashing algorithms to use for
416
+ # generating asset subresource integrity checks
416
417
  #
417
418
  # @since 0.3.0
418
419
  def subresource_integrity_algorithms
@@ -430,11 +431,11 @@ module Hanami
430
431
  # @since 0.3.0
431
432
  # @api private
432
433
  def subresource_integrity_value(source)
433
- if subresource_integrity
434
- digest_manifest.subresource_integrity_values(
435
- prefix.join(source)
436
- ).join(SUBRESOURCE_INTEGRITY_SEPARATOR)
437
- end
434
+ return unless subresource_integrity
435
+
436
+ public_manifest.subresource_integrity_values(
437
+ prefix.join(source)
438
+ ).join(SUBRESOURCE_INTEGRITY_SEPARATOR)
438
439
  end
439
440
 
440
441
  # Load Javascript compressor
@@ -501,11 +502,11 @@ module Hanami
501
502
  @prefix = Utils::PathPrefix.new(DEFAULT_PREFIX)
502
503
  @subresource_integrity = false
503
504
  @cdn = false
504
- @digest = false
505
+ @fingerprint = false
505
506
  @compile = false
506
507
  @base_url = nil
507
508
  @destination_directory = nil
508
- @digest_manifest = Config::NullDigestManifest.new(self)
509
+ @public_manifest = Config::NullManifest.new(self)
509
510
 
510
511
  @javascript_compressor = nil
511
512
  @stylesheet_compressor = nil
@@ -521,9 +522,9 @@ module Hanami
521
522
  #
522
523
  # @since 0.1.0
523
524
  def load!
524
- if (digest || subresource_integrity) && manifest_path.exist?
525
- @digest_manifest = Config::DigestManifest.new(
526
- JSON.load(manifest_path.read),
525
+ if (fingerprint || subresource_integrity) && manifest_path.exist?
526
+ @public_manifest = Config::Manifest.new(
527
+ JSON.parse(manifest_path.read),
527
528
  manifest_path
528
529
  )
529
530
  end
@@ -591,7 +592,7 @@ module Hanami
591
592
  # @api private
592
593
  def compile_path(source)
593
594
  result = prefix.join(source)
594
- result = digest_manifest.target(result) if digest
595
+ result = public_manifest.target(result) if fingerprint
595
596
  result.to_s
596
597
  end
597
598
 
@@ -84,22 +84,27 @@ module Hanami
84
84
  # comes from the application or third party gems. It also accepts strings
85
85
  # representing absolute URLs in case of public CDN (eg. jQuery CDN).
86
86
  #
87
- # If the "digest mode" is on, <tt>src</tt> is the digest version of the
88
- # relative URL.
87
+ # If the "fingerprint mode" is on, <tt>src</tt> is the fingerprinted
88
+ # version of the relative URL.
89
89
  #
90
90
  # If the "CDN mode" is on, the <tt>src</tt> is an absolute URL of the
91
91
  # application CDN.
92
92
  #
93
+ # If the "subresource integrity mode" is on, <tt>integriy</tt> is the
94
+ # name of the algorithm, then a hyphen, then the hash value of the file.
95
+ # If more than one algorithm is used, they'll be separated by a space.
96
+ #
93
97
  # @param sources [Array<String>] one or more assets by name or absolute URL
94
98
  #
95
99
  # @return [Hanami::Utils::Escape::SafeString] the markup
96
100
  #
97
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
98
- # at least one of the given sources is missing from the manifest
101
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
102
+ # `subresource_integrity` modes are on and the javascript file is missing
103
+ # from the manifest
99
104
  #
100
105
  # @since 0.1.0
101
106
  #
102
- # @see Hanami::Assets::Configuration#digest
107
+ # @see Hanami::Assets::Configuration#fingerprint
103
108
  # @see Hanami::Assets::Configuration#cdn
104
109
  # @see Hanami::Assets::Helpers#asset_path
105
110
  #
@@ -146,7 +151,7 @@ module Hanami
146
151
  #
147
152
  # # <script src="https://code.jquery.com/jquery-2.1.4.min.js" type="text/javascript"></script>
148
153
  #
149
- # @example Digest Mode
154
+ # @example Fingerprint Mode
150
155
  #
151
156
  # <%= javascript 'application' %>
152
157
  #
@@ -178,23 +183,28 @@ module Hanami
178
183
  # comes from the application or third party gems. It also accepts strings
179
184
  # representing absolute URLs in case of public CDN (eg. Bootstrap CDN).
180
185
  #
181
- # If the "digest mode" is on, <tt>href</tt> is the digest version of the
182
- # relative URL.
186
+ # If the "fingerprint mode" is on, <tt>href</tt> is the fingerprinted
187
+ # version of the relative URL.
183
188
  #
184
189
  # If the "CDN mode" is on, the <tt>href</tt> is an absolute URL of the
185
190
  # application CDN.
186
191
  #
192
+ # If the "subresource integrity mode" is on, <tt>integriy</tt> is the
193
+ # name of the algorithm, then a hyphen, then the hashed value of the file.
194
+ # If more than one algorithm is used, they'll be separated by a space.
187
195
  # @param sources [Array<String>] one or more assets by name or absolute URL
188
196
  #
189
197
  # @return [Hanami::Utils::Escape::SafeString] the markup
190
198
  #
191
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
192
- # at least one of the given sources is missing from the manifest
199
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
200
+ # `subresource_integrity` modes are on and the stylesheet file is missing
201
+ # from the manifest
193
202
  #
194
203
  # @since 0.1.0
195
204
  #
196
- # @see Hanami::Assets::Configuration#digest
205
+ # @see Hanami::Assets::Configuration#fingerprint
197
206
  # @see Hanami::Assets::Configuration#cdn
207
+ # @see Hanami::Assets::Configuration#subresource_integrity
198
208
  # @see Hanami::Assets::Helpers#asset_path
199
209
  #
200
210
  # @example Single Asset
@@ -228,7 +238,7 @@ module Hanami
228
238
  #
229
239
  # # <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css" rel="stylesheet">
230
240
  #
231
- # @example Digest Mode
241
+ # @example Fingerprint Mode
232
242
  #
233
243
  # <%= stylesheet 'application' %>
234
244
  #
@@ -264,8 +274,8 @@ module Hanami
264
274
  # <tt>alt</tt> Attribute is auto generated from <tt>src</tt>.
265
275
  # You can specify a different value, by passing the <tt>:src</tt> option.
266
276
  #
267
- # If the "digest mode" is on, <tt>src</tt> is the digest version of the
268
- # relative URL.
277
+ # If the "fingerprint mode" is on, <tt>src</tt> is the fingerprinted
278
+ # version of the relative URL.
269
279
  #
270
280
  # If the "CDN mode" is on, the <tt>src</tt> is an absolute URL of the
271
281
  # application CDN.
@@ -274,13 +284,15 @@ module Hanami
274
284
  #
275
285
  # @return [Hanami::Utils::Helpers::HtmlBuilder] the builder
276
286
  #
277
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
278
- # the image is missing from the manifest
287
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
288
+ # `subresource_integrity` modes are on and the image file is missing
289
+ # from the manifest
279
290
  #
280
291
  # @since 0.1.0
281
292
  #
282
- # @see Hanami::Assets::Configuration#digest
293
+ # @see Hanami::Assets::Configuration#fingerprint
283
294
  # @see Hanami::Assets::Configuration#cdn
295
+ # @see Hanami::Assets::Configuration#subresource_integrity
284
296
  # @see Hanami::Assets::Helpers#asset_path
285
297
  #
286
298
  # @example Basic Usage
@@ -307,7 +319,7 @@ module Hanami
307
319
  #
308
320
  # # <img src="https://example-cdn.com/images/logo.png" alt="Logo">
309
321
  #
310
- # @example Digest Mode
322
+ # @example Fingerprint Mode
311
323
  #
312
324
  # <%= image 'logo.png' %>
313
325
  #
@@ -331,8 +343,8 @@ module Hanami
331
343
  #
332
344
  # It accepts one string representing the name of the asset.
333
345
  #
334
- # If the "digest mode" is on, <tt>href</tt> is the digest version of the
335
- # relative URL.
346
+ # If the "fingerprint mode" is on, <tt>href</tt> is the fingerprinted version
347
+ # of the relative URL.
336
348
  #
337
349
  # If the "CDN mode" is on, the <tt>href</tt> is an absolute URL of the
338
350
  # application CDN.
@@ -341,12 +353,13 @@ module Hanami
341
353
  #
342
354
  # @return [Hanami::Utils::Helpers::HtmlBuilder] the builder
343
355
  #
344
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
345
- # the favicon is missing from the manifest
356
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
357
+ # `subresource_integrity` modes are on and the favicon is file missing
358
+ # from the manifest
346
359
  #
347
360
  # @since 0.1.0
348
361
  #
349
- # @see Hanami::Assets::Configuration#digest
362
+ # @see Hanami::Assets::Configuration#fingerprint
350
363
  # @see Hanami::Assets::Configuration#cdn
351
364
  # @see Hanami::Assets::Helpers#asset_path
352
365
  #
@@ -368,7 +381,7 @@ module Hanami
368
381
  #
369
382
  # # <link id: "fav" href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">
370
383
  #
371
- # @example Digest Mode
384
+ # @example Fingerprint Mode
372
385
  #
373
386
  # <%= favicon %>
374
387
  #
@@ -396,8 +409,8 @@ module Hanami
396
409
  # Alternatively, it accepts a block that allows to specify one or more
397
410
  # sources via the <tt>source</tt> tag.
398
411
  #
399
- # If the "digest mode" is on, <tt>src</tt> is the digest version of the
400
- # relative URL.
412
+ # If the "fingerprint mode" is on, <tt>src</tt> is the fingerprinted
413
+ # version of the relative URL.
401
414
  #
402
415
  # If the "CDN mode" is on, the <tt>src</tt> is an absolute URL of the
403
416
  # application CDN.
@@ -406,15 +419,16 @@ module Hanami
406
419
  #
407
420
  # @return [Hanami::Utils::Helpers::HtmlBuilder] the builder
408
421
  #
409
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
410
- # the image is missing from the manifest
422
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
423
+ # `subresource_integrity` modes are on and the video file is missing
424
+ # from the manifest
411
425
  #
412
426
  # @raise [ArgumentError] if source isn't specified both as argument or
413
427
  # tag inside the given block
414
428
  #
415
429
  # @since 0.1.0
416
430
  #
417
- # @see Hanami::Assets::Configuration#digest
431
+ # @see Hanami::Assets::Configuration#fingerprint
418
432
  # @see Hanami::Assets::Configuration#cdn
419
433
  # @see Hanami::Assets::Helpers#asset_path
420
434
  #
@@ -489,7 +503,7 @@ module Hanami
489
503
  #
490
504
  # # ArgumentError
491
505
  #
492
- # @example Digest Mode
506
+ # @example Fingerprint Mode
493
507
  #
494
508
  # <%= video 'movie.mp4' %>
495
509
  #
@@ -514,8 +528,8 @@ module Hanami
514
528
  # Alternatively, it accepts a block that allows to specify one or more
515
529
  # sources via the <tt>source</tt> tag.
516
530
  #
517
- # If the "digest mode" is on, <tt>src</tt> is the digest version of the
518
- # relative URL.
531
+ # If the "fingerprint mode" is on, <tt>src</tt> is the fingerprinted
532
+ # version of the relative URL.
519
533
  #
520
534
  # If the "CDN mode" is on, the <tt>src</tt> is an absolute URL of the
521
535
  # application CDN.
@@ -524,15 +538,16 @@ module Hanami
524
538
  #
525
539
  # @return [Hanami::Utils::Helpers::HtmlBuilder] the builder
526
540
  #
527
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
528
- # the image is missing from the manifest
541
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
542
+ # `subresource_integrity` modes are on and the audio file is missing
543
+ # from the manifest
529
544
  #
530
545
  # @raise [ArgumentError] if source isn't specified both as argument or
531
546
  # tag inside the given block
532
547
  #
533
548
  # @since 0.1.0
534
549
  #
535
- # @see Hanami::Assets::Configuration#digest
550
+ # @see Hanami::Assets::Configuration#fingerprint
536
551
  # @see Hanami::Assets::Configuration#cdn
537
552
  # @see Hanami::Assets::Helpers#asset_path
538
553
  #
@@ -607,7 +622,7 @@ module Hanami
607
622
  #
608
623
  # # ArgumentError
609
624
  #
610
- # @example Digest Mode
625
+ # @example Fingerprint Mode
611
626
  #
612
627
  # <%= audio 'song.ogg' %>
613
628
  #
@@ -630,7 +645,7 @@ module Hanami
630
645
  #
631
646
  # Absolute URLs are returned as they are.
632
647
  #
633
- # If Digest mode is on, it returns the digest path of the source
648
+ # If Fingerprint mode is on, it returns the fingerprinted path of the source
634
649
  #
635
650
  # If CDN mode is on, it returns the absolute URL of the asset.
636
651
  #
@@ -638,8 +653,9 @@ module Hanami
638
653
  #
639
654
  # @return [String] the asset path
640
655
  #
641
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
642
- # the asset is missing from the manifest
656
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
657
+ # `subresource_integrity` modes are on and the asset is missing
658
+ # from the manifest
643
659
  #
644
660
  # @since 0.1.0
645
661
  #
@@ -655,7 +671,7 @@ module Hanami
655
671
  #
656
672
  # # "https://code.jquery.com/jquery-2.1.4.min.js"
657
673
  #
658
- # @example Digest Mode
674
+ # @example Fingerprint Mode
659
675
  #
660
676
  # <%= asset_path 'application.js' %>
661
677
  #
@@ -677,7 +693,7 @@ module Hanami
677
693
  #
678
694
  # Absolute URLs are returned as they are.
679
695
  #
680
- # If Digest mode is on, it returns the digest URL of the source
696
+ # If Fingerprint mode is on, it returns the fingerprint URL of the source
681
697
  #
682
698
  # If CDN mode is on, it returns the absolute URL of the asset.
683
699
  #
@@ -685,8 +701,9 @@ module Hanami
685
701
  #
686
702
  # @return [String] the asset URL
687
703
  #
688
- # @raise [Hanami::Assets::MissingDigestAssetError] if digest mode is on and
689
- # the asset is missing from the manifest
704
+ # @raise [Hanami::Assets::MissingManifestAssetError] if `fingerprint` or
705
+ # `subresource_integrity` modes are on and the asset is missing
706
+ # from the manifest
690
707
  #
691
708
  # @since 0.1.0
692
709
  #
@@ -702,7 +719,7 @@ module Hanami
702
719
  #
703
720
  # # "https://code.jquery.com/jquery-2.1.4.min.js"
704
721
  #
705
- # @example Digest Mode
722
+ # @example Fingerprint Mode
706
723
  #
707
724
  # <%= asset_url 'application.js' %>
708
725
  #
@@ -47,7 +47,7 @@ module Hanami
47
47
  # @since 0.3.0
48
48
  # @api private
49
49
  def clear_manifest(manifest)
50
- JSON.load(manifest).each do |_, asset_hash|
50
+ JSON.parse(manifest).each do |_, asset_hash|
51
51
  asset_file_name = @configuration.public_directory.join(asset_hash['target'])
52
52
  asset_file_name.unlink if asset_file_name.exist?
53
53
  end
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '0.3.0'.freeze
6
+ VERSION = '0.4.0'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-07-22 00:00:00.000000000 Z
13
+ date: 2016-11-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hanami-utils
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '0.8'
21
+ version: '0.9'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '0.8'
28
+ version: '0.9'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: hanami-helpers
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '0.4'
35
+ version: '0.5'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '0.4'
42
+ version: '0.5'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: tilt
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -241,7 +241,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
241
241
  requirements:
242
242
  - - ">="
243
243
  - !ruby/object:Gem::Version
244
- version: 2.2.0
244
+ version: 2.3.0
245
245
  required_rubygems_version: !ruby/object:Gem::Requirement
246
246
  requirements:
247
247
  - - ">="