rails-assets-manifest 2.1.2 → 3.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f74ada8a7abade960a8bbb990ef4bcf5b9f042e09024d1de5b39cbf1a2ccf1ec
4
- data.tar.gz: d45b22c32fe3981382d47c9680e3102e48c2d30211c24a1eac1e7baab8cd24a6
3
+ metadata.gz: 36c667b7c457d214df43ac5f4c9e54f5baac237c0f9a61ac3eeedc6d1d458ab9
4
+ data.tar.gz: 1a7c777200e2087c05be7759091007857861261a5d00912256f35f5ff98d2a6c
5
5
  SHA512:
6
- metadata.gz: d993c84c80510ab83df09c15838c8a07fc909d8d90b7891f340fb7501319bbac75d934d8f5fbfc52864d62ed47c560da9bbd93687b2d9dc5ce3d8d6abac94ec1
7
- data.tar.gz: a6543487813204d1061a4db57edaaa3fe721c90b51f71ca787d2d858873719491a71e159ffa1618cb2edd5e579e77eefeb16771aff81313cdec9d66e2f36c421
6
+ metadata.gz: 6117f1e88a27ba3dd5ce5edc85a21952e91de97abd3d72bc9b37a1527aa8352a7170371acf2bec29a268a8aced6b3519af4d9e4409848f041c9d950090ca38cb
7
+ data.tar.gz: 2f38b29bf90d82cd5a4a8e039a2fef2bd536326d1fe81eb3ee9e04d5b2637f4f3114a5deeb75ce6a6aec332cdf7874056033d4dde53d8bea7bc5d053774dbc6a
@@ -3,32 +3,40 @@ name: test
3
3
  on: push
4
4
  jobs:
5
5
  rspec:
6
- name: "Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}"
6
+ name: "ruby:${{ matrix.ruby }} rails:${{ matrix.rails }} ${{ matrix.variant }}"
7
7
  runs-on: ubuntu-20.04
8
8
 
9
9
  strategy:
10
10
  fail-fast: false
11
11
  matrix:
12
12
  ruby:
13
+ - "3.1"
13
14
  - "3.0"
14
15
  - "2.7"
15
- - "2.6"
16
- - "2.5"
17
16
  rails:
17
+ - "7.0"
18
18
  - "6.1"
19
19
  - "6.0"
20
20
  - "5.2"
21
- - master
21
+ variant:
22
+ - ""
23
+ - "no-sprockets"
22
24
  exclude:
25
+ - ruby: "3.1"
26
+ rails: "6.1"
27
+ - ruby: "3.1"
28
+ rails: "6.0"
29
+ - ruby: "3.1"
30
+ rails: "5.2"
23
31
  - ruby: "3.0"
24
32
  rails: "5.2"
25
- - ruby: "2.6"
26
- rails: master
27
- - ruby: "2.5"
28
- rails: master
29
33
 
30
34
  env:
31
35
  BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gemfile
36
+ BUNDLE_WITHOUT: development
37
+ BUNDLE_JOBS: 4
38
+ BUNDLE_RETRY: 3
39
+ VARIANT: ${{ matrix.variant }}
32
40
 
33
41
  steps:
34
42
  - uses: actions/checkout@master
@@ -36,10 +44,6 @@ jobs:
36
44
  with:
37
45
  ruby-version: ${{ matrix.ruby }}
38
46
  bundler-cache: true
39
- env:
40
- BUNDLE_WITHOUT: development
41
- BUNDLE_JOBS: 4
42
- BUNDLE_RETRY: 3
43
47
 
44
48
  - run: bundle exec rspec --color
45
49
 
@@ -47,15 +51,16 @@ jobs:
47
51
  name: rubocop
48
52
  runs-on: ubuntu-20.04
49
53
 
54
+ env:
55
+ BUNDLE_WITHOUT: development
56
+ BUNDLE_JOBS: 4
57
+ BUNDLE_RETRY: 3
58
+
50
59
  steps:
51
60
  - uses: actions/checkout@master
52
61
  - uses: ruby/setup-ruby@v1
53
62
  with:
54
- ruby-version: 3.0
63
+ ruby-version: 3.1
55
64
  bundler-cache: true
56
- env:
57
- BUNDLE_WITHOUT: development
58
- BUNDLE_JOBS: 4
59
- BUNDLE_RETRY: 3
60
65
 
61
66
  - run: bundle exec rubocop --parallel --fail-level E
