shakapacker 7.2.0.rc.0 → 7.2.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: d7c6cb64c439d97ec52580010225f4b2204ea652e281926da18b21be6c7ef545
4
- data.tar.gz: 33adeb8d524cd2c08206bc1b06c3183cd44f469c7c44b453466ea149baceb30d
3
+ metadata.gz: ae742f19f77532f469332730b57bb1e381c6f238ace6cd5eb113a95f607bde68
4
+ data.tar.gz: 246d1e8dba39d501d219d1e37f4665c8b9f1ab401825173f22cbe270bf95a933
5
5
  SHA512:
6
- metadata.gz: 22c9e5716abf6528ab34f652a6b145cb97897769b7c9f4da09f63b9090ce3a2faea507db94cc6fcd87cdf5be8bc60be0881ffd2f9f1f7a5d218d37d759021ffc
7
- data.tar.gz: c3a299a84e15d15216d9e6e8c83513b6a9d0ca805587b80779e7e6b8bafd0e8f7090686a6fd82da1eecd829d25a68bf8df25ebf7bec1f82213918edb83953f92
6
+ metadata.gz: d57fc47ab68b52626fa66d643d5d62ceeb62fd27b707844c5b187c5ef4e29a15cbb8296a3bbb9204740ecd3769371c05c1ea6046ac2deffc7771bbf2b0839484
7
+ data.tar.gz: 5af5dc61cf4d3f01b17eaca403a8f09ae8a63fe3d2adffdb3dd91969c0e71684118ae0365a893a27690ed4275c03fb1d46a20b30fcb56f8821fdae44110b212e
@@ -10,6 +10,9 @@ jobs:
10
10
  - uses: actions/checkout@v4
11
11
  with:
12
12
  persist-credentials: false
13
+ - uses: actions/setup-node@v3
14
+ with:
15
+ node-version: '16'
13
16
  - uses: ruby/setup-ruby@v1
14
17
  with:
15
18
  ruby-version: '3.1.2'
data/CHANGELOG.md CHANGED
@@ -11,6 +11,17 @@ _Please add entries here for your pull requests that are not yet released._
11
11
 
12
12
  ### Added
