shakapacker 6.5.5 → 6.5.6

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.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +11 -7
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  4. data/.github/workflows/ruby.yml +3 -1
  5. data/.gitignore +3 -3
  6. data/.rspec +1 -0
  7. data/CHANGELOG.md +18 -2
  8. data/CONTRIBUTING.md +11 -1
  9. data/Gemfile.development_dependencies +3 -1
  10. data/README.md +41 -8
  11. data/Rakefile +4 -5
  12. data/gemfiles/Gemfile-rails-edge +1 -1
  13. data/gemfiles/Gemfile-rails.5.2.x +1 -1
  14. data/gemfiles/Gemfile-rails.6.0.x +1 -1
  15. data/gemfiles/Gemfile-rails.6.1.x +1 -1
  16. data/gemfiles/Gemfile-rails.7.0.x +1 -1
  17. data/lib/install/template.rb +21 -16
  18. data/lib/tasks/webpacker/compile.rake +5 -10
  19. data/lib/webpacker/helper.rb +20 -9
  20. data/lib/webpacker/version.rb +1 -1
  21. data/package/rules/__tests__/__utils__/webpack.js +50 -0
  22. data/package/rules/__tests__/babel.js +63 -0
  23. data/package/rules/__tests__/esbuild.js +64 -0
  24. data/package/rules/__tests__/index.js +0 -4
  25. data/package/rules/__tests__/swc.js +64 -0
  26. data/package/rules/babel.js +3 -14
  27. data/package/rules/esbuild.js +2 -13
  28. data/package/rules/jscommon.js +26 -0
  29. data/package/rules/swc.js +2 -13
  30. data/package/utils/helpers.js +1 -1
  31. data/package.json +8 -2
  32. data/spec/command_spec.rb +114 -0
  33. data/spec/compiler_spec.rb +57 -0
  34. data/spec/compiler_strategy_spec.rb +20 -0
  35. data/spec/configuration_spec.rb +281 -0
  36. data/{test/dev_server_runner_test.rb → spec/dev_server_runner_spec.rb} +30 -40
  37. data/spec/dev_server_spec.rb +45 -0
  38. data/spec/digest_strategy_spec.rb +33 -0
  39. data/{test/engine_rake_tasks_test.rb → spec/engine_rake_tasks_spec.rb} +17 -9
  40. data/spec/env_spec.rb +21 -0
  41. data/{test → spec}/fixtures/beta_package-lock.v1.json +0 -0
  42. data/{test → spec}/fixtures/beta_package-lock.v2.json +0 -0
  43. data/{test → spec}/fixtures/beta_package.json +0 -0
  44. data/{test → spec}/fixtures/beta_yarn.v1.lock +0 -0
  45. data/{test → spec}/fixtures/beta_yarn.v2.lock +0 -0
  46. data/{test → spec}/fixtures/git_url_package-lock.v1.json +0 -0
  47. data/{test → spec}/fixtures/git_url_package-lock.v2.json +0 -0
  48. data/{test → spec}/fixtures/git_url_package.json +0 -0
  49. data/{test → spec}/fixtures/git_url_yarn.v1.lock +0 -0
  50. data/{test → spec}/fixtures/git_url_yarn.v2.lock +0 -0
  51. data/{test → spec}/fixtures/github_url_package-lock.v1.json +0 -0
  52. data/{test → spec}/fixtures/github_url_package-lock.v2.json +0 -0
  53. data/{test → spec}/fixtures/github_url_package.json +0 -0
  54. data/{test → spec}/fixtures/github_url_yarn.v1.lock +0 -0
  55. data/{test → spec}/fixtures/github_url_yarn.v2.lock +0 -0
  56. data/{test → spec}/fixtures/relative_path_package-lock.v1.json +0 -0
  57. data/{test → spec}/fixtures/relative_path_package-lock.v2.json +0 -0
  58. data/{test → spec}/fixtures/relative_path_package.json +0 -0
  59. data/{test → spec}/fixtures/relative_path_yarn.v1.lock +0 -0
  60. data/{test → spec}/fixtures/relative_path_yarn.v2.lock +0 -0
  61. data/{test → spec}/fixtures/semver_caret_package-lock.v1.json +0 -0
  62. data/{test → spec}/fixtures/semver_caret_package-lock.v2.json +0 -0
  63. data/{test → spec}/fixtures/semver_caret_package.json +0 -0
  64. data/{test → spec}/fixtures/semver_caret_yarn.v1.lock +0 -0
  65. data/{test → spec}/fixtures/semver_caret_yarn.v2.lock +0 -0
  66. data/{test → spec}/fixtures/semver_exact_package-lock.v1.json +0 -0
  67. data/{test → spec}/fixtures/semver_exact_package-lock.v2.json +0 -0
  68. data/{test → spec}/fixtures/semver_exact_package.json +0 -0
  69. data/{test → spec}/fixtures/semver_exact_yarn.v1.lock +0 -0
  70. data/{test → spec}/fixtures/semver_exact_yarn.v2.lock +0 -0
  71. data/{test → spec}/fixtures/semver_tilde_package-lock.v1.json +0 -0
  72. data/{test → spec}/fixtures/semver_tilde_package-lock.v2.json +0 -0
  73. data/{test → spec}/fixtures/semver_tilde_package.json +0 -0
  74. data/{test → spec}/fixtures/semver_tilde_yarn.v1.lock +0 -0
  75. data/{test → spec}/fixtures/semver_tilde_yarn.v2.lock +0 -0
  76. data/{test → spec}/fixtures/without_package-lock.v1.json +0 -0
  77. data/{test → spec}/fixtures/without_package-lock.v2.json +0 -0
  78. data/{test → spec}/fixtures/without_package.json +0 -0
  79. data/{test → spec}/fixtures/without_yarn.v1.lock +0 -0
  80. data/{test → spec}/fixtures/without_yarn.v2.lock +0 -0
  81. data/spec/helper_spec.rb +241 -0
  82. data/spec/manifest_spec.rb +98 -0
  83. data/{test → spec}/mounted_app/Rakefile +0 -0
  84. data/{test → spec}/mounted_app/test/dummy/Rakefile +0 -0
  85. data/{test → spec}/mounted_app/test/dummy/bin/rails +0 -0
  86. data/{test → spec}/mounted_app/test/dummy/bin/rake +0 -0
  87. data/{test → spec}/mounted_app/test/dummy/config/application.rb +0 -0
  88. data/{test → spec}/mounted_app/test/dummy/config/environment.rb +0 -0
  89. data/{test → spec}/mounted_app/test/dummy/config/webpacker.yml +0 -0
  90. data/{test → spec}/mounted_app/test/dummy/config.ru +0 -0
  91. data/{test → spec}/mounted_app/test/dummy/package.json +0 -0
  92. data/spec/mtime_strategy_spec.rb +53 -0
  93. data/spec/rake_tasks_spec.rb +32 -0
  94. data/spec/spec_helper.rb +123 -0
  95. data/{test → spec}/test_app/Rakefile +0 -0
  96. data/{test → spec}/test_app/app/packs/entrypoints/application.js +0 -0
  97. data/{test → spec}/test_app/app/packs/entrypoints/generated/something.js +0 -0
  98. data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.css +0 -0
  99. data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.js +0 -0
  100. data/{test → spec}/test_app/bin/webpacker +0 -0
  101. data/{test → spec}/test_app/bin/webpacker-dev-server +0 -0
  102. data/{test → spec}/test_app/config/application.rb +0 -0
  103. data/{test → spec}/test_app/config/environment.rb +0 -0
  104. data/{test → spec}/test_app/config/initializers/inspect_autoload_paths.rb +0 -0
  105. data/{test → spec}/test_app/config/webpack/webpack.config.js +0 -0
  106. data/{test → spec}/test_app/config/webpacker.yml +0 -0
  107. data/{test → spec}/test_app/config/webpacker_css_extract_ignore_order_warnings.yml +0 -0
  108. data/{test → spec}/test_app/config/webpacker_defaults_fallback.yml +0 -0
  109. data/{test → spec}/test_app/config/webpacker_manifest_path.yml +0 -0
  110. data/{test → spec}/test_app/config/webpacker_nested_entries.yml +0 -0
  111. data/{test → spec}/test_app/config/webpacker_no_precompile.yml +0 -0
  112. data/{test → spec}/test_app/config/webpacker_other_location.yml +0 -0
  113. data/{test → spec}/test_app/config/webpacker_public_root.yml +0 -0
  114. data/{test → spec}/test_app/config.ru +0 -0
  115. data/{test → spec}/test_app/package.json +0 -0
  116. data/{test → spec}/test_app/public/packs/manifest.json +8 -0
  117. data/{test → spec}/test_app/some.config.js +0 -0
  118. data/{test → spec}/test_app/yarn.lock +0 -0
  119. data/spec/version_checker_spec.rb +950 -0
  120. data/{test/webpack_runner_test.rb → spec/webpack_runner_spec.rb} +12 -15
  121. data/spec/webpacker_spec.rb +39 -0
  122. data/yarn.lock +846 -844
  123. metadata +102 -187
  124. data/.github/ISSUE_TEMPLATE/feature-request.md +0 -18
  125. data/lib/tasks/yarn.rake +0 -44
  126. data/test/command_test.rb +0 -109
  127. data/test/compiler_strategy_test.rb +0 -27
  128. data/test/compiler_test.rb +0 -60
  129. data/test/configuration_test.rb +0 -186
  130. data/test/dev_server_test.rb +0 -47
  131. data/test/digest_strategy_test.rb +0 -33
  132. data/test/env_test.rb +0 -23
  133. data/test/helper_test.rb +0 -248
  134. data/test/manifest_test.rb +0 -89
  135. data/test/mtime_strategy_test.rb +0 -42
  136. data/test/rake_tasks_test.rb +0 -37
  137. data/test/test_helper.rb +0 -33
  138. data/test/version_checker_test.rb +0 -826
  139. data/test/webpacker_test.rb +0 -49
