shakapacker 6.5.4 → 7.0.2

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