13
13
  - Experimental support for other JS package managers using `package_json` gem [PR 349](https://github.com/shakacode/shakapacker/pull/349) by [G-Rath](https://github.com/g-rath).
14
+ - Support `hmr: only` configuration [PR 378](https://github.com/shakacode/shakapacker/pull/378) by [SimenB](https://github.com/SimenB).
15
+ - Use `config/shakapacker.yml` as the secondary source for `asset_host` and `relative_url_root` configurations [PR 376](https://github.com/shakacode/shakapacker/pull/376) by [ahangarha](https://github.com/ahangarha).
16
+
17
+ ### Fixed
18
+ - Recommend `server` option instead of deprecated `https` option when `--https` is provided [PR 380](https://github.com/shakacode/shakapacker/pull/380) by [G-Rath](https://github.com/g-rath)
19
+ - Recompile assets on asset host change [PR 364](https://github.com/shakacode/shakapacker/pull/364) by [ahangarha](https://github.com/ahangarha).
20
+ - Add deprecation warning for `https` option in `shakapacker.yml` (use `server: 'https'` instead) [PR 382](https://github.com/shakacode/shakapacker/pull/382) by [G-Rath](https://github.com/g-rath).
21
+ - Disable Hot Module Replacement in `webpack-dev-server` when `hmr: false` [PR 392](https://github.com/shakacode/shakapacker/pull/392) by [thedanbob](https://github.com/thedanbob).
22
+
23
+ ### Deprecated
24
+ - The usage of relative_url_root is deprecated in Shakapacker and will be removed in v8. [PR 376](https://github.com/shakacode/shakapacker/pull/376) by [ahangarha](https://github.com/ahangarha).
14
25
 
15
26
  ## [v7.1.0] - September 30, 2023
16
27
 
data/docs/v6_upgrade.md CHANGED
@@ -168,5 +168,5 @@ _If you're on webpacker v5, follow [how to upgrade to webpacker v6.0.0.rc.6 from
168
168
 
169
169
  ## Examples of v5 to v6
170
170
 
171
- 1. [React on Rails Project with HMR and SSR](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/compare/webpacker-5.x...master)
171
+ 1. [React on Rails Project with HMR and SSR](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/compare/webpacker-5.x...61e897f2c604085f45b9ab5e23642501e430fb28)
172
172
  2. [Vue and Sass Example](https://github.com/guillaumebriday/upgrade-webpacker-5-to-6)
@@ -50,6 +50,11 @@ default: &default
50
50
  # https://webpack.js.org/guides/build-performance/#avoid-production-specific-tooling
51
51
  useContentHash: false
52
52
 
53
+ # Setting the asset host here will override Rails.application.config.asset_host.
54
+ # Here, you can set different asset_host per environment. Note that
55
+ # SHAKAPACKER_ASSET_HOST will override both configurations.
56
+ # asset_host: custom-path
57
+
53
58
  development:
54
59
  <<: *default
55
60
  compile: true
@@ -59,8 +64,6 @@ development:
59
64
  # Keys not described there are documented inline and in https://github.com/shakacode/shakapacker/
60
65
  dev_server:
61
66
  # For running dev server with https, set `server: https`.
62
- # You may use `https: true` instead but notice that it is deprecated in favor of `server: https`
63
- # Ensure only one of these entries is set.
64
67
  # server: https
65
68
 
66
69
  host: localhost
@@ -117,11 +117,19 @@ class Shakapacker::Configuration
117
117
  end
118
118
 
119
119
  def asset_host
120
- ENV.fetch("SHAKAPACKER_ASSET_HOST", ActionController::Base.helpers.compute_asset_host)
120
+ ENV.fetch(
121
+ "SHAKAPACKER_ASSET_HOST",
122
+ fetch(:asset_host) || ActionController::Base.helpers.compute_asset_host
123
+ )
121
124
  end
122
125
 
123
126
  def relative_url_root
124
- ENV.fetch("SHAKAPACKER_RELATIVE_URL_ROOT", ActionController::Base.relative_url_root)
127
+ Shakapacker.puts_deprecation_message "The usage of relative_url_root is deprecated in Shakapacker and will be removed in v8."
128
+
129
+ ENV.fetch(
130
+ "SHAKAPACKER_RELATIVE_URL_ROOT",
131
+ fetch(:relative_url_root) || ActionController::Base.relative_url_root
132
+ )
125
133
  end
126
134
 
127
135
  private
@@ -31,7 +31,13 @@ class Shakapacker::DevServer
31
31
  end
32
32
 
33
33
  def https?
34
- case fetch(:https)
34
+ value = fetch(:https)
35
+
36
+ unless value.nil?
37
+ puts "WARNING: `https: true` has been deprecated in favor of `server: 'https'`"
38
+ end
39
+
40
+ case value
35
41
  when true, "true", Hash
36
42
  true
37
43
  else
@@ -48,7 +48,7 @@ module Shakapacker
48
48
  end
49
49
 
50
50
  if @argv.include?("--https") && !@https
51
- $stdout.puts "Please set https: true in shakapacker.yml to use the --https command line flag."
51
+ $stdout.puts "--https requires that 'server' in shakapacker.yml is set to 'https'"
52
52
  exit!
53
53
  end
54
54
  end
@@ -86,7 +86,10 @@ module Shakapacker
86
86
  cmd += ["--config", @webpack_config]
87
87
  cmd += ["--progress", "--color"] if @pretty
88
88
 
89
- cmd += ["--hot"] if @hot
89
+ # Default behavior of webpack-dev-server is @hot = true
90
+ cmd += ["--hot", "only"] if @hot == "only"
91
+ cmd += ["--no-hot"] if !@hot
92
+
90
93
  cmd += @argv
91
94
 
92
95
  Dir.chdir(@app_path) do
@@ -44,7 +44,9 @@ module Shakapacker
44
44
  end
45
45
  files = Dir[*expanded_paths].reject { |f| File.directory?(f) }
46
46
  file_ids = files.sort.map { |f| "#{File.basename(f)}/#{Digest::SHA1.file(f).hexdigest}" }
47
- Digest::SHA1.hexdigest(file_ids.join("/"))
47
+
48
+ asset_host = Shakapacker.config.asset_host.to_s
49
+ Digest::SHA1.hexdigest(file_ids.join("/").concat(asset_host))
48
50
  end
49
51
 
50
52
  def record_compilation_digest
@@ -1,4 +1,4 @@
1
1
  module Shakapacker
2
2
  # Change the version in package.json too, please!
3
- VERSION = "7.2.0.rc.0".freeze
3
+ VERSION = "7.2.0".freeze
4
4
  end
data/package.json CHANGED
@@ -1,40 +1,36 @@
1
1
  {
2
2
  "name": "shakapacker",
3
- "version": "7.2.0-rc.0",
3
+ "version": "7.2.0",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
+ "homepage": "https://github.com/shakacode/shakapacker",
6
+ "bugs": {
7
+ "url": "https://github.com/shakacode/shakapacker/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/shakacode/shakapacker.git"
12
+ },
13
+ "license": "MIT",
14
+ "author": "David Heinemeier Hansson <david@basecamp.com>, Justin Gordon <justin@shakacode.com>",
5
15
  "main": "package/index.js",
6
16
  "types": "package/index.d.ts",
7
17
  "files": [
8
18
  "package",
9
19
  "lib/install/config/shakapacker.yml"
10
20
  ],
11
- "engines": {
12
- "node": "^12.13.0 || ^14 || >=16",
13
- "yarn": ">=1 <5"
14
- },
15
- "peerDependencies": {
16
- "@types/babel__core": "^7.0.0",
17
- "@types/webpack": "^5.0.0",
18
- "@babel/core": "^7.17.9",
19
- "@babel/plugin-transform-runtime": "^7.17.0",
20
- "@babel/preset-env": "^7.16.11",
21
- "@babel/runtime": "^7.17.9",
22
- "babel-loader": "^8.2.4 || ^9.0.0",
23
- "compression-webpack-plugin": "^9.0.0 || ^10.0.0",
24
- "terser-webpack-plugin": "^5.3.1",
25
- "webpack": "^5.72.0",
26
- "webpack-assets-manifest": "^5.0.6",
27
- "webpack-cli": "^4.9.2 || ^5.0.0",
28
- "webpack-dev-server": "^4.9.0",
29
- "webpack-merge": "^5.8.0"
21
+ "scripts": {
22
+ "lint": "eslint package/",
23
+ "test": "jest"
30
24
  },
31
- "peerDependenciesMeta": {
32
- "@types/babel__core": {
33
- "optional": true
34
- },
35
- "@types/webpack": {
36
- "optional": true
37
- }
25
+ "jest": {
26
+ "roots": [
27
+ "<rootDir>/package"
28
+ ],
29
+ "testPathIgnorePatterns": [
30
+ "/__fixtures__/",
31
+ "/__utils__/"
32
+ ],
33
+ "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$"
38
34
  },
39
35
  "dependencies": {
40
36
  "glob": "^7.2.0",
@@ -59,31 +55,35 @@
59
55
  "webpack-assets-manifest": "^5.0.6",
60
56
  "webpack-merge": "^5.8.0"
61
57
  },
62
- "jest": {
63
- "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
64
- "testPathIgnorePatterns": [
65
- "/__fixtures__/",
66
- "/__utils__/"
67
- ],
68
- "roots": [
69
- "<rootDir>/package"
70
- ]
71
- },
72
- "publishConfig": {
73
- "access": "public"
74
- },
75
- "scripts": {
76
- "test": "jest",
77
- "lint": "eslint package/"
58
+ "peerDependencies": {
59
+ "@babel/core": "^7.17.9",
60
+ "@babel/plugin-transform-runtime": "^7.17.0",
61
+ "@babel/preset-env": "^7.16.11",
62
+ "@babel/runtime": "^7.17.9",
63
+ "@types/babel__core": "^7.0.0",
64
+ "@types/webpack": "^5.0.0",
65
+ "babel-loader": "^8.2.4 || ^9.0.0",
66
+ "compression-webpack-plugin": "^9.0.0 || ^10.0.0",
67
+ "terser-webpack-plugin": "^5.3.1",
68
+ "webpack": "^5.72.0",
69
+ "webpack-assets-manifest": "^5.0.6",
70
+ "webpack-cli": "^4.9.2 || ^5.0.0",
71
+ "webpack-dev-server": "^4.9.0",
72
+ "webpack-merge": "^5.8.0"
78
73
  },
79
- "repository": {
80
- "type": "git",
81
- "url": "git+https://github.com/shakacode/shakapacker.git"
74
+ "peerDependenciesMeta": {
75
+ "@types/babel__core": {
76
+ "optional": true
77
+ },
78
+ "@types/webpack": {
79
+ "optional": true
80
+ }
82
81
  },
83
- "author": "David Heinemeier Hansson <david@basecamp.com>, Justin Gordon <justin@shakacode.com>",
84
- "license": "MIT",
85
- "bugs": {
86
- "url": "https://github.com/shakacode/shakapacker/issues"
82
+ "engines": {
83
+ "node": "^12.13.0 || ^14 || >=16",
84
+ "yarn": ">=1 <5"
87
85
  },
88
- "homepage": "https://github.com/shakacode/shakapacker"
86
+ "publishConfig": {
87
+ "access": "public"
88
+ }
89
89
  }
@@ -45,19 +45,52 @@ describe "DevServerRunner" do
45
45
  verify_command(cmd, argv: (["--quiet"]))
46
46
  end
47
47
 
48
+ it "does not automatically pass the --https flag" do
49
+ cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js"])
50
+
51
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
52
+ double(
53
+ host: "localhost",
54
+ port: "3035",
55
+ pretty?: false,
56
+ protocol: "https",
57
+ hmr?: true
58
+ )
59
+ )
60
+
61
+ verify_command(cmd)
62
+ end
63
+
48
64
  it "supports the https flag" do
49
65
  cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--https"])
50
66
 
51
- dev_server = double()
52
- allow(dev_server).to receive(:host).and_return("localhost")
53
- allow(dev_server).to receive(:port).and_return("3035")
54
- allow(dev_server).to receive(:pretty?).and_return(false)
55
- allow(dev_server).to receive(:https?).and_return(true)
56
- allow(dev_server).to receive(:hmr?).and_return(false)
67
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
68
+ double(
69
+ host: "localhost",
70
+ port: "3035",
71
+ pretty?: false,
72
+ protocol: "https",
73
+ hmr?: true
74
+ )
75
+ )
76
+
77
+ verify_command(cmd, argv: ["--https"])
78
+ end
79
+
80
+ it "supports disabling hot module reloading" do
81
+ cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--no-hot"])
82
+
83
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
84
+ double(
85
+ host: "localhost",
86
+ port: "3035",
87
+ pretty?: false,
88
+ protocol: "http",
89
+ hmr?: false
90
+ )
91
+ )
57
92
 
58
- allow(Shakapacker::DevServer).to receive(:new) do
59
- verify_command(cmd, argv: (["--https"]))
60
- end.and_return(dev_server)
93
+ verify_command(cmd)
61
94
  end
62
95
 
63
96
  it "accepts environment variables" do
@@ -94,19 +127,52 @@ describe "DevServerRunner" do
94
127
  verify_command(cmd, argv: (["--quiet"]))
95
128
  end
96
129
 
130
+ it "does not automatically pass the --https flag" do
131
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js"]
132
+
133
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
134
+ double(
135
+ host: "localhost",
136
+ port: "3035",
137
+ pretty?: false,
138
+ protocol: "https",
139
+ hmr?: true
140
+ )
141
+ )
142
+
143
+ verify_command(cmd)
144
+ end
145
+
97
146
  it "supports the https flag" do
98
147
  cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--https"]
99
148
 
100
- dev_server = double()
101
- allow(dev_server).to receive(:host).and_return("localhost")
102
- allow(dev_server).to receive(:port).and_return("3035")
103
- allow(dev_server).to receive(:pretty?).and_return(false)
104
- allow(dev_server).to receive(:https?).and_return(true)
105
- allow(dev_server).to receive(:hmr?).and_return(false)
149
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
150
+ double(
151
+ host: "localhost",
152
+ port: "3035",
153
+ pretty?: false,
154
+ protocol: "https",
155
+ hmr?: true
156
+ )
157
+ )
158
+
159
+ verify_command(cmd, argv: ["--https"])
160
+ end
161
+
162
+ it "supports disabling hot module reloading" do
163
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--no-hot"]
164
+
165
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
166
+ double(
167
+ host: "localhost",
168
+ port: "3035",
169
+ pretty?: false,
170
+ protocol: "http",
171
+ hmr?: false
172
+ )
173
+ )
106
174
 
107
- allow(Shakapacker::DevServer).to receive(:new) do
108
- verify_command(cmd, argv: (["--https"]))
109
- end.and_return(dev_server)
175
+ verify_command(cmd)
110
176
  end
111
177
 
112
178
  it "accepts environment variables" do
@@ -9,6 +9,7 @@ describe "DigestStrategy" do
9
9
 
10
10
  before :all do
11
11
  @digest_strategy = Webpacker::DigestStrategy.new
12
+ ENV["SHAKAPACKER_ASSET_HOST"] = nil
12
13
  remove_compilation_digest_path
13
14
  end
14
15
 
@@ -48,7 +48,7 @@ development:
48
48
  host: localhost
49
49
  port: 3035
50
50
  public: localhost:3035
51
- hmr: false
51
+ hmr: true
52
52
  overlay: true
53
53
  disable_host_check: true
54
54
  use_local_ip: false
@@ -42,7 +42,7 @@ development:
42
42
  host: localhost
43
43
  port: 3035
44
44
  public: localhost:3035
45
- hmr: false
45
+ hmr: true
46
46
  # If HMR is on, CSS will by inlined by delivering it as part of the script payload via style-loader. Be sure
47
47
  # that you add style-loader to your project dependencies.
48
48
  #
data/spec/dummy/Gemfile CHANGED
@@ -46,8 +46,6 @@ group :test do
46
46
  gem "capybara", "~> 3.39.1"
47
47
  # gem 'capybara-webkit'
48
48
  gem "selenium-webdriver", ">= 4.9"
49
- # Easy installation and use of web drivers to run system tests with browsers
50
- gem "webdrivers"
51
49
  end
52
50
 
53
51
  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
@@ -39,6 +39,5 @@
39
39
  "fork-ts-checker-webpack-plugin": "^6.5.2",
40
40
  "react-refresh": "^0.14.0",
41
41
  "webpack-dev-server": "^4.9.2"
42
- },
43
- "packageManager": "yarn@3.2.1"
42
+ }
44
43
  }
@@ -50,14 +50,10 @@ describe "Shakapacker::Compiler" do
50
50
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to be nil
51
51
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to be nil
52
52
 
53
- custom_env_variables = {
54
- "SHAKAPACKER_ASSET_HOST" => "foo.bar",
55
- "SHAKAPACKER_RELATIVE_URL_ROOT" => "/baz"
56
- }
57
-
58
- with_env_variable(custom_env_variables) do
59
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to eq "foo.bar"
60
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to eq "/baz"
61
- end
53
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("foo.bar")
54
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", nil).and_return("/baz")
55
+
56
+ expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to eq "foo.bar"
57
+ expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to eq "/baz"
62
58
  end
63
59
  end
@@ -341,16 +341,35 @@ describe "Shakapacker::Configuration" do
341
341
  end
342
342
 
343
343
  it "returns the value of SHAKAPACKER_ASSET_HOST if set" do
344
- with_env_variable("SHAKAPACKER_ASSET_HOST" => "custom_host.abc") do
345
- expect(config.asset_host).to eq "custom_host.abc"
346
- end
344
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("custom_host.abc")
345
+
346
+ expect(config.asset_host).to eq "custom_host.abc"
347
347
  end
348
348
 
349
- it "returns ActionController::Base.helpers.compute_asset_host if SHAKAPACKER_ASSET_HOST is not set" do
350
- allow(ActionController::Base.helpers).to receive(:compute_asset_host).and_return("domain.abc")
349
+ context "without SHAKAPACKER_ASSET_HOST set" do
350
+ it "returns asset_host in shakapacker.yml if set" do
351
+ expect(config).to receive(:fetch).with(:asset_host).and_return("value-in-config-file.com")
352
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", "value-in-config-file.com").and_return("value-in-config-file.com")
353
+
354
+ expect(config.asset_host).to eq "value-in-config-file.com"
355
+ end
356
+
357
+ context "without asset_host set in the shakapacker.yml" do
358
+ it "returns ActionController::Base.helpers.compute_asset_host if SHAKAPACKER_ASSET_HOST is not set" do
359
+ expect(config).to receive(:fetch).with(:asset_host).and_return(nil)
360
+ expect(ActionController::Base.helpers).to receive(:compute_asset_host).and_return("domain.abc")
361
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", "domain.abc").and_return("domain.abc")
351
362
 
352
- with_env_variable("SHAKAPACKER_ASSET_HOST" => nil) do
353
- expect(config.asset_host).to eq "domain.abc"
363
+ expect(config.asset_host).to eq "domain.abc"
364
+ end
365
+
366
+ context "without ActionController::Base.helpers.compute_asset_host returing any value" do
367
+ it "returns nil" do
368
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return(nil)
369
+
370
+ expect(config.asset_host).to be nil
371
+ end
372
+ end
354
373
  end
355
374
  end
356
375
  end
@@ -364,17 +383,39 @@ describe "Shakapacker::Configuration" do
364
383
  )
365
384
  end
366
385
 
386
+ it "shows deprecation message" do
387
+ expect { config.relative_url_root }.to output(/deprecated/).to_stdout
388
+ end
389
+
367
390
  it "returns the value of SHAKAPACKER_RELATIVE_URL_ROOT if set" do
368
- with_env_variable("SHAKAPACKER_RELATIVE_URL_ROOT" => "custom_value") do
369
- expect(config.relative_url_root).to eq "custom_value"
370
- end
391
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", nil).and_return("custom_value")
392
+
393
+ expect(config.relative_url_root).to eq "custom_value"
371
394
  end
372
395
 
373
- it "returns ActionController::Base.helpers.compute_asset_host if SHAKAPACKER_RELATIVE_URL_ROOT is not set" do
374
- allow(ActionController::Base).to receive(:relative_url_root).and_return("abcd")
396
+ context "without SHAKAPACKER_RELATIVE_URL_ROOT set" do
397
+ it "returns relative_url_root in shakapacker.yml if set" do
398
+ expect(config).to receive(:fetch).with(:relative_url_root).and_return("value-in-config-file")
399
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", "value-in-config-file").and_return("value-in-config-file")
400
+
401
+ expect(config.relative_url_root).to eq "value-in-config-file"
402
+ end
403
+
404
+ context "without relative_url_root set in the shakapacker.yml" do
405
+ it "returns ActionController::Base.relative_url_root if SHAKAPACKER_RELATIVE_URL_ROOT is not set" do
406
+ expect(ActionController::Base).to receive(:relative_url_root).and_return("abcd")
407
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", "abcd").and_return("abcd")
408
+
409
+ expect(config.relative_url_root).to eq "abcd"
410
+ end
375
411
 
376
- with_env_variable("SHAKAPACKER_RELATIVE_URL_ROOT" => nil) do
377
- expect(config.relative_url_root).to eq "abcd"
412
+ context "without ActionController::Base.relative_url_root returing any value" do
413
+ it "returns an empty string" do
414
+ expect(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", nil).and_return(nil)
415
+
416
+ expect(config.relative_url_root).to be nil
417
+ end
418
+ end
378
419
  end
379
420
  end
380
421
  end
@@ -44,19 +44,52 @@ describe "DevServerRunner" do
44
44
  verify_command(cmd, argv: (["--quiet"]))
45
45
  end
46
46
 
47
+ it "does not automatically pass the --https flag" do
48
+ cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js"])
49
+
50
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
51
+ double(
52
+ host: "localhost",
53
+ port: "3035",
54
+ pretty?: false,
55
+ protocol: "https",
56
+ hmr?: true
57
+ )
58
+ )
59
+
60
+ verify_command(cmd)
61
+ end
62
+
47
63
  it "supports the https flag" do
48
64
  cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--https"])
49
65
 
50
- dev_server = double()
51
- allow(dev_server).to receive(:host).and_return("localhost")
52
- allow(dev_server).to receive(:port).and_return("3035")
53
- allow(dev_server).to receive(:pretty?).and_return(false)
54
- allow(dev_server).to receive(:https?).and_return(true)
55
- allow(dev_server).to receive(:hmr?).and_return(false)
66
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
67
+ double(
68
+ host: "localhost",
69
+ port: "3035",
70
+ pretty?: false,
71
+ protocol: "https",
72
+ hmr?: true
73
+ )
74
+ )
75
+
76
+ verify_command(cmd, argv: ["--https"])
77
+ end
78
+
79
+ it "supports disabling hot module reloading" do
80
+ cmd = package_json.manager.native_exec_command("webpack", ["serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--no-hot"])
81
+
82
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
83
+ double(
84
+ host: "localhost",
85
+ port: "3035",
86
+ pretty?: false,
87
+ protocol: "http",
88
+ hmr?: false
89
+ )
90
+ )
56
91
 
57
- allow(Shakapacker::DevServer).to receive(:new) do
58
- verify_command(cmd, argv: (["--https"]))
59
- end.and_return(dev_server)
92
+ verify_command(cmd)
60
93
  end
61
94
 
62
95
  it "accepts environment variables" do
@@ -92,19 +125,68 @@ describe "DevServerRunner" do
92
125
  verify_command(cmd, argv: (["--quiet"]))
93
126
  end
94
127
 
128
+ it "does not automatically pass the --https flag" do
129
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js"]
130
+
131
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
132
+ double(
133
+ host: "localhost",
134
+ port: "3035",
135
+ pretty?: false,
136
+ protocol: "https",
137
+ hmr?: true
138
+ )
139
+ )
140
+
141
+ verify_command(cmd)
142
+ end
143
+
95
144
  it "supports the https flag" do
96
145
  cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--https"]
97
146
 
98
- dev_server = double()
99
- allow(dev_server).to receive(:host).and_return("localhost")
100
- allow(dev_server).to receive(:port).and_return("3035")
101
- allow(dev_server).to receive(:pretty?).and_return(false)
102
- allow(dev_server).to receive(:https?).and_return(true)
103
- allow(dev_server).to receive(:hmr?).and_return(false)
147
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
148
+ double(
149
+ host: "localhost",
150
+ port: "3035",
151
+ pretty?: false,
152
+ protocol: "https",
153
+ hmr?: true
154
+ )
155
+ )
156
+
157
+ verify_command(cmd, argv: ["--https"])
158
+ end
159
+
160
+ it "supports disabling hot module reloading" do
161
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--no-hot"]
162
+
163
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
164
+ double(
165
+ host: "localhost",
166
+ port: "3035",
167
+ pretty?: false,
168
+ protocol: "http",
169
+ hmr?: false
170
+ )
171
+ )
172
+
173
+ verify_command(cmd)
174
+ end
175
+
176
+ it "supports --hot being 'only'" do
177
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/webpack.config.js", "--hot", "only"]
178
+
179
+ allow(Shakapacker::DevServer).to receive(:new).and_return(
180
+ double(
181
+ host: "localhost",
182
+ port: "3035",
183
+ pretty?: false,
184
+ protocol: "http",
185
+ hmr?: "only"
186
+ )
187
+ )
104
188
 