@@ -0,0 +1,950 @@
1
+ require "webpacker/version"
2
+
3
+ class NodePackageVersionDouble
4
+ attr_reader :raw, :major_minor_patch
5
+
6
+ def initialize(raw: nil, major_minor_patch: nil, semver_wildcard: false, skip_processing: false)
7
+ @raw = raw
8
+ @major_minor_patch = major_minor_patch
9
+ @semver_wildcard = semver_wildcard
10
+ @skip_processing = skip_processing
11
+ end
12
+
13
+ def semver_wildcard?
14
+ @semver_wildcard
15
+ end
16
+
17
+ def skip_processing?
18
+ @skip_processing
19
+ end
20
+ end
21
+
22
+ describe "VersionChecker" do
23
+ def check_version(node_package_version, stub_gem_version = Webpacker::VERSION, stub_config = true)
24
+ version_checker = Webpacker::VersionChecker.new(node_package_version)
25
+ allow(version_checker).to receive(:gem_version).and_return(stub_gem_version)
26
+ allow(Webpacker.config).to receive(:ensure_consistent_versioning?).and_return(stub_config)
27
+
28
+ version_checker.raise_if_gem_and_node_package_versions_differ
29
+ end
30
+
31
+ it "prints error in stderr if consistency check is disabled and version mismatch" do
32
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
33
+
34
+ expect { check_version(node_package_version, "6.0.0", false) }
35
+ .to output(/Webpacker::VersionChecker - Version mismatch/)
36
+ .to_stderr
37
+ end
38
+
39
+ it "prints error in stderr if consistency check is disabled and we have semver" do
40
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.1.0", major_minor_patch: ["6", "1", "0"], semver_wildcard: true)
41
+
42
+ expect { check_version(node_package_version, "6.0.0", false) }
43
+ .to output(/Webpacker::VersionChecker - Semver wildcard without a lockfile detected/)
44
+ .to_stderr
45
+ end
46
+
47
+ it "raises exception on different major version" do
48
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
49
+
50
+ expect { check_version(node_package_version, "7.0.0") }
51
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
52
+ end
53
+
54
+ it "raises exception on different minor version" do
55
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
56
+
57
+ expect { check_version(node_package_version, "6.2.0") }
58
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
59
+ end
60
+
61
+ it "raises exception on different patch version" do
62
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.1", major_minor_patch: ["6", "1", "1"])
63
+
64
+ expect { check_version(node_package_version, "6.1.2") }
65
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
66
+ end
67
+
68
+ it "raises exception on semver wildcard" do
69
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.0.0", major_minor_patch: ["6", "0", "0"], semver_wildcard: true)
70
+
71
+ expect { check_version(node_package_version, "6.0.0") }
72
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Your node package version for shakapacker contains a \^ or ~/)
73
+ end
74
+
75
+ it "doesn't raise exception on matching versions" do
76
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0", major_minor_patch: ["6", "0", "0"])
77
+
78
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
79
+ end
80
+
81
+ it "doesn't raise exception on matching versions beta" do
82
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0-beta.1", major_minor_patch: ["6", "0", "0"])
83
+
84
+ expect { check_version(node_package_version, "6.0.0.beta.1") }.to_not raise_error
85
+ end
86
+
87
+ it "doesn't raise exception on no package" do
88
+ node_package_version = NodePackageVersionDouble.new(raw: nil, skip_processing: true)
89
+
90
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
91
+ end
92
+
93
+ it "doesn't raise exception on skipped path" do
94
+ node_package_version = NodePackageVersionDouble.new(raw: "../..", skip_processing: true)
95
+
96
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
97
+ end
98
+ end
99
+
100
+ describe "VersionChecker::NodePackageVersion" do
101
+ context "with no yarn.lock file" do
102
+ def node_package_version(fixture_version:)
103
+ Webpacker::VersionChecker::NodePackageVersion.new(
104
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
105
+ "file/does/not/exist",
106
+ "file/does/not/exist"
107
+ )
108
+ end
109
+
110
+ context "from exact semantic version" do
111
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
112
+
113
+ it "#raw returns raw version" do
114
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
115
+ end
116
+
117
+ it "#major_minor_patch returns version array" do
118
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
119
+ end
120
+
121
+ it "#skip_processing? returns false" do
122
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
123
+ end
124
+
125
+ it "#semver_wildcard returns false" do
126
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
127
+ end
128
+ end
129
+
130
+ context "from beta version" do
131
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
132
+
133
+ it "#raw returns raw version" do
134
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
135
+ end
136
+
137
+ it "#major_minor_patch returns version array" do
138
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
139
+ end
140
+
141
+ it "#skip_processing? returns false" do
142
+ expect(node_package_version_from_beta.skip_processing?).to be false
143
+ end
144
+
145
+ it "#semver_wildcard? returns false" do
146
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
147
+ end
148
+ end
149
+
150
+ context "from caret semantic version" do
151
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
152
+
153
+ it "#raw returns version" do
154
+ expect(node_package_version_from_semver_caret.raw).to eq "^6.0.0"
155
+ end
156
+
157
+ it "#major_minor_patch returns version array" do
158
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "0", "0"]
159
+ end
160
+
161
+ it "#skip_processing? returns false" do
162
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
163
+ end
164
+
165
+ it "#semver_wildcard? returns true" do
166
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be true
167
+ end
168
+ end
169
+
170
+ context "from tilde semantic version" do
171
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
172
+
173
+ it "#raw returns version" do
174
+ expect(node_package_version_from_semver_tilde.raw).to eq "~6.0.0"
175
+ end
176
+
177
+ it "#major_minor_patch returns version" do
178
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "0"]
179
+ end
180
+
181
+ it "#skip_processing? returns false" do
182
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
183
+ end
184
+
185
+ it "#semver_wildcard? returns true" do
186
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be true
187
+ end
188
+ end
189
+
190
+ context "from relative path" do
191
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
192
+
193
+ it "#raw returns relative path" do
194
+ expect(node_package_version_from_relative_path.raw).to eq "../.."
195
+ end
196
+
197
+ it "#major_minor_patch returns nil" do
198
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
199
+ end
200
+
201
+ it "#skip_processing? returns true" do
202
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
203
+ end
204
+
205
+ it "#semver_wildcard? returns false" do
206
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
207
+ end
208
+ end
209
+
210
+ context "from git url" do
211
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
212
+
213
+ it "#raw returns git url" do
214
+ expect(node_package_version_from_git_url.raw).to eq "git@github.com:shakacode/shakapacker.git"
215
+ end
216
+
217
+ it "#major_minor_patch returns nil" do
218
+ expect(node_package_version_from_git_url.major_minor_patch).to be nil
219
+ end
220
+
221
+ it "#skip_processing? returns true" do
222
+ expect(node_package_version_from_git_url.skip_processing?).to be true
223
+ end
224
+
225
+ it "#semver_wildcard? returns false" do
226
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
227
+ end
228
+ end
229
+
230
+ context "from github url" do
231
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
232
+
233
+ it "#raw returns GitHub repo address" do
234
+ expect(node_package_version_from_github_url.raw).to eq "shakacode/shakapacker#master"
235
+ end
236
+
237
+ it "#major_minor_patch returns nil" do
238
+ expect(node_package_version_from_github_url.major_minor_patch).to be nil
239
+ end
240
+
241
+ it "#skip_processing returns true" do
242
+ expect(node_package_version_from_github_url.skip_processing?).to be true
243
+ end
244
+
245
+ it "#semver_wildcard returns false" do
246
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
247
+ end
248
+ end
249
+
250
+ context "from package.json without shakapacker entry" do
251
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
252
+
253
+ it "#raw returns empty string" do
254
+ expect(node_package_version_from_without.raw).to eq ""
255
+ end
256
+
257
+ it "#major_minor_patch returns nil" do
258
+ expect(node_package_version_from_without.major_minor_patch).to be nil
259
+ end
260
+
261
+ it "#skip_processing? returns true" do
262
+ expect(node_package_version_from_without.skip_processing?).to be true
263
+ end
264
+
265
+ it "#semver_wildcard? returns false" do
266
+ expect(node_package_version_from_without.semver_wildcard?).to be false
267
+ end
268
+ end
269
+ end
270
+
271
+ context "with yarn.lock v1" do
272
+ def node_package_version(fixture_version:)
273
+ Webpacker::VersionChecker::NodePackageVersion.new(
274
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
275
+ File.expand_path("fixtures/#{fixture_version}_yarn.v1.lock", __dir__),
276
+ "file/does/not/exist"
277
+ )
278
+ end
279
+
280
+ context "from exact semantic version" do
281
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
282
+
283
+ it "#raw returns version" do
284
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
285
+ end
286
+
287
+ it "#major_minor_patch returns version array" do
288
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
289
+ end
290
+
291
+ it "#skip_processing? returns false" do
292
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
293
+ end
294
+
295
+ it "#semver_wildcard? returns false" do
296
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
297
+ end
298
+ end
299
+
300
+ context "from beta version" do
301
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
302
+
303
+ it "#raw returns version" do
304
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
305
+ end
306
+
307
+ it "#major_minor_patch returns version array" do
308
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
309
+ end
310
+
311
+ it "#skip_processing? returns false" do
312
+ expect(node_package_version_from_beta.skip_processing?).to be false
313
+ end
314
+
315
+ it "#semver_wildcard? returns false" do
316
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
317
+ end
318
+ end
319
+
320
+ context "from caret semantic version" do
321
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
322
+
323
+ it "#raw returns version" do
324
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
325
+ end
326
+
327
+ it "#major_minor_patch returns version array" do
328
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
329
+ end
330
+
331
+ it "#skip_processing? false" do
332
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
333
+ end
334
+
335
+ it "#semver_wildcard? false" do
336
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
337
+ end
338
+ end
339
+
340
+ context "from tilde semantic version" do
341
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
342
+
343
+ it "#raw returns version" do
344
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
345
+ end
346
+
347
+ it "#major_minor_patch returns version array" do
348
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
349
+ end
350
+
351
+ it "#skip_processing? returns false" do
352
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
353
+ end
354
+
355
+ it "#semver_wildcard? returns false" do
356
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
357
+ end
358
+ end
359
+
360
+ context "from relative path" do
361
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
362
+
363
+ it "#raw returns version" do
364
+ expect(node_package_version_from_relative_path.raw).to eq "6.5.0"
365
+ end
366
+
367
+ it "#major_minor_patch returns version array" do
368
+ expect(node_package_version_from_relative_path.major_minor_patch).to eq ["6", "5", "0"]
369
+ end
370
+
371
+ it "#skip_processing? returns false" do
372
+ expect(node_package_version_from_relative_path.skip_processing?).to be false
373
+ end
374
+
375
+ it "#semver_wildcard? returns false" do
376
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
377
+ end
378
+ end
379
+
380
+ context "from git url" do
381
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
382
+
383
+ it "#raw returns version" do
384
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
385
+ end
386
+
387
+ it "#major_minor_patch returns version array" do
388
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
389
+ end
390
+
391
+ it "#skip_processing? returns false" do
392
+ expect(node_package_version_from_git_url.skip_processing?).to be false
393
+ end
394
+
395
+ it "#semver_wildcard? returns false" do
396
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
397
+ end
398
+ end
399
+
400
+ context "from GitHub url" do
401
+ let(:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
402
+
403
+ it "#raw returns version" do
404
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
405
+ end
406
+
407
+ it "#major_minor_patch returns version array" do
408
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
409
+ end
410
+
411
+ it "#skip_processing? returns false" do
412
+ expect(node_package_version_from_github_url.skip_processing?).to be false
413
+ end
414
+
415
+ it "#semver_wildcard? returns false" do
416
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
417
+ end
418
+ end
419
+
420
+ context "from package.json without shakapacker entry" do
421
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
422
+
423
+ it "#raw returns empty string" do
424
+ expect(node_package_version_from_without.raw).to eq ""
425
+ end
426
+
427
+ it "#major_minor_patch returns nil" do
428
+ expect(node_package_version_from_without.major_minor_patch).to be nil
429
+ end
430
+
431
+ it "#skip_processing? returns true" do
432
+ expect(node_package_version_from_without.skip_processing?).to be true
433
+ end
434
+
435
+ it "#semver_wildcard? returns false" do
436
+ expect(node_package_version_from_without.semver_wildcard?).to be false
437
+ end
438
+ end
439
+ end
440
+
441
+ context "with yarn.lock v2" do
442
+ def node_package_version(fixture_version:)
443
+ Webpacker::VersionChecker::NodePackageVersion.new(
444
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
445
+ File.expand_path("fixtures/#{fixture_version}_yarn.v2.lock", __dir__),
446
+ "file/does/not/exist"
447
+ )
448
+ end
449
+
450
+ context "from exact semantic version" do
451
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
452
+
453
+ it "#raw retruns version" do
454
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
455
+ end
456
+
457
+ it "#major_minor_patch retruns version array" do
458
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
459
+ end
460
+
461
+ it "#skip_processing? retruns false" do
462
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
463
+ end
464
+
465
+ it "#semver_wildcard? retruns false" do
466
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
467
+ end
468
+ end
469
+
470
+ context "from beta version" do
471
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
472
+
473
+ it "#raw returns version" do
474
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
475
+ end
476
+
477
+ it "#major_minor_patch returns version array" do
478
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
479
+ end
480
+
481
+ it "#skip_processing? returns false" do
482
+ expect(node_package_version_from_beta.skip_processing?).to be false
483
+ end
484
+
485
+ it "#semver_wildcard? returns false" do
486
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
487
+ end
488
+ end
489
+
490
+ context "from caret semantic version" do
491
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
492
+
493
+ it "#raw returns version" do
494
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
495
+ end
496
+
497
+ it "#major_minor_patch returns version array" do
498
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
499
+ end
500
+
501
+ it "#skip_processing? returns false" do
502
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
503
+ end
504
+
505
+ it "#semver_wildcard? returns false" do
506
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
507
+ end
508
+ end
509
+
510
+ context "from tilde semantic version" do
511
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
512
+
513
+ it "#raw returns version" do
514
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
515
+ end
516
+
517
+ it "#major_minor_patch returns version array" do
518
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
519
+ end
520
+
521
+ it "#skip_processing? returns false" do
522
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
523
+ end
524
+
525
+ it "#semver_wildcard? returns false" do
526
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
527
+ end
528
+ end
529
+
530
+ context "from relative path" do
531
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
532
+
533
+ it "#raw returns version" do
534
+ expect(node_package_version_from_relative_path.raw).to eq "6.5.0"
535
+ end
536
+
537
+ it "#major_minor_patch returns version array" do
538
+ expect(node_package_version_from_relative_path.major_minor_patch).to eq ["6", "5", "0"]
539
+ end
540
+
541
+ it "#skip_processing? returns false" do
542
+ expect(node_package_version_from_relative_path.skip_processing?).to be false
543
+ end
544
+
545
+ it "#semver_wildcard? returns false" do
546
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
547
+ end
548
+ end
549
+
550
+ context "from git url" do
551
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
552
+
553
+ it "#raw returns version" do
554
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
555
+ end
556
+
557
+ it "#major_minor_patch returns version array" do
558
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
559
+ end
560
+
561
+ it "#skip_processing? returns false" do
562
+ expect(node_package_version_from_git_url.skip_processing?).to be false
563
+ end
564
+
565
+ it "#semver_wildcard? returns false" do
566
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
567
+ end
568
+ end
569
+
570
+ context "from github url" do
571
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
572
+
573
+ it "#raw return version" do
574
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
575
+ end
576
+
577
+ it "#major_minor_patch return version array" do
578
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
579
+ end
580
+
581
+ it "#skip_processing? return false" do
582
+ expect(node_package_version_from_github_url.skip_processing?).to be false
583
+ end
584
+
585
+ it "#semver_wildcard? return false" do
586
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
587
+ end
588
+ end
589
+
590
+ context "from package.json without shakapacker entry" do
591
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
592
+
593
+ it "#raw returns empty string" do
594
+ expect(node_package_version_from_without.raw).to eq ""
595
+ end
596
+
597
+ it "#major_minor_patch returns nil" do
598
+ expect(node_package_version_from_without.major_minor_patch).to be nil
599
+ end
600
+
601
+ it "#skip_processing? returns true" do
602
+ expect(node_package_version_from_without.skip_processing?).to be true
603
+ end
604
+
605
+ it "#semver_wildcard? returns false" do
606
+ expect(node_package_version_from_without.semver_wildcard?).to be false
607
+ end
608
+ end
609
+ end
610
+
611
+ context "with package-lock.json v1" do
612
+ def node_package_version(fixture_version:)
613
+ Webpacker::VersionChecker::NodePackageVersion.new(
614
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
615
+ "file/does/not/exist",
616
+ File.expand_path("fixtures/#{fixture_version}_package-lock.v1.json", __dir__),
617
+ )
618
+ end
619
+
620
+ context "from exact semantic version" do
621
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
622
+
623
+ it "#raw returns version" do
624
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
625
+ end
626
+
627
+ it "#major_minor_patch returns version array" do
628
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
629
+ end
630
+
631
+ it "#skip_processing? returns false" do
632
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
633
+ end
634
+
635
+ it "#semver_wildcard? returns false" do
636
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
637
+ end
638
+ end
639
+
640
+ context "from beta version" do
641
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
642
+
643
+ it "#raw returns version" do
644
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
645
+ end
646
+
647
+ it "#major_minor_patch returns version array" do
648
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
649
+ end
650
+
651
+ it "#skip_processing? returns false" do
652
+ expect(node_package_version_from_beta.skip_processing?).to be false
653
+ end
654
+
655
+ it "#semver_wildcard? returns false" do
656
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
657
+ end
658
+ end
659
+
660
+ context "from caret semantic version" do
661
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
662
+
663
+ it "#raw returns version" do
664
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
665
+ end
666
+
667
+ it "#major_minor_patch returns version array" do
668
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
669
+ end
670
+
671
+ it "#skip_processing? returns false" do
672
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
673
+ end
674
+
675
+ it "#semver_wildcard? returns false" do
676
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
677
+ end
678
+ end
679
+
680
+ context "from tilde semantic version" do
681
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
682
+
683
+ it "#raw returns version" do
684
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
685
+ end
686
+
687
+ it "#major_minor_patch returns version array" do
688
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
689
+ end
690
+
691
+ it "#skip_processing? returns false" do
692
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
693
+ end
694
+
695
+ it "#semver_wildcard? returns false" do
696
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
697
+ end
698
+ end
699
+
700
+ context "from relative path" do
701
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
702
+
703
+ it "#raw returns relative path" do
704
+ expect(node_package_version_from_relative_path.raw).to eq "file:../.."
705
+ end
706
+
707
+ it "#major_minor_patch returns nil" do
708
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
709
+ end
710
+
711
+ it "#skip_processing? returns true" do
712
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
713
+ end
714
+
715
+ it "#semver_wildcard? returns false" do
716
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
717
+ end
718
+ end
719
+
720
+ context "from git url" do
721
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
722
+
723
+ it "#raw returns git url" do
724
+ expect(node_package_version_from_git_url.raw).to eq "git+ssh://git@github.com/shakacode/shakapacker.git#31854a58be49f736f3486a946b72d7e4f334e2b2"
725
+ end
726
+
727
+ it "#major_minor_patch returns nil" do
728
+ expect(node_package_version_from_git_url.major_minor_patch).to be nil
729
+ end
730
+
731
+ it "#skip_processing? returns true" do
732
+ expect(node_package_version_from_git_url.skip_processing?).to be true
733
+ end
734
+
735
+ it "#semver_wildcard? returns false" do
736
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
737
+ end
738
+ end
739
+
740
+ context "from github url" do
741
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
742
+
743
+ it "#raw returns GitHub address" do
744
+ expect(node_package_version_from_github_url.raw).to eq "github:shakacode/shakapacker#31854a58be49f736f3486a946b72d7e4f334e2b2"
745
+ end
746
+
747
+ it "#major_minor_patch returns nil" do
748
+ expect(node_package_version_from_github_url.major_minor_patch).to be nil
749
+ end
750
+
751
+ it "#skip_processing? returns true" do
752
+ expect(node_package_version_from_github_url.skip_processing?).to be true
753
+ end
754
+
755
+ it "#semver_wildcard? returns false" do
756
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
757
+ end
758
+ end
759
+
760
+ context "from package.json without shakapacker entry" do
761
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
762
+
763
+ it "#raw returns empty string" do
764
+ expect(node_package_version_from_without.raw).to eq ""
765
+ end
766
+
767
+ it "#major_minor_patch returns nil" do
768
+ expect(node_package_version_from_without.major_minor_patch).to be nil
769
+ end
770
+
771
+ it "#skip_processing? returns true" do
772
+ expect(node_package_version_from_without.skip_processing?).to be true
773
+ end
774
+
775
+ it "#semver_wildcard? returns false" do
776
+ expect(node_package_version_from_without.semver_wildcard?).to be false
777
+ end
778
+ end
779
+ end
780
+
781
+ context "with package-lock.json v2" do
782
+ def node_package_version(fixture_version:)
783
+ Webpacker::VersionChecker::NodePackageVersion.new(
784
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
785
+ "file/does/not/exist",
786
+ File.expand_path("fixtures/#{fixture_version}_package-lock.v2.json", __dir__),
787
+ )
788
+ end
789
+
790
+ context "from exact semantic version" do
791
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
792
+
793
+ it "#raw returns version" do
794
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
795
+ end
796
+
797
+ it "#major_minor_patch returns version array" do
798
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
799
+ end
800
+
801
+ it "#skip_processing? returns false" do
802
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
803
+ end
804
+
805
+ it "#semver_wildcard? returns false" do
806
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
807
+ end
808
+ end
809
+
810
+ context "from beta version" do
811
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
812
+
813
+ it "#raw returns version" do
814
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
815
+ end
816
+
817
+ it "#major_minor_patch returns version array" do
818
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
819
+ end
820
+
821
+ it "#skip_processing? returns false" do
822
+ expect(node_package_version_from_beta.skip_processing?).to be false
823
+ end
824
+
825
+ it "#semver_wildcard? returns false" do
826
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
827
+ end
828
+ end
829
+
830
+ context "from caret semantic version" do
831
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
832
+
833
+ it "#raw returns version" do
834
+ expect(node_package_version(fixture_version: "semver_caret").raw).to eq "6.5.0"
835
+ end
836
+
837
+ it "#major_minor_patch returns version array" do
838
+ expect(node_package_version(fixture_version: "semver_caret").major_minor_patch).to eq ["6", "5", "0"]
839
+ end
840
+
841
+ it "#skip_processing? returns false" do
842
+ expect(node_package_version(fixture_version: "semver_caret").skip_processing?).to be false
843
+ end
844
+
845
+ it "#semver_wildcard? returns false" do
846
+ expect(node_package_version(fixture_version: "semver_caret").semver_wildcard?).to be false
847
+ end
848
+ end
849
+
850
+ context "from tilde semantic version" do
851
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
852
+
853
+ it "#raw returns version" do
854
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
855
+ end
856
+
857
+ it "#major_minor_patch returns version array" do
858
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
859
+ end
860
+
861
+ it "#skip_processing? returns false" do
862
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
863
+ end
864
+
865
+ it "#semver_wildcard? returns false" do
866
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
867
+ end
868
+ end
869
+
870
+ context "from relative path" do
871
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
872
+
873
+ it "#raw returns relative path" do
874
+ expect(node_package_version_from_relative_path.raw).to eq "../.."
875
+ end
876
+
877
+ it "#major_minor_patch returns nil" do
878
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
879
+ end
880
+
881
+ it "#skip_processing? returns true" do
882
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
883
+ end
884
+
885
+ it "#semver_wildcard? returns false" do
886
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
887
+ end
888
+ end
889
+
890
+ context "from git url" do
891
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
892
+
893
+ it "#raw returns version" do
894
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
895
+ end
896
+
897
+ it "#major_minor_patch returns version array" do
898
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
899
+ end
900
+
901
+ it "#skip_processing? returns false" do
902
+ expect(node_package_version_from_git_url.skip_processing?).to be false
903
+ end
904
+
905
+ it "#semver_wildcard? returns false" do
906
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
907
+ end
908
+ end
909
+
910
+ context "from github url" do
911
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
912
+
913
+ it "#raw returns version" do
914
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
915
+ end
916
+
917
+ it "#major_minor_patch returns version array" do
918
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
919
+ end
920
+
921
+ it "#skip_processing? returns false" do
922
+ expect(node_package_version_from_github_url.skip_processing?).to be false
923
+ end
924
+
925
+ it "#semver_wildcard? returns false" do
926
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
927
+ end
928
+ end
929
+
930
+ context "from package.json without shakapacker entry" do
931
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
932
+
933
+ it "#raw returns empty string" do
934
+ expect(node_package_version_from_without.raw).to eq ""
935
+ end
936
+
937
+ it "#major_minor_patch returns nil" do
938
+ expect(node_package_version_from_without.major_minor_patch).to be nil
939
+ end
940
+
941
+ it "#skip_processing? returns true" do
942
+ expect(node_package_version_from_without.skip_processing?).to be true
943
+ end
944
+
945
+ it "#semver_wildcard? returns false" do
946
+ expect(node_package_version_from_without.semver_wildcard?).to be false
947
+ end
948
+ end
949
+ end
950
+ end