data/.rubocop.yml CHANGED
@@ -1,48 +1,7 @@
1
+ inherit_gem:
2
+ rubocop-config: default.yml
3
+
1
4
  AllCops:
2
- Include:
3
- - '**/*.rb'
4
- TargetRubyVersion: 2.5
5
+ TargetRubyVersion: 2.7
6
+ SuggestExtensions: False
5
7
  NewCops: enable
6
-
7
- Layout/CaseIndentation:
8
- EnforcedStyle: end
9
- IndentOneStep: true
10
- SupportedStyles:
11
- - case
12
- - end
13
-
14
- Layout/ArgumentAlignment:
15
- EnforcedStyle: with_fixed_indentation
16
-
17
- Layout/SpaceInsideBlockBraces:
18
- EnforcedStyle: space
19
- EnforcedStyleForEmptyBraces: no_space
20
- SpaceBeforeBlockParameters: false
21
-
22
- Layout/SpaceInsideHashLiteralBraces:
23
- EnforcedStyle: no_space
24
-
25
-
26
- Metrics/BlockLength:
27
- Exclude:
28
- - spec/**/*_spec.rb
29
-
30
- Metrics/LineLength:
31
- Exclude:
32
- - spec/**/*_spec.rb
33
-
34
-
35
- Style/ClassAndModuleChildren:
36
- Enabled: false
37
-
38
- Style/Documentation:
39
- Enabled: false
40
-
41
- Style/RaiseArgs:
42
- EnforcedStyle: compact
43
-
44
- Style/SignalException:
45
- EnforcedStyle: only_raise
46
-
47
- Style/TrivialAccessors:
48
- AllowPredicates: true
data/Appraisals CHANGED
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ appraise 'rails-7.0' do
4
+ gem 'rails', '~> 7.0.0'
5
+ end
6
+
3
7
  appraise 'rails-6.1' do
4
8
  gem 'rails', '~> 6.1.0'
5
9
  end
@@ -11,7 +15,3 @@ end
11
15
  appraise 'rails-5.2' do
12
16
  gem 'rails', '~> 5.2.0'
13
17
  end
14
-
15
- appraise 'rails-master' do
16
- gem 'rails', github: 'rails/rails'
17
- end
data/CHANGELOG.md CHANGED
@@ -17,6 +17,21 @@ This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a Ch
17
17
  ### Breaks
18
18
 
19
19
 
20
+ ## 3.0.0 - (2022-02-08)
21
+ ---
22
+
23
+ ### New
24
+ * Test integration with a Rails application without sprockets
25
+ * Add support for Rails 7.0 and Ruby 3.1
26
+
27
+
28
+ ### Breaks
29
+ * Default to `public/assets/assets-manifest.json` manifest path matching new default from `webpack-assets-manifest` plugin
30
+ * Only support single manifest source file and error if not found (#9)
31
+ * Use `config.assets_manifest` as the config base to avoid conflicts in apps without sprockets (#9)
32
+ * Drop support for Ruby <2.7
33
+
34
+
20
35
  ## 2.1.2 - (2021-09-05)
21
36
  ---
22
37
 
data/Gemfile CHANGED
@@ -5,14 +5,17 @@ source 'https://rubygems.org'
5
5
  # Load gem's dependencies
6
6
  gemspec
7
7
 
8
- gem 'rails'
8
+ gem 'net-smtp', require: false # not bundled in Ruby 3.1+
9
+ gem 'rails', require: false
10
+ gem 'sprockets-rails', require: false # not included by default in Rails 7+
11
+ gem 'sqlite3', require: false
9
12
 
10
13
  gem 'rake', '~> 13.0'
11
14
  gem 'rspec', '~> 3.0'
12
15
  gem 'rspec-rails', '~> 5.0'
13
- gem 'rubocop', '~> 1.14'
14
16
 
15
17
  gem 'pry'
18
+ gem 'rubocop-config', github: 'jgraichen/rubocop-config', ref: 'v7', require: false
16
19
 
17
20
  group :development do
18
21
  gem 'appraisal'
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # Rails::Assets::Manifest
2
2
 
3
- Load all assets in your rails application from a `manifest.json`, e.g. generated by [webpack-assets-manifest](https://github.com/webdeveric/webpack-assets-manifest).
3
+ [![Gem Version](https://img.shields.io/gem/v/rails-assets-manifest?logo=ruby)](https://rubygems.org/gems/rails-assets-manifest)
4
+ [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/jgraichen/rails-assets-manifest/test?logo=github)](https://github.com/jgraichen/rails-assets-manifest/actions)
4
5
 
5
- This gem does not make any assumption on which tool to use to make your assets not how to configure or invoke it. It only requires a manifest JSON. The Manifest must either be a simple string map or must map to objects having a `'src'` attribute. Subresource integrity is supported too:
6
+ Load all assets in your Rails application from a `manifest.json`, e.g. generated by [webpack-assets-manifest](https://github.com/webdeveric/webpack-assets-manifest).
7
+
8
+ This gem does not make any assumption on which tool to use to make your assets not how to configure or invoke it. It only requires a manifest JSON. The manifest must either be a simple string map or must map to objects having a `'src'` attribute. Sub-resource integrity is supported too:
6
9
 
7
10
  ```json
8
11
  {
@@ -41,22 +44,39 @@ gem 'rails-assets-manifest'
41
44
 
42
45
  ## Usage
43
46
 
44
- The manifest path can be configured e.g. in an environment:
47
+ The manifest path can be configured e.g. in an `environments/*.rb` file:
45
48
 
46
49
  ```ruby
47
- config.assets.manifests = %w(public/.asset-manifest.json)
50
+ config.assets_manifest.path = "public/.asset-manifest.json"
48
51
  ```
49
52
 
50
- If `config.cache_classes` is set to `true` the manifest file be loaded once on boot.
53
+ If `config.cache_classes` is set to `true` the manifest file be loaded once on boot. Assets included with `integrity: true` will raise an error if the integrity option is missing in the manifest.
51
54
 
52
- Assets included with `integrity: true` will raise an error if the integrity option is missing in the manifest.
55
+ ## Webpack Assets Manifest Example
53
56
 
54
- Multiple manifests can be loaded by specifying multiple files. Glob patterns are supported:
57
+ The following snippet provides an example configuration for the[webpack-assets-manifest](https://github.com/webdeveric/webpack-assets-manifest) plugin to generating a compatible assets manifest file.
55
58
 
56
- ```ruby
57
- config.assets.manifests = %w(public/.manifest.*.json lib/manifest.json)
59
+ ```ts
60
+ new WebpackAssetsManifest({
61
+ integrity: true,
62
+ integrityHashes: ["sha384"],
63
+ writeToDisk: true,
64
+ entrypoints: false,
65
+ entrypointsUseAssets: true,
66
+ publicPath,
67
+ // Ignore a source maps and compressed files.
68
+ customize(e) {
69
+ if (e.key.endsWith(".map") || e.key.endsWith(".gz")) {
70
+ return false;
71
+ }
72
+
73
+ return e;
74
+ },
75
+ })
58
76
  ```
59
77
 
78
+ Specifying `writeToDisk: true` allows running the `webpack-dev-server` as proxy to the Rails application, and still generate correct assets links in Rails code. `rails-assets-manifest` defaults to using `public/assets/assets-manifest.json` as the manifest path.
79
+
60
80
  ## TODO
61
81
 
62
82
  * Override/Join with `asset_host` URL?
@@ -72,7 +92,7 @@ Multiple manifests can be loaded by specifying multiple files. Glob patterns are
72
92
 
73
93
  ## MIT License
74
94
 
75
- Copyright (c) 2018 Jan Graichen
95
+ Copyright (c) 2018-2022 Jan Graichen
76
96
 
77
97
  Permission is hereby granted, free of charge, to any person obtaining a copy
78
98
  of this software and associated documentation files (the "Software"), to deal
@@ -3,7 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 5.2.0"
6
- gem "rake", "~> 12.0"
6
+ gem "sprockets-rails", require: false
7
+ gem "net-smtp", require: false
8
+ gem "sqlite3", require: false
9
+ gem "rake", "~> 13.0"
7
10
  gem "rspec", "~> 3.0"
8
11
  gem "rspec-rails", "~> 5.0"
9
12
  gem "rubocop", "~> 1.14"
@@ -3,7 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 6.0.0"
6
- gem "rake", "~> 12.0"
6
+ gem "sprockets-rails", require: false
7
+ gem "net-smtp", require: false
8
+ gem "sqlite3", require: false
9
+ gem "rake", "~> 13.0"
7
10
  gem "rspec", "~> 3.0"
8
11
  gem "rspec-rails", "~> 5.0"
9
12
  gem "rubocop", "~> 1.14"
@@ -3,7 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 6.1.0"
6
- gem "rake", "~> 12.0"
6
+ gem "sprockets-rails", require: false
7
+ gem "net-smtp", require: false
8
+ gem "sqlite3", require: false
9
+ gem "rake", "~> 13.0"
7
10
  gem "rspec", "~> 3.0"
8
11
  gem "rspec-rails", "~> 5.0"
9
12
  gem "rubocop", "~> 1.14"
@@ -2,8 +2,11 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", github: "rails/rails"
6
- gem "rake", "~> 12.0"
5
+ gem "rails", "~> 7.0.0"
6
+ gem "sprockets-rails", require: false
7
+ gem "net-smtp", require: false
8
+ gem "sqlite3", require: false
9
+ gem "rake", "~> 13.0"
7
10
  gem "rspec", "~> 3.0"
8
11
  gem "rspec-rails", "~> 5.0"
9
12
  gem "rubocop", "~> 1.14"
@@ -67,10 +67,6 @@ module Rails::Assets::Manifest
67
67
  respond_to?(:request) && request && (request.local? || request.ssl?)
68
68
  end
69
69
 
70
- # rubocop:disable Metrics/AbcSize
71
- # rubocop:disable Metrics/CyclomaticComplexity
72
- # rubocop:disable Metrics/MethodLength
73
- # rubocop:disable Style/IfUnlessModifier
74
70
  def with_integrity(sources, required, type, **kwargs)
75
71
  sources.map do |source|
76
72
  path = path_with_extname(source, type: type, **kwargs)
@@ -103,10 +99,6 @@ module Rails::Assets::Manifest
103
99
  yield(source, **kwargs)
104
100
  end.join.html_safe
105
101
  end
106
- # rubocop:enable Style/IfUnlessModifier
107
- # rubocop:enable Metrics/MethodLength
108
- # rubocop:enable Metrics/CyclomaticComplexity
109
- # rubocop:enable Metrics/AbcSize
110
102
 
111
103
  def path_with_extname(path, options)
112
104
  path = path.to_s
@@ -4,8 +4,8 @@ module Rails::Assets::Manifest
4
4
  class Manifest
5
5
  attr_reader :path
6
6
 
7
- def initialize(files:, cache: true)
8
- @files = Array(files).flatten.each(&:freeze).freeze
7
+ def initialize(path, cache: true)
8
+ @path = Rails.root.join(path).to_s.freeze
9
9
  @cache = cache
10
10
  end
11
11
 
@@ -20,7 +20,7 @@ module Rails::Assets::Manifest
20
20
  def lookup!(name)
21
21
  lookup(name) || begin
22
22
  raise EntryMissing.new <<~ERROR
23
- Can't find #{name} in #{path}. Your manifests contain:
23
+ Can't find #{name} in #{path}. Your manifest contain:
24
24
  #{JSON.pretty_generate(data.keys)}
25
25
  ERROR
26
26
  end
@@ -50,13 +50,9 @@ module Rails::Assets::Manifest
50
50
  end
51
51
  end
52
52
 
53
- def files
54
- @files.map {|path| Dir.glob(path) }.flatten
55
- end
56
-
57
53
  def load
58
- files.each_with_object({}) do |file, entries|
59
- JSON.parse(File.read(file)).each_pair do |key, entry|
54
+ {}.tap do |entries|
55
+ JSON.parse(File.read(path)).each_pair do |key, entry|
60
56
  if entry.is_a?(String)
61
57
  entries[key] = Entry.new(entry, nil)
62
58
  elsif entry.is_a?(Hash) && entry.key?('src')
@@ -4,19 +4,14 @@ module Rails
4
4
  module Assets
5
5
  module Manifest
6
6
  class Railtie < ::Rails::Railtie
7
- # If this plugin is used with sprockets this option
8
- # already exists and must not be overridden. Otherwise
9
- # all sprockets default options are removed breaking
10
- # sprockets.
11
- config.assets = ::ActiveSupport::OrderedOptions.new unless config.respond_to?(:assets)
7
+ config.assets_manifest = ::ActiveSupport::OrderedOptions.new
12
8
 
13
- # Path where the manifest files are loaded from.
14
- config.assets.manifests = ['public/assets/manifest.json']
9
+ # Path where the manifest file is loaded from.
10
+ config.assets_manifest.path = 'public/assets/assets-manifest.json'
15
11
 
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
12
+ # If set to true missing assets will not raise an exception but are
13
+ # passed through to sprockets or rails own asset methods.
14
+ config.assets_manifest.passthrough = false
20
15
 
21
16
  config.after_initialize do |_|
22
17
  ActiveSupport.on_load(:action_view) do
@@ -4,12 +4,12 @@ module Rails
4
4
  module Assets
5
5
  module Manifest
6
6
  module VERSION
7
- MAJOR = 2
8
- MINOR = 1
9
- PATCH = 2
7
+ MAJOR = 3
8
+ MINOR = 0
9
+ PATCH = 0
10
10
  STAGE = nil
11
11
 
12
- STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.')
12
+ STRING = [MAJOR, MINOR, PATCH, STAGE].compact.join('.')
13
13
 
14
14
  def self.to_s
15
15
  STRING
@@ -29,9 +29,10 @@ module Rails
29
29
  @instance = begin
30
30
  config = Rails.application.config
31
31
 
32
- Manifest.new \
33
- files: config.assets.manifests.map {|path| Rails.root.join(path) },
34
- cache: config.cache_classes
32
+ Manifest.new(
33
+ config.assets_manifest.path,
34
+ cache: config.cache_classes,
35
+ )
35
36
  end
36
37
  end
37
38
 
@@ -42,7 +43,7 @@ module Rails
42
43
  end
43
44
 
44
45
  def passthrough?
45
- Rails.application.config.assets.passthrough
46
+ Rails.application.config.assets_manifest.passthrough
46
47
  end
47
48
  end
48
49
  end
@@ -14,9 +14,10 @@ Gem::Specification.new do |spec|
14
14
  spec.description = 'Load all rails assets from an external manifest.'
15
15
  spec.homepage = 'https://github.com/jgraichen/rails-assets-manifest'
16
16
 
17
- spec.metadata['homepage_uri'] = spec.homepage
18
- spec.metadata['source_code_uri'] = 'https://github.com/jgraichen/rails-assets-manifest'
19
- spec.metadata['changelog_uri'] = 'https://github.com/jgraichen/rails-assets-manifest/blob/master/CHANGELOG.md'
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/jgraichen/rails-assets-manifest'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/jgraichen/rails-assets-manifest/blob/master/CHANGELOG.md'
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
20
21
 
21
22
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
23
  `git ls-files -z`.split("\x0").reject do |f|
@@ -28,6 +29,8 @@ Gem::Specification.new do |spec|
28
29
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
29
30
  spec.require_paths = ['lib']
30
31
 
32
+ spec.required_ruby_version = '>= 2.7.0'
33
+
31
34
  spec.add_dependency 'activesupport', '> 4.2'
32
35
  spec.add_dependency 'railties', '> 4.2'
33
36
 
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: 2.1.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-05 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -75,7 +75,7 @@ files:
75
75
  - gemfiles/rails_5.2.gemfile
76
76
  - gemfiles/rails_6.0.gemfile
77
77
  - gemfiles/rails_6.1.gemfile
78
- - gemfiles/rails_master.gemfile
78
+ - gemfiles/rails_7.0.gemfile
79
79
  - lib/rails/assets/manifest.rb
80
80
  - lib/rails/assets/manifest/helper.rb
81
81
  - lib/rails/assets/manifest/manifest.rb
@@ -89,6 +89,7 @@ metadata:
89
89
  homepage_uri: https://github.com/jgraichen/rails-assets-manifest
90
90
  source_code_uri: https://github.com/jgraichen/rails-assets-manifest
91
91
  changelog_uri: https://github.com/jgraichen/rails-assets-manifest/blob/master/CHANGELOG.md
92
+ rubygems_mfa_required: 'true'
92
93
  post_install_message:
93
94
  rdoc_options: []
94
95
  require_paths:
@@ -97,14 +98,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
98
  requirements:
98
99
  - - ">="
99
100
  - !ruby/object:Gem::Version
100
- version: '0'
101
+ version: 2.7.0
101
102
  required_rubygems_version: !ruby/object:Gem::Requirement
102
103
  requirements:
103
104
  - - ">="
104
105
  - !ruby/object:Gem::Version
105
106
  version: '0'
106
107
  requirements: []
107
- rubygems_version: 3.2.22
108
+ rubygems_version: 3.3.3
108
109
  signing_key:
109
110
  specification_version: 4
110
111
  summary: Load all rails assets from an external manifest.