105
- allow(Shakapacker::DevServer).to receive(:new) do
106
- verify_command(cmd, argv: (["--https"]))
107
- end.and_return(dev_server)
189
+ verify_command(cmd)
108
190
  end
109
191
 
110
192
  it "accepts environment variables" do
@@ -28,7 +28,29 @@ describe "DigestStrategy" do
28
28
  expect(@digest_strategy.fresh?).to be true
29
29
  end
30
30
 
31
+ it "is stale when host changes" do
32
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("old-host")
33
+ # Record the digests for old-host
34
+ @digest_strategy.after_compile_hook
35
+
36
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("new-host")
37
+ expect(@digest_strategy.stale?).to be true
38
+ expect(@digest_strategy.fresh?).to be_falsey
39
+ end
40
+
31
41
  it "generates correct compilation_digest_path" do
42
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("custom-path")
43
+
44
+ actual_path = @digest_strategy.send(:compilation_digest_path).basename.to_s
45
+ host_hash = Digest::SHA1.hexdigest("custom-path")
46
+ expected_path = "last-compilation-digest-#{Shakapacker.env}"
47
+
48
+ expect(actual_path).to eq expected_path
49
+ end
50
+
51
+ it "generates correct compilation_digest_path without the digest of the asset host if asset host is not set" do
52
+ allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return(nil)
53
+
32
54
  actual_path = @digest_strategy.send(:compilation_digest_path).basename.to_s
