rails-assets-manifest 1.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +61 -0
- data/.gitignore +2 -0
- data/.rspec +2 -1
- data/.rubocop.yml +10 -173
- data/Appraisals +17 -0
- data/CHANGELOG.md +47 -0
- data/Gemfile +11 -1
- data/README.md +11 -5
- data/bin/console +1 -0
- data/gemfiles/rails_5.2.gemfile +16 -0
- data/gemfiles/rails_6.0.gemfile +16 -0
- data/gemfiles/rails_6.1.gemfile +16 -0
- data/gemfiles/rails_master.gemfile +16 -0
- data/lib/rails/assets/manifest.rb +18 -3
- data/lib/rails/assets/manifest/helper.rb +53 -17
- data/lib/rails/assets/manifest/manifest.rb +25 -13
- data/lib/rails/assets/manifest/railtie.rb +17 -20
- data/lib/rails/assets/manifest/version.rb +3 -3
- data/renovate.json +3 -0
- metadata +10 -9
- data/.travis.yml +0 -37
- data/gemfiles/rails-4-2.gemfile +0 -9
- data/gemfiles/rails-5-0.gemfile +0 -9
- data/gemfiles/rails-5-1.gemfile +0 -9
- data/gemfiles/rails-5-2.gemfile +0 -9
- data/gemfiles/rails-master.gemfile +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4486b5a02b2aea1cfdcc7afbd89a0748b6f746476175335a9af1d22afb0d4ffa
|
4
|
+
data.tar.gz: e2007d8ac77c1183d5d5f598b1b6442ec09abe36b139c93c5a693330ffc41001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db93bb819d42cbb4771404d560d50c37c4cd97fe4cfabdf764a5b0efc49ccfc0bf6a1f644bc46204a4cabfb2bdbf6d77ddf100105a0231f796f41f0b940b1bf2
|
7
|
+
data.tar.gz: be4ebdfe6625038294029a2bf2916dff4488184716a69fcb8e7f18fc4db9375953ab501bdea59f933b4d6e1ca3357235b71544b4a236ebe239956a4ec07793f6
|
@@ -0,0 +1,61 @@
|
|
1
|
+
---
|
2
|
+
name: test
|
3
|
+
on: push
|
4
|
+
jobs:
|
5
|
+
rspec:
|
6
|
+
name: "Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}"
|
7
|
+
runs-on: ubuntu-20.04
|
8
|
+
|
9
|
+
strategy:
|
10
|
+
fail-fast: false
|
11
|
+
matrix:
|
12
|
+
ruby:
|
13
|
+
- "3.0"
|
14
|
+
- "2.7"
|
15
|
+
- "2.6"
|
16
|
+
- "2.5"
|
17
|
+
rails:
|
18
|
+
- "6.1"
|
19
|
+
- "6.0"
|
20
|
+
- "5.2"
|
21
|
+
- master
|
22
|
+
exclude:
|
23
|
+
- ruby: "3.0"
|
24
|
+
rails: "5.2"
|
25
|
+
- ruby: "2.6"
|
26
|
+
rails: master
|
27
|
+
- ruby: "2.5"
|
28
|
+
rails: master
|
29
|
+
|
30
|
+
env:
|
31
|
+
BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gemfile
|
32
|
+
|
33
|
+
steps:
|
34
|
+
- uses: actions/checkout@master
|
35
|
+
- uses: ruby/setup-ruby@v1
|
36
|
+
with:
|
37
|
+
ruby-version: ${{ matrix.ruby }}
|
38
|
+
bundler-cache: true
|
39
|
+
env:
|
40
|
+
BUNDLE_WITHOUT: development
|
41
|
+
BUNDLE_JOBS: 4
|
42
|
+
BUNDLE_RETRY: 3
|
43
|
+
|
44
|
+
- run: bundle exec rspec --color
|
45
|
+
|
46
|
+
rubocop:
|
47
|
+
name: rubocop
|
48
|
+
runs-on: ubuntu-20.04
|
49
|
+
|
50
|
+
steps:
|
51
|
+
- uses: actions/checkout@master
|
52
|
+
- uses: ruby/setup-ruby@v1
|
53
|
+
with:
|
54
|
+
ruby-version: 3.0
|
55
|
+
bundler-cache: true
|
56
|
+
env:
|
57
|
+
BUNDLE_WITHOUT: development
|
58
|
+
BUNDLE_JOBS: 4
|
59
|
+
BUNDLE_RETRY: 3
|
60
|
+
|
61
|
+
- run: bundle exec rubocop --parallel --fail-level E
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,106 +1,18 @@
|
|
1
|
-
require:
|
2
|
-
- rubocop-rspec
|
3
|
-
|
4
1
|
AllCops:
|
5
|
-
Exclude:
|
6
|
-
- 'bin/**'
|
7
|
-
- 'config/initializers/integration*'
|
8
|
-
- 'db/schema.rb'
|
9
|
-
- 'vendor/**'
|
10
|
-
TargetRubyVersion: 2.5
|
11
|
-
TargetRailsVersion: 5.2
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# -----------------------------------------------------------------------------
|
16
|
-
# RAILS
|
17
|
-
|
18
|
-
Rails:
|
19
|
-
Enabled: true
|
20
|
-
|
21
|
-
#
|
22
|
-
# False positives:
|
23
|
-
# * On Acfs::Resource#update_attriubutes!
|
24
|
-
#
|
25
|
-
Rails/ActiveRecordAliases:
|
26
|
-
Exclude:
|
27
|
-
- spec/**/*_spec.rb
|
28
|
-
|
29
|
-
#
|
30
|
-
# False positives:
|
31
|
-
# * On embedded models in migrations.
|
32
|
-
#
|
33
|
-
Rails/ApplicationRecord:
|
34
|
-
Exclude:
|
35
|
-
- 'db/**/*'
|
36
|
-
|
37
|
-
#
|
38
|
-
# Often when triggered it just wants to pass joined paths as separate
|
39
|
-
# arguments but that can hurt readability.
|
40
|
-
#
|
41
|
-
Rails/FilePath:
|
42
|
-
Enabled: false
|
43
|
-
|
44
|
-
#
|
45
|
-
# False positives:
|
46
|
-
# * Specs and migrations often need to update things without validations.
|
47
|
-
#
|
48
|
-
Rails/SkipsModelValidations:
|
49
|
-
Exclude:
|
50
|
-
- 'db/migrations/**.rb'
|
51
|
-
- 'spec/**/*_spec.rb'
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
# -----------------------------------------------------------------------------
|
56
|
-
# RSPEC
|
57
|
-
|
58
|
-
RSpec:
|
59
2
|
Include:
|
60
|
-
- '
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
RSpec/ContextWording:
|
65
|
-
Enabled: false
|
66
|
-
|
67
|
-
RSpec/ExampleLength:
|
68
|
-
Enabled: false
|
69
|
-
|
70
|
-
RSpec/ExpectInHook:
|
71
|
-
Enabled: false
|
72
|
-
|
73
|
-
RSpec/FilePath:
|
74
|
-
Exclude:
|
75
|
-
- 'spec/client/**/*_spec.rb'
|
76
|
-
|
77
|
-
RSpec/MessageSpies:
|
78
|
-
Enabled: false
|
79
|
-
|
80
|
-
RSpec/MissingExampleGroupArgument:
|
81
|
-
Enabled: false
|
82
|
-
|
83
|
-
RSpec/MultipleExpectations:
|
84
|
-
Enabled: false
|
85
|
-
|
86
|
-
RSpec/NestedGroups:
|
87
|
-
Max: 5
|
88
|
-
|
89
|
-
# -----------------------------------------------------------------------------
|
90
|
-
# Layout
|
91
|
-
|
92
|
-
Layout/AlignParameters:
|
93
|
-
EnforcedStyle: with_fixed_indentation
|
3
|
+
- '**/*.rb'
|
4
|
+
TargetRubyVersion: 2.5
|
5
|
+
NewCops: enable
|
94
6
|
|
95
7
|
Layout/CaseIndentation:
|
96
8
|
EnforcedStyle: end
|
9
|
+
IndentOneStep: true
|
97
10
|
SupportedStyles:
|
98
11
|
- case
|
99
12
|
- end
|
100
|
-
IndentOneStep: true
|
101
13
|
|
102
|
-
Layout/
|
103
|
-
EnforcedStyle:
|
14
|
+
Layout/ArgumentAlignment:
|
15
|
+
EnforcedStyle: with_fixed_indentation
|
104
16
|
|
105
17
|
Layout/SpaceInsideBlockBraces:
|
106
18
|
EnforcedStyle: space
|
@@ -111,101 +23,26 @@ Layout/SpaceInsideHashLiteralBraces:
|
|
111
23
|
EnforcedStyle: no_space
|
112
24
|
|
113
25
|
|
114
|
-
|
115
|
-
# -----------------------------------------------------------------------------
|
116
|
-
# Lint
|
117
|
-
|
118
|
-
#
|
119
|
-
# False positives:
|
120
|
-
# * expect { something }.to change { something } often triggers this
|
121
|
-
#
|
122
|
-
Lint/AmbiguousBlockAssociation:
|
123
|
-
Exclude:
|
124
|
-
- 'spec/**/*_spec.rb'
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
# -----------------------------------------------------------------------------
|
129
|
-
# Metrics
|
130
|
-
|
131
26
|
Metrics/BlockLength:
|
132
27
|
Exclude:
|
133
|
-
-
|
134
|
-
- 'spec/**/*'
|
135
|
-
- 'config/**/*'
|
136
|
-
- '**/*.rake'
|
137
|
-
|
138
|
-
Metrics/ClassLength:
|
139
|
-
Max: 200
|
28
|
+
- spec/**/*_spec.rb
|
140
29
|
|
141
30
|
Metrics/LineLength:
|
142
31
|
Exclude:
|
143
|
-
-
|
144
|
-
- 'spec/**/*'
|
145
|
-
- 'config/**/*'
|
146
|
-
|
147
|
-
Metrics/MethodLength:
|
148
|
-
Exclude:
|
149
|
-
- 'db/**/*'
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
# -----------------------------------------------------------------------------
|
154
|
-
# Style
|
32
|
+
- spec/**/*_spec.rb
|
155
33
|
|
156
|
-
Style/BracesAroundHashParameters:
|
157
|
-
EnforcedStyle: context_dependent
|
158
34
|
|
159
|
-
#
|
160
|
-
# Both styles or mixtures are reasonable
|
161
|
-
#
|
162
35
|
Style/ClassAndModuleChildren:
|
163
|
-
EnforcedStyle: compact
|
164
36
|
Enabled: false
|
165
37
|
|
166
|
-
#
|
167
|
-
# Would be better but unlikely...
|
168
|
-
#
|
169
38
|
Style/Documentation:
|
170
39
|
Enabled: false
|
171
40
|
|
172
|
-
#
|
173
|
-
# Scripts might include on top-level
|
174
|
-
#
|
175
|
-
Style/MixinUsage:
|
176
|
-
Exclude:
|
177
|
-
- 'scripts/**/*'
|
178
|
-
|
179
41
|
Style/RaiseArgs:
|
180
42
|
EnforcedStyle: compact
|
181
43
|
|
182
|
-
#
|
183
|
-
# Quick single line rescues in specs
|
184
|
-
#
|
185
|
-
Style/RescueModifier:
|
186
|
-
Exclude:
|
187
|
-
- 'spec/**/*_spec.rb'
|
188
|
-
|
189
|
-
#
|
190
|
-
# Quick single line rescues in specs
|
191
|
-
#
|
192
|
-
Style/RescueStandardError:
|
193
|
-
Exclude:
|
194
|
-
- 'spec/**/*_spec.rb'
|
195
|
-
|
196
|
-
#
|
197
|
-
# Often used pattern in chaining subjects in specs
|
198
|
-
#
|
199
|
-
Style/Semicolon:
|
200
|
-
Exclude:
|
201
|
-
- 'spec/**/*_spec.rb'
|
202
|
-
|
203
44
|
Style/SignalException:
|
204
45
|
EnforcedStyle: only_raise
|
205
46
|
|
206
|
-
Style/
|
207
|
-
|
208
|
-
|
209
|
-
Style/TrailingCommaInHashLiteral:
|
210
|
-
EnforcedStyleForMultiline: comma
|
211
|
-
|
47
|
+
Style/TrivialAccessors:
|
48
|
+
AllowPredicates: true
|
data/Appraisals
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
appraise 'rails-6.1' do
|
4
|
+
gem 'rails', '~> 6.1.0'
|
5
|
+
end
|
6
|
+
|
7
|
+
appraise 'rails-6.0' do
|
8
|
+
gem 'rails', '~> 6.0.0'
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise 'rails-5.2' do
|
12
|
+
gem 'rails', '~> 5.2.0'
|
13
|
+
end
|
14
|
+
|
15
|
+
appraise 'rails-master' do
|
16
|
+
gem 'rails', github: 'rails/rails'
|
17
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a Changelog](http://keepachangelog.com/).
|
5
5
|
|
6
6
|
|
7
|
+
|
7
8
|
## Unreleased
|
8
9
|
---
|
9
10
|
|
@@ -16,6 +17,52 @@ This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a Ch
|
|
16
17
|
### Breaks
|
17
18
|
|
18
19
|
|
20
|
+
## 2.1.1 - (2021-06-20)
|
21
|
+
---
|
22
|
+
|
23
|
+
### Fixes
|
24
|
+
* Super method signature for keyword arguments
|
25
|
+
|
26
|
+
|
27
|
+
## 2.1.0 - (2019-09-11)
|
28
|
+
---
|
29
|
+
|
30
|
+
### New
|
31
|
+
* Automatically add `crossorigin="anonymous"` for SRI resources
|
32
|
+
* Separate manifest caching and eager loading
|
33
|
+
|
34
|
+
### Changes
|
35
|
+
* Remove defunct onboot manifest validation (f3fe8f57)
|
36
|
+
|
37
|
+
|
38
|
+
## 2.0.1 - (2019-08-09)
|
39
|
+
---
|
40
|
+
|
41
|
+
### Fixes
|
42
|
+
* Fix check if assets option node already exists
|
43
|
+
|
44
|
+
|
45
|
+
## 2.0.0 - (2019-08-08)
|
46
|
+
---
|
47
|
+
|
48
|
+
### New
|
49
|
+
* Accept glob patterns for `manifests` option
|
50
|
+
|
51
|
+
|
52
|
+
### Breaks
|
53
|
+
* Change `manifest` configuration option into `manifests` to support multiple files
|
54
|
+
|
55
|
+
|
56
|
+
## 1.1.0 - (2019-08-08)
|
57
|
+
---
|
58
|
+
|
59
|
+
### New
|
60
|
+
* Add passthrough option to load assets from other plugins (e.g. sprockets)
|
61
|
+
|
62
|
+
### Changes
|
63
|
+
* Only default to add available integrity if asset is from the manifest
|
64
|
+
|
65
|
+
|
19
66
|
## 1.0.0 - (2019-08-07)
|
20
67
|
---
|
21
68
|
|
data/Gemfile
CHANGED
@@ -5,5 +5,15 @@ source 'https://rubygems.org'
|
|
5
5
|
# Load gem's dependencies
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem '
|
8
|
+
gem 'rails'
|
9
|
+
|
10
|
+
gem 'rake', '~> 13.0'
|
9
11
|
gem 'rspec', '~> 3.0'
|
12
|
+
gem 'rspec-rails', '~> 5.0'
|
13
|
+
gem 'rubocop', '~> 1.14'
|
14
|
+
|
15
|
+
gem 'pry'
|
16
|
+
|
17
|
+
group :development do
|
18
|
+
gem 'appraisal'
|
19
|
+
end
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ This gem does not make any assumption on which tool to use to make your assets n
|
|
17
17
|
}
|
18
18
|
```
|
19
19
|
|
20
|
-
This gem does not add new helper methods but extends the existing helpers. SRI is automatically added if available and within a secure context
|
20
|
+
This gem does not add new helper methods but extends the existing helpers. SRI is automatically added if available and within a secure context. A `crossorigin="anonymous"` attribute is automatically added if non is present.
|
21
21
|
|
22
22
|
```slim
|
23
23
|
html
|
@@ -27,8 +27,8 @@ html
|
|
27
27
|
```
|
28
28
|
|
29
29
|
```html
|
30
|
-
<link rel="stylesheet" media="all" href="2b16adf6f756625a0194.css" integrity="sha384-/oreyvcV6U6htGZD0fDWR8/Txezke8KhD0QNgHb660hSaW7M+ZzxxuB4Vo+PuAC9">
|
31
|
-
<script src="2b16adf6f756625a0194.js" integrity="sha384-iJ55fQQApbQGxWEWSbWStBabi+yNGxZSQy/010+1Dhxl+rymyhGF4NtjUkOsYv7B"></script>
|
30
|
+
<link rel="stylesheet" media="all" href="2b16adf6f756625a0194.css" integrity="sha384-/oreyvcV6U6htGZD0fDWR8/Txezke8KhD0QNgHb660hSaW7M+ZzxxuB4Vo+PuAC9" crossorigin="anonymous">
|
31
|
+
<script src="2b16adf6f756625a0194.js" integrity="sha384-iJ55fQQApbQGxWEWSbWStBabi+yNGxZSQy/010+1Dhxl+rymyhGF4NtjUkOsYv7B" crossorigin="anonymous"></script>
|
32
32
|
```
|
33
33
|
|
34
34
|
## Installation
|
@@ -44,13 +44,19 @@ gem 'rails-assets-manifest'
|
|
44
44
|
The manifest path can be configured e.g. in an environment:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
config.assets.
|
47
|
+
config.assets.manifests = %w(public/.asset-manifest.json)
|
48
48
|
```
|
49
49
|
|
50
|
-
If `config.cache_classes` is set to `true` the manifest file be loaded once on boot
|
50
|
+
If `config.cache_classes` is set to `true` the manifest file be loaded once on boot.
|
51
51
|
|
52
52
|
Assets included with `integrity: true` will raise an error if the integrity option is missing in the manifest.
|
53
53
|
|
54
|
+
Multiple manifests can be loaded by specifying multiple files. Glob patterns are supported:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
config.assets.manifests = %w(public/.manifest.*.json lib/manifest.json)
|
58
|
+
```
|
59
|
+
|
54
60
|
## TODO
|
55
61
|
|
56
62
|
* Override/Join with `asset_host` URL?
|
data/bin/console
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 5.2.0"
|
6
|
+
gem "rake", "~> 12.0"
|
7
|
+
gem "rspec", "~> 3.0"
|
8
|
+
gem "rspec-rails", "~> 5.0"
|
9
|
+
gem "rubocop", "~> 1.14"
|
10
|
+
gem "pry"
|
11
|
+
|
12
|
+
group :development do
|
13
|
+
gem "appraisal"
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: "../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 6.0.0"
|
6
|
+
gem "rake", "~> 12.0"
|
7
|
+
gem "rspec", "~> 3.0"
|
8
|
+
gem "rspec-rails", "~> 5.0"
|
9
|
+
gem "rubocop", "~> 1.14"
|
10
|
+
gem "pry"
|
11
|
+
|
12
|
+
group :development do
|
13
|
+
gem "appraisal"
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: "../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 6.1.0"
|
6
|
+
gem "rake", "~> 12.0"
|
7
|
+
gem "rspec", "~> 3.0"
|
8
|
+
gem "rspec-rails", "~> 5.0"
|
9
|
+
gem "rubocop", "~> 1.14"
|
10
|
+
gem "pry"
|
11
|
+
|
12
|
+
group :development do
|
13
|
+
gem "appraisal"
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: "../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", github: "rails/rails"
|
6
|
+
gem "rake", "~> 12.0"
|
7
|
+
gem "rspec", "~> 3.0"
|
8
|
+
gem "rspec-rails", "~> 5.0"
|
9
|
+
gem "rubocop", "~> 1.14"
|
10
|
+
gem "pry"
|
11
|
+
|
12
|
+
group :development do
|
13
|
+
gem "appraisal"
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: "../"
|
@@ -13,22 +13,37 @@ module Rails
|
|
13
13
|
require 'rails/assets/manifest/railtie' if defined?(Rails::Railtie)
|
14
14
|
|
15
15
|
class ManifestMissing < StandardError; end
|
16
|
+
|
16
17
|
class ManifestInvalid < StandardError; end
|
18
|
+
|
17
19
|
class EntryMissing < StandardError; end
|
20
|
+
|
18
21
|
class IntegrityMissing < StandardError; end
|
19
22
|
|
20
23
|
class << self
|
21
24
|
delegate :lookup, :lookup!, to: :instance
|
22
25
|
|
23
|
-
|
24
|
-
|
26
|
+
attr_reader :instance
|
27
|
+
|
28
|
+
def prepare!
|
29
|
+
@instance = begin
|
25
30
|
config = Rails.application.config
|
26
31
|
|
27
32
|
Manifest.new \
|
28
|
-
|
33
|
+
files: config.assets.manifests.map {|path| Rails.root.join(path) },
|
29
34
|
cache: config.cache_classes
|
30
35
|
end
|
31
36
|
end
|
37
|
+
|
38
|
+
def eager_load!
|
39
|
+
return unless @instance
|
40
|
+
|
41
|
+
@instance.eager_load!
|
42
|
+
end
|
43
|
+
|
44
|
+
def passthrough?
|
45
|
+
Rails.application.config.assets.passthrough
|
46
|
+
end
|
32
47
|
end
|
33
48
|
end
|
34
49
|
end
|
@@ -2,16 +2,24 @@
|
|
2
2
|
|
3
3
|
module Rails::Assets::Manifest
|
4
4
|
module Helper
|
5
|
-
def compute_asset_path(name,
|
5
|
+
def compute_asset_path(name, _options)
|
6
6
|
::Rails::Assets::Manifest.lookup!(name).src
|
7
|
+
rescue EntryMissing
|
8
|
+
return super if Rails::Assets::Manifest.passthrough?
|
9
|
+
|
10
|
+
raise
|
7
11
|
end
|
8
12
|
|
9
|
-
def asset_integrity(name,
|
10
|
-
::Rails::Assets::Manifest.lookup!(path_with_extname(name,
|
13
|
+
def asset_integrity(name, options)
|
14
|
+
::Rails::Assets::Manifest.lookup!(path_with_extname(name, options)).integrity
|
15
|
+
rescue EntryMissing
|
16
|
+
return super if Rails::Assets::Manifest.passthrough?
|
17
|
+
|
18
|
+
raise
|
11
19
|
end
|
12
20
|
|
13
21
|
def javascript_include_tag(*sources, integrity: nil, **kwargs)
|
14
|
-
return super(*sources, **kwargs) unless
|
22
|
+
return super(*sources, **kwargs) unless manifest_use_integrity?(integrity)
|
15
23
|
|
16
24
|
with_integrity(sources, integrity, :javascript, **kwargs) do |source, options|
|
17
25
|
super(source, options)
|
@@ -19,7 +27,7 @@ module Rails::Assets::Manifest
|
|
19
27
|
end
|
20
28
|
|
21
29
|
def stylesheet_link_tag(*sources, integrity: nil, **kwargs)
|
22
|
-
return super(*sources, **kwargs) unless
|
30
|
+
return super(*sources, **kwargs) unless manifest_use_integrity?(integrity)
|
23
31
|
|
24
32
|
with_integrity(sources, integrity, :stylesheet, **kwargs) do |source, options|
|
25
33
|
super(source, options)
|
@@ -28,29 +36,57 @@ module Rails::Assets::Manifest
|
|
28
36
|
|
29
37
|
private
|
30
38
|
|
31
|
-
def
|
32
|
-
return false unless
|
39
|
+
def manifest_use_integrity?(option)
|
40
|
+
return false unless secure_request_context?
|
33
41
|
|
34
42
|
option || option.nil?
|
35
43
|
end
|
36
44
|
|
45
|
+
# http://www.w3.org/TR/SRI/#non-secure-contexts-remain-non-secure
|
46
|
+
def secure_request_context?
|
47
|
+
respond_to?(:request) && request && (request.local? || request.ssl?)
|
48
|
+
end
|
49
|
+
|
50
|
+
# rubocop:disable Metrics/AbcSize
|
51
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
52
|
+
# rubocop:disable Metrics/MethodLength
|
53
|
+
# rubocop:disable Style/IfUnlessModifier
|
37
54
|
def with_integrity(sources, required, type, **kwargs)
|
38
55
|
sources.map do |source|
|
39
|
-
|
56
|
+
path = path_with_extname(source, type: type, **kwargs)
|
40
57
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
ERROR
|
58
|
+
# integrity hash passed directly
|
59
|
+
if required.is_a?(String)
|
60
|
+
next yield(source, integrity: required, crossorigin: 'anonymous', **kwargs)
|
45
61
|
end
|
46
62
|
|
47
|
-
|
48
|
-
|
49
|
-
|
63
|
+
# Explicit passed `true` option
|
64
|
+
if required
|
65
|
+
integrity = asset_integrity(source, type: type, **kwargs)
|
66
|
+
|
67
|
+
raise IntegrityMissing.new "SRI missing for #{path}" unless integrity
|
50
68
|
|
51
|
-
|
52
|
-
|
69
|
+
next yield(source, integrity: integrity, crossorigin: 'anonymous', **kwargs)
|
70
|
+
end
|
71
|
+
|
72
|
+
# No integrity option passed or `nil` default from above
|
73
|
+
if required.nil?
|
74
|
+
entry = ::Rails::Assets::Manifest.lookup(path)
|
75
|
+
|
76
|
+
# Only if it is an asset from our manifest and there is an integrity
|
77
|
+
# we default to adding one
|
78
|
+
if entry && entry.integrity
|
79
|
+
next yield(source, integrity: entry.integrity, crossorigin: 'anonymous', **kwargs)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
yield(source, **kwargs)
|
84
|
+
end.join.html_safe
|
53
85
|
end
|
86
|
+
# rubocop:enable Style/IfUnlessModifier
|
87
|
+
# rubocop:enable Metrics/MethodLength
|
88
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
89
|
+
# rubocop:enable Metrics/AbcSize
|
54
90
|
|
55
91
|
def path_with_extname(path, options)
|
56
92
|
path = path.to_s
|
@@ -4,11 +4,9 @@ module Rails::Assets::Manifest
|
|
4
4
|
class Manifest
|
5
5
|
attr_reader :path
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(files:, cache: true)
|
8
|
+
@files = Array(files).flatten.each(&:freeze).freeze
|
9
9
|
@cache = cache
|
10
|
-
|
11
|
-
data if cache?
|
12
10
|
end
|
13
11
|
|
14
12
|
def cache?
|
@@ -22,12 +20,20 @@ module Rails::Assets::Manifest
|
|
22
20
|
def lookup!(name)
|
23
21
|
lookup(name) || begin
|
24
22
|
raise EntryMissing.new <<~ERROR
|
25
|
-
Can't find #{name} in #{path}. Your
|
23
|
+
Can't find #{name} in #{path}. Your manifests contain:
|
26
24
|
#{JSON.pretty_generate(data.keys)}
|
27
25
|
ERROR
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
29
|
+
def key?(name)
|
30
|
+
data.key?(name.to_s)
|
31
|
+
end
|
32
|
+
|
33
|
+
def eager_load!
|
34
|
+
data
|
35
|
+
end
|
36
|
+
|
31
37
|
private
|
32
38
|
|
33
39
|
Entry = Struct.new(:src, :integrity) do
|
@@ -44,21 +50,27 @@ module Rails::Assets::Manifest
|
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
53
|
+
def files
|
54
|
+
@files.map {|path| Dir.glob(path) }.flatten
|
55
|
+
end
|
56
|
+
|
47
57
|
def load
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
files.each_with_object({}) do |file, entries|
|
59
|
+
JSON.parse(File.read(file)).each_pair do |key, entry|
|
60
|
+
if entry.is_a?(String)
|
61
|
+
entries[key] = Entry.new(entry, nil)
|
62
|
+
elsif entry.is_a?(Hash) && entry.key?('src')
|
63
|
+
entries[key] = Entry.new(entry['src'], entry['integrity'])
|
64
|
+
else
|
65
|
+
raise "Invalid manifest entry: #{entry.inspect}"
|
66
|
+
end
|
55
67
|
end
|
56
68
|
end
|
57
69
|
rescue Errno::ENOENT => e
|
58
70
|
raise ManifestMissing.new <<~ERROR
|
59
71
|
Asset manifest does not exist: #{e}
|
60
72
|
ERROR
|
61
|
-
rescue => e
|
73
|
+
rescue StandardError => e
|
62
74
|
raise ManifestInvalid.new <<~ERROR
|
63
75
|
Asset manifest could not be loaded: #{e}
|
64
76
|
ERROR
|
@@ -4,8 +4,19 @@ module Rails
|
|
4
4
|
module Assets
|
5
5
|
module Manifest
|
6
6
|
class Railtie < ::Rails::Railtie
|
7
|
-
|
8
|
-
|
7
|
+
# If this plugin is used with sprockets this option
|
8
|
+
# already exists and must not be overriden. Otherwise
|
9
|
+
# all sprockets default options are removed breaking
|
10
|
+
# sprockets.
|
11
|
+
config.assets = ::ActiveSupport::OrderedOptions.new unless config.respond_to?(:assets)
|
12
|
+
|
13
|
+
# Path where the manifest files are loaded from.
|
14
|
+
config.assets.manifests = ['public/assets/manifest.json']
|
15
|
+
|
16
|
+
# If set to true missing assets will not raise an
|
17
|
+
# exception but are passed through to sprockets
|
18
|
+
# or rails own asset methods.
|
19
|
+
config.assets.passthrough = false
|
9
20
|
|
10
21
|
config.after_initialize do |_|
|
11
22
|
ActiveSupport.on_load(:action_view) do
|
@@ -13,26 +24,12 @@ module Rails
|
|
13
24
|
end
|
14
25
|
end
|
15
26
|
|
16
|
-
|
17
|
-
::Rails::Assets::Manifest.
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def server?
|
23
|
-
!(console? || generator? || rake?)
|
24
|
-
end
|
25
|
-
|
26
|
-
def console?
|
27
|
-
defined?(Rails::Console)
|
28
|
-
end
|
29
|
-
|
30
|
-
def generator?
|
31
|
-
defined?(Rails::Generators)
|
27
|
+
config.to_prepare do
|
28
|
+
::Rails::Assets::Manifest.prepare!
|
32
29
|
end
|
33
30
|
|
34
|
-
|
35
|
-
|
31
|
+
config.before_eager_load do
|
32
|
+
::Rails::Assets::Manifest.eager_load!
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
data/renovate.json
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-assets-manifest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -60,10 +60,11 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".editorconfig"
|
63
|
+
- ".github/workflows/test.yml"
|
63
64
|
- ".gitignore"
|
64
65
|
- ".rspec"
|
65
66
|
- ".rubocop.yml"
|
66
|
-
-
|
67
|
+
- Appraisals
|
67
68
|
- CHANGELOG.md
|
68
69
|
- Gemfile
|
69
70
|
- LICENSE
|
@@ -71,17 +72,17 @@ files:
|
|
71
72
|
- Rakefile
|
72
73
|
- bin/console
|
73
74
|
- bin/setup
|
74
|
-
- gemfiles/
|
75
|
-
- gemfiles/
|
76
|
-
- gemfiles/
|
77
|
-
- gemfiles/
|
78
|
-
- gemfiles/rails-master.gemfile
|
75
|
+
- gemfiles/rails_5.2.gemfile
|
76
|
+
- gemfiles/rails_6.0.gemfile
|
77
|
+
- gemfiles/rails_6.1.gemfile
|
78
|
+
- gemfiles/rails_master.gemfile
|
79
79
|
- lib/rails/assets/manifest.rb
|
80
80
|
- lib/rails/assets/manifest/helper.rb
|
81
81
|
- lib/rails/assets/manifest/manifest.rb
|
82
82
|
- lib/rails/assets/manifest/railtie.rb
|
83
83
|
- lib/rails/assets/manifest/version.rb
|
84
84
|
- rails-assets-manifest.gemspec
|
85
|
+
- renovate.json
|
85
86
|
homepage: https://github.com/jgraichen/rails-assets-manifest
|
86
87
|
licenses: []
|
87
88
|
metadata:
|
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
104
|
- !ruby/object:Gem::Version
|
104
105
|
version: '0'
|
105
106
|
requirements: []
|
106
|
-
rubygems_version: 3.
|
107
|
+
rubygems_version: 3.2.15
|
107
108
|
signing_key:
|
108
109
|
specification_version: 4
|
109
110
|
summary: Load all rails assets from an external manifest.
|
data/.travis.yml
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
dist: xenial
|
2
|
-
language: ruby
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
rvm:
|
6
|
-
- 2.6.3
|
7
|
-
- 2.5.5
|
8
|
-
|
9
|
-
gemfile:
|
10
|
-
- gemfiles/rails-5-2.gemfile
|
11
|
-
- gemfiles/rails-master.gemfile
|
12
|
-
|
13
|
-
before_install:
|
14
|
-
- gem update --system
|
15
|
-
- gem install bundler
|
16
|
-
|
17
|
-
script:
|
18
|
-
- bundle exec rspec spec
|
19
|
-
|
20
|
-
jobs:
|
21
|
-
allow_failures:
|
22
|
-
- gemfile: gemfiles/rails-master.gemfile
|
23
|
-
|
24
|
-
include:
|
25
|
-
- stage: Release
|
26
|
-
rvm: 2.6.3
|
27
|
-
env: []
|
28
|
-
script: skip
|
29
|
-
install: skip
|
30
|
-
deploy:
|
31
|
-
provider: rubygems
|
32
|
-
api_key:
|
33
|
-
secure: m5gUzb8J40lo4EJ2xE8XwoeHq4S3ZEDE+AyikDHzGKc5NEQQcCRoc469UlDO7fYfBHGKLh2eEe6+e/T+dyRE/C0qE/tfd6pVWf8xdyzt9+rB0zM3k7pR2Aud2hZ8NFF4bAQ28OvQ2y9pWWLVS9Bn/C0Xou951yZM+vufPVZpX7+08Aw+ZdPQrmg+v9SxsvWElm/is0CMjsHxpEy1vpyyBlF/DhNpHgd+69nupyTuZP8bg3lirZexek0xNaccNpflmrUeRwE7yofVGMfrRhvm5kOniYI+sQl/Zwru9+hK2WaSzfX/ou4ENihiLDGo5gdWeYcyLbS61yQARsRn21cN6SA0iYVuVnAruHC3uoxRh7ty1H8s3aUJnPTnnBj5cnfP9pqOyZI8zFi54CujkEFbRVLlWfGjKtCScgFBwkpXS5aB6CBplulMrX3kz/jYXFgodXLsV10WD725WGJ2Jkb52PoT5i2GyA/Ao746s7+wPIEV/l8NAurcroSHOzr9PcAUG/CwdzgidSnLfwl+qplMCGaUHtdHkPaRHqJL9j4BmcqoGVMaU0a4mAXsrlJG/drT2PMMrREKChtnQPtWg3L9HHDHBIKuXZCIQ7G9n2Dz7lpWnyKZKjJTcFyZWbbnKHLXlE1KDBUiG9qqrYbpky+IEPUt4jZ1W8hx4tKGjNlNwjU=
|
34
|
-
gem: rails-assets-manifest
|
35
|
-
on:
|
36
|
-
tags: true
|
37
|
-
repo: jgraichen/rails-assets-manifest
|
data/gemfiles/rails-4-2.gemfile
DELETED
data/gemfiles/rails-5-0.gemfile
DELETED
data/gemfiles/rails-5-1.gemfile
DELETED
data/gemfiles/rails-5-2.gemfile
DELETED