33
55
  expected_path = "last-compilation-digest-#{Shakapacker.env}"
34
56
 
@@ -22,21 +22,3 @@ ensure
22
22
  Rails.env = ActiveSupport::StringInquirer.new(original)
23
23
  reloaded_config
24
24
  end
25
-
26
- # Temportarily set env variables to a custom value
27
- # arg: a hash with key:value for each custom env
28
- # Keys could be string or symbol
29
- def with_env_variable(custom_env_hash)
30
- original_env = {}
31
- custom_env_hash.each do |key, new_value|
32
- upcased_key = key.to_s.upcase
33
- original_env[upcased_key] = new_value
34
- ENV[upcased_key] = new_value
35
- end
36
-
37
- yield
38
- ensure
39
- original_env.each do |key, original_value|
40
- ENV[key] = original_value
41
- end
42
- end
@@ -47,7 +47,7 @@ development:
47
47
  host: localhost
48
48
  port: 3035
49
49
  public: localhost:3035
50
- hmr: false
50
+ hmr: true
51
51
  overlay: true
52
52
  disable_host_check: true
53
53
  use_local_ip: false
@@ -42,7 +42,7 @@ development:
42
42
  host: localhost
43
43
  port: 3035
44
44
  public: localhost:3035
45
- hmr: false
45
+ hmr: true
46
46
  # If HMR is on, CSS will by inlined by delivering it as part of the script payload via style-loader. Be sure
47
47
  # that you add style-loader to your project dependencies.
48
48
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shakapacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0.rc.0
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-10-31 00:00:00.000000000 Z
13
+ date: 2023-12-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -566,7 +566,7 @@ homepage: https://github.com/shakacode/shakapacker
566
566
  licenses:
567
567
  - MIT
568
568
  metadata:
569
- source_code_uri: https://github.com/shakacode/shakapacker/tree/v7.2.0-rc.0
569
+ source_code_uri: https://github.com/shakacode/shakapacker/tree/v7.2.0
570
570
  post_install_message:
571
571
  rdoc_options: []
572
572
  require_paths:
@@ -578,9 +578,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
578
578
  version: 2.6.0
579
579
  required_rubygems_version: !ruby/object:Gem::Requirement
580
580
  requirements:
581
- - - ">"
581
+ - - ">="
582
582
  - !ruby/object:Gem::Version
583
- version: 1.3.1
583
+ version: '0'
584
584
  requirements: []
585
585
  rubygems_version: 3.4.12
586
586
  signing_key: