react_on_rails 13.4.0 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -2
  3. data/Gemfile.development_dependencies +10 -8
  4. data/README.md +2 -2
  5. data/lib/generators/react_on_rails/base_generator.rb +10 -2
  6. data/lib/generators/react_on_rails/dev_tests_generator.rb +1 -1
  7. data/lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml +1 -1
  8. data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +2 -2
  9. data/lib/generators/react_on_rails/templates/dev_tests/spec/system/hello_world_spec.rb +1 -1
  10. data/lib/react_on_rails/configuration.rb +39 -25
  11. data/lib/react_on_rails/git_utils.rb +3 -3
  12. data/lib/react_on_rails/helper.rb +2 -2
  13. data/lib/react_on_rails/json_output.rb +0 -17
  14. data/lib/react_on_rails/locales/base.rb +4 -4
  15. data/lib/react_on_rails/locales/to_js.rb +1 -1
  16. data/lib/react_on_rails/packs_generator.rb +2 -4
  17. data/lib/react_on_rails/react_component/render_options.rb +1 -1
  18. data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +9 -9
  19. data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +3 -3
  20. data/lib/react_on_rails/test_helper.rb +2 -2
  21. data/lib/react_on_rails/utils.rb +2 -8
  22. data/lib/react_on_rails/version.rb +1 -1
  23. data/lib/react_on_rails/version_checker.rb +2 -2
  24. data/lib/react_on_rails/webpacker_utils.rb +6 -0
  25. data/lib/tasks/assets.rake +1 -1
  26. data/react_on_rails.gemspec +4 -4
  27. metadata +4 -132
  28. data/.bookignore +0 -15
  29. data/.circleci/config.yml +0 -338
  30. data/.coveralls.yml +0 -1
  31. data/.dockerignore +0 -2
  32. data/.eslintignore +0 -17
  33. data/.eslintrc +0 -53
  34. data/.github/FUNDING.yml +0 -1
  35. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -23
  36. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  37. data/.github/PULL_REQUEST_TEMPLATE.md +0 -19
  38. data/.github/workflows/lint-js-and-ruby.yml +0 -54
  39. data/.github/workflows/main.yml +0 -183
  40. data/.github/workflows/package-js-tests.yml +0 -35
  41. data/.github/workflows/rspec-package-specs.yml +0 -46
  42. data/.gitignore +0 -33
  43. data/.npmignore +0 -22
  44. data/.prettierignore +0 -14
  45. data/.prettierrc +0 -20
  46. data/.rspec +0 -2
  47. data/.rubocop.yml +0 -134
  48. data/.scss-lint.yml +0 -205
  49. data/.travis.yml +0 -61
  50. data/book.json +0 -18
  51. data/docs/additional-details/generator-details.md +0 -56
  52. data/docs/additional-details/manual-installation-overview.md +0 -30
  53. data/docs/additional-details/migrating-from-react-rails.md +0 -17
  54. data/docs/additional-details/recommended-project-structure.md +0 -69
  55. data/docs/additional-details/tips-for-usage-with-sp6.md +0 -15
  56. data/docs/additional-details/updating-dependencies.md +0 -31
  57. data/docs/additional-details/upgrade-webpacker-v3-to-v4.md +0 -10
  58. data/docs/api/javascript-api.md +0 -99
  59. data/docs/api/redux-store-api.md +0 -102
  60. data/docs/api/view-helpers-api.md +0 -133
  61. data/docs/contributor-info/errors-with-hooks.md +0 -45
  62. data/docs/contributor-info/generator-testing.md +0 -11
  63. data/docs/contributor-info/linters.md +0 -68
  64. data/docs/contributor-info/pull-requests.md +0 -42
  65. data/docs/contributor-info/releasing.md +0 -76
  66. data/docs/deployment/elastic-beanstalk.md +0 -63
  67. data/docs/deployment/heroku-deployment.md +0 -39
  68. data/docs/getting-started.md +0 -196
  69. data/docs/guides/client-vs-server-rendering.md +0 -27
  70. data/docs/guides/configuration.md +0 -289
  71. data/docs/guides/deployment.md +0 -5
  72. data/docs/guides/file-system-based-automated-bundle-generation.md +0 -197
  73. data/docs/guides/hmr-and-hot-reloading-with-the-webpack-dev-server.md +0 -104
  74. data/docs/guides/how-react-on-rails-works.md +0 -44
  75. data/docs/guides/how-to-conditionally-server-render-based-on-device-type.md +0 -40
  76. data/docs/guides/how-to-use-different-files-for-client-and-server-rendering.md +0 -98
  77. data/docs/guides/i18n.md +0 -87
  78. data/docs/guides/installation-into-an-existing-rails-app.md +0 -66
  79. data/docs/guides/minitest-configuration.md +0 -31
  80. data/docs/guides/rails-webpacker-react-integration-options.md +0 -213
  81. data/docs/guides/react-on-rails-overview.md +0 -29
  82. data/docs/guides/react-server-rendering.md +0 -32
  83. data/docs/guides/render-functions-and-railscontext.md +0 -205
  84. data/docs/guides/rspec-configuration.md +0 -73
  85. data/docs/guides/tutorial.md +0 -371
  86. data/docs/guides/upgrading-react-on-rails.md +0 -304
  87. data/docs/guides/webpack-configuration.md +0 -42
  88. data/docs/home.md +0 -23
  89. data/docs/javascript/angular-js-integration-migration.md +0 -28
  90. data/docs/javascript/asset-pipeline.md +0 -12
  91. data/docs/javascript/capistrano-deployment.md +0 -18
  92. data/docs/javascript/code-splitting.md +0 -165
  93. data/docs/javascript/converting-from-custom-webpack-config-to-rails-webpacker-config.md +0 -10
  94. data/docs/javascript/credits.md +0 -10
  95. data/docs/javascript/foreman-issues.md +0 -15
  96. data/docs/javascript/images.md +0 -57
  97. data/docs/javascript/node-dependencies-and-npm.md +0 -19
  98. data/docs/javascript/react-and-redux.md +0 -36
  99. data/docs/javascript/react-helmet.md +0 -100
  100. data/docs/javascript/react-router.md +0 -90
  101. data/docs/javascript/server-rendering-tips.md +0 -55
  102. data/docs/javascript/troubleshooting-when-using-shakapacker.md +0 -77
  103. data/docs/javascript/troubleshooting-when-using-webpacker.md +0 -90
  104. data/docs/javascript/webpack-v1-notes.md +0 -23
  105. data/docs/javascript/webpack.md +0 -22
  106. data/docs/misc/articles.md +0 -20
  107. data/docs/misc/code_of_conduct.md +0 -13
  108. data/docs/misc/doctrine.md +0 -77
  109. data/docs/misc/style.md +0 -33
  110. data/docs/misc/tips.md +0 -10
  111. data/docs/outdated/deferred-rendering.md +0 -39
  112. data/docs/outdated/rails-assets-relative-paths.md +0 -195
  113. data/docs/outdated/rails-assets.md +0 -77
  114. data/docs/outdated/rails3.md +0 -9
  115. data/docs/rails/convert-rails-5-api-only-app.md +0 -19
  116. data/docs/rails/rails-engine-integration.md +0 -32
  117. data/docs/rails/rails_view_rendering_from_inline_javascript.md +0 -36
  118. data/docs/rails/turbolinks.md +0 -124
  119. data/docs/react-on-rails-pro/react-on-rails-pro.md +0 -43
  120. data/docs/testimonials/hvmn.md +0 -25
  121. data/docs/testimonials/resortpass.md +0 -13
  122. data/docs/testimonials/testimonials.md +0 -28
  123. data/jest.config.js +0 -4
  124. data/package-scripts.yml +0 -49
  125. data/package.json +0 -96
  126. data/rakelib/docker.rake +0 -26
  127. data/rakelib/dummy_apps.rake +0 -30
  128. data/rakelib/example_type.rb +0 -96
  129. data/rakelib/examples.rake +0 -64
  130. data/rakelib/examples_config.yml +0 -14
  131. data/rakelib/lint.rake +0 -30
  132. data/rakelib/node_package.rake +0 -15
  133. data/rakelib/release.rake +0 -92
  134. data/rakelib/run_rspec.rake +0 -103
  135. data/rakelib/task_helpers.rb +0 -62
  136. data/script/bootstrap +0 -33
  137. data/script/release +0 -3
  138. data/script/setup +0 -23
  139. data/script/test +0 -38
  140. data/webpackConfigLoader.js +0 -71
  141. data/yarn.lock +0 -7010
data/package-scripts.yml DELETED
@@ -1,49 +0,0 @@
1
- scripts:
2
- lint:
3
- description: Run all linters (eslint, tsc)
4
- script: concurrently --prefix "[{name}]" --names "ESLINT" -c "blue,yellow,magenta,orange" "nps eslint"
5
-
6
- eslint:
7
- default:
8
- description: Run eslint.
9
- script: eslint . --ext ".js,.jsx,.ts"
10
- fix:
11
- description: Run eslint and auto-fix.
12
- script: nps "eslint --fix"
13
- debug:
14
- description: Run eslint in debug mode.
15
- script: DEBUG=eslint:cli-engine nps eslint
16
-
17
- format:
18
- default:
19
- description: Format files using prettier.
20
- script: concurrently --prefix "[{name}]" --names "ts,js,json" -c "yellow,magenta,green" "nps format.js" "nps format.json"
21
- listDifferent:
22
- description: Check that all files were formatted using prettier.
23
- script: |
24
- concurrently \
25
- --prefix "[{name}]" \
26
- --names "ts,js,json" \
27
- -c "yellow,magenta" \
28
- "nps format.js.listDifferent" \
29
- "nps format.json.listDifferent"
30
- js:
31
- default:
32
- description: Run prettier-eslint on JS.
33
- #script: prettier "packages/**/*.@(js|jsx)" "spec/dummy/client/app/**/*.@(js|jsx)" "webpack.config.babel.js" "webpack/**/*.js" --write
34
- script: prettier "**/*.@(js|jsx)" --write
35
- listDifferent:
36
- description: Check if any JS files would change by running prettier-eslint.
37
- # script: prettier "**/*.@(js|jsx)" "webpack.config.babel.js" "webpack/**/*.js" --list-different
38
- script: prettier "**/*.@(js|jsx)" --list-different
39
- json:
40
- default:
41
- description: Run prettier on JSON files.
42
- script: rm -rf packages/vm-renderer/tests/tmp && prettier "**/*.json" --write
43
- listDifferent:
44
- description: Check if any JSON files would change by running prettier-eslint.
45
- script: prettier "**/*.json" --list-different
46
-
47
- renderer:
48
- description: Starts the node renderer.
49
- script: node renderer.js
data/package.json DELETED
@@ -1,96 +0,0 @@
1
- {
2
- "name": "react-on-rails",
3
- "version": "13.4.0",
4
- "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
- "main": "node_package/lib/ReactOnRails.js",
6
- "directories": {
7
- "doc": "docs"
8
- },
9
- "devDependencies": {
10
- "@babel/cli": "^7.20.7",
11
- "@babel/core": "^7.20.12",
12
- "@babel/plugin-transform-runtime": "^7.19.6",
13
- "@babel/plugin-transform-typescript": "^7.20.13",
14
- "@babel/preset-env": "^7.20.2",
15
- "@babel/preset-react": "^7.18.6",
16
- "@babel/types": "^7.20.7",
17
- "@types/jest": "^28.1.3",
18
- "@types/react": "^16.14.35",
19
- "@types/react-dom": "^16.9.17",
20
- "@types/turbolinks": "^5.2.0",
21
- "@types/webpack-env": "^1.18.0",
22
- "@typescript-eslint/eslint-plugin": "^4.33.0",
23
- "@typescript-eslint/parser": "^4.33.0",
24
- "babelify": "^10.0.0",
25
- "blue-tape": "^1.0.0",
26
- "create-react-class": "^15.7.0",
27
- "eslint": "^7.32.0",
28
- "eslint-config-prettier": "^7.0.0",
29
- "eslint-config-shakacode": "^16.0.1",
30
- "eslint-plugin-import": "^2.27.5",
31
- "eslint-plugin-jsx-a11y": "^6.7.1",
32
- "eslint-plugin-prettier": "^3.4.1",
33
- "eslint-plugin-react": "^7.32.1",
34
- "jest": "^28.1.3",
35
- "jest-environment-jsdom": "^28.1.3",
36
- "jsdom": "^16.4.0",
37
- "nps": "^5.9.3",
38
- "prettier": "^2.8.3",
39
- "prettier-eslint-cli": "^5.0.0",
40
- "prop-types": "^15.8.1",
41
- "react": "^16.14.0",
42
- "react-dom": "^16.14.0",
43
- "react-transform-hmr": "^1.0.4",
44
- "redux": "^4.2.0",
45
- "ts-jest": "^28.0.8",
46
- "typescript": "^4.9.4"
47
- },
48
- "dependencies": {
49
- "@babel/runtime-corejs3": "^7.12.5",
50
- "concurrently": "^5.1.0"
51
- },
52
- "peerDependencies": {
53
- "js-yaml": ">= 3.0.0",
54
- "react": ">= 16",
55
- "react-dom": ">= 16"
56
- },
57
- "files": [
58
- "node_package/lib",
59
- "webpackConfigLoader.js"
60
- ],
61
- "scripts": {
62
- "test": "jest node_package/tests",
63
- "clean": "rm -rf node_package/lib",
64
- "start": "nps",
65
- "prepare": "yarn run build",
66
- "build": "yarn run clean && yarn run tsc --declaration",
67
- "build-watch": "yarn run clean && yarn run tsc --watch",
68
- "lint": "nps eslint",
69
- "check": "yarn run lint && yarn run test && yarn run type-check",
70
- "type-check": "yarn run tsc --noEmit --noErrorTruncation",
71
- "prerelease": "yarn run check && yarn run clean && yarn run build",
72
- "release:patch": "node_package/scripts/release patch",
73
- "release:minor": "node_package/scripts/release minor",
74
- "release:major": "node_package/scripts/release major",
75
- "dummy:install": "rake dummy_apps",
76
- "dummy:spec": "rake run_rspec:dummy"
77
- },
78
- "repository": {
79
- "type": "git",
80
- "url": "git+https://github.com/shakacode/react_on_rails.git"
81
- },
82
- "keywords": [
83
- "react",
84
- "webpack",
85
- "JavaScript",
86
- "Ruby",
87
- "on",
88
- "Rails"
89
- ],
90
- "author": "justin.gordon@gmail.com",
91
- "license": "MIT",
92
- "bugs": {
93
- "url": "https://github.com/shakacode/react_on_rails/issues"
94
- },
95
- "homepage": "https://github.com/shakacode/react_on_rails#readme"
96
- }
data/rakelib/docker.rake DELETED
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- namespace :docker do
4
- desc "Run Rubocop linter from docker"
5
- task :rubocop do
6
- sh "docker-compose run lint rake lint:rubocop"
7
- end
8
-
9
- desc "Run scss-lint linter from docker"
10
- task :scss do
11
- sh "docker-compose run lint rake lint:scss"
12
- end
13
-
14
- desc "Run eslint linter from docker"
15
- task :eslint do
16
- sh "docker-compose run lint rake lint:eslint"
17
- end
18
-
19
- desc "Run all linting from docker"
20
- task :lint do
21
- sh "docker-compose run lint rake lint"
22
- end
23
- end
24
-
25
- desc "Runs all linters from docker. Run `rake -D docker` to see all available lint options"
26
- task docker: ["docker:lint"]
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "task_helpers"
4
-
5
- namespace :dummy_apps do
6
- include ReactOnRails::TaskHelpers
7
-
8
- task :yarn_install do
9
- yarn_install_cmd = "yarn install --mutex network"
10
- sh_in_dir(dummy_app_dir, yarn_install_cmd)
11
- sh_in_dir(dummy_app_dir, "yalc link react-on-rails")
12
- end
13
-
14
- task dummy_app: [:yarn_install] do
15
- dummy_app_dir = File.join(gem_root, "spec/dummy")
16
- bundle_install_in(dummy_app_dir)
17
- end
18
-
19
- task :generate_packs do
20
- dummy_app_dir = File.join(gem_root, "spec/dummy")
21
- sh_in_dir(dummy_app_dir, "bundle exec rake react_on_rails:generate_packs")
22
- end
23
-
24
- task dummy_apps: %i[dummy_app node_package generate_packs] do
25
- puts "Prepared all Dummy Apps"
26
- end
27
- end
28
-
29
- desc "Prepares all dummy apps by installing dependencies"
30
- task dummy_apps: ["dummy_apps:dummy_apps"]
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rake"
4
- require "pathname"
5
-
6
- require_relative "task_helpers"
7
-
8
- # Defines the ExampleType class, where each object represents a unique type of example
9
- # app that we can generate.
10
- module ReactOnRails
11
- module TaskHelpers
12
- class ExampleType
13
- def self.all
14
- @all ||= []
15
- end
16
-
17
- def self.namespace_name
18
- "examples"
19
- end
20
-
21
- attr_reader :name, :generator_options
22
-
23
- def initialize(name: nil, generator_options: nil)
24
- @name = name
25
- @generator_options = generator_options
26
- self.class.all << self
27
- end
28
-
29
- def name_pretty
30
- "#{@name} example app"
31
- end
32
-
33
- def dir
34
- File.join(examples_dir, name)
35
- end
36
-
37
- def dir_exist?
38
- Dir.exist?(dir)
39
- end
40
-
41
- def gemfile
42
- File.join(dir, "Gemfile")
43
- end
44
-
45
- # Gems we need to add to the Gemfile before bundle installing
46
- def required_gems
47
- relative_gem_root = Pathname(gem_root).relative_path_from(Pathname(dir))
48
- [
49
- "gem 'react_on_rails', path: '#{relative_gem_root}'",
50
- "gem 'shakapacker'"
51
- ]
52
- end
53
-
54
- # Options we pass when running `rails new` from the command-line.
55
- attr_writer :rails_options
56
-
57
- def rails_options
58
- @rails_options ||= if ReactOnRails::Utils.rails_version_less_than("7.0")
59
- "--skip-bundle --skip-spring --skip-git --skip-test-unit --skip-active-record -J"
60
- else
61
- "--skip-bundle --skip-spring --skip-git --skip-test-unit --skip-active-record -j webpack"
62
- end
63
- end
64
-
65
- %w[gen clobber npm_install build_webpack_bundles].each do |task_type|
66
- method_name_normal = "#{task_type}_task_name" # ex: `clean_task_name`
67
- method_name_short = "#{method_name_normal}_short" # ex: `clean_task_name_short`
68
-
69
- define_method(method_name_normal) { "#{self.class.namespace_name}:#{task_type}_#{name}" }
70
- define_method(method_name_short) { "#{task_type}_#{name}" }
71
- end
72
-
73
- def rspec_task_name_short
74
- "example_#{name}"
75
- end
76
-
77
- def rspec_task_name
78
- "run_rspec:#{rspec_task_name_short}"
79
- end
80
-
81
- # Assumes we are inside a rails app's folder and necessary gems have been installed
82
- def generator_shell_commands
83
- shell_commands = []
84
- shell_commands << "rails generate react_on_rails:install #{generator_options} --ignore-warnings --force"
85
- shell_commands << "rails generate react_on_rails:dev_tests #{generator_options}"
86
- end
87
-
88
- private
89
-
90
- # Defines globs that scoop up all files (including dotfiles) in given directory
91
- def all_files_in_dir(p_dir)
92
- [File.join(p_dir, "**", "*"), File.join(p_dir, "**", ".*")]
93
- end
94
- end
95
- end
96
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Defines tasks related to generating example apps using the gem's generator.
4
- # Allows us to create and test apps generated using a wide range of options.
5
- #
6
- # Also see example_type.rb
7
-
8
- require "yaml"
9
- require "rails/version"
10
-
11
- require_relative "example_type"
12
- require_relative "task_helpers"
13
-
14
- namespace :examples do # rubocop:disable Metrics/BlockLength
15
- include ReactOnRails::TaskHelpers
16
- # Loads data from examples_config.yml and instantiates corresponding ExampleType objects
17
- examples_config_file = File.expand_path("examples_config.yml", __dir__)
18
- examples_config = symbolize_keys(YAML.safe_load(File.read(examples_config_file)))
19
- examples_config[:example_type_data].each { |example_type_data| ExampleType.new(**symbolize_keys(example_type_data)) }
20
-
21
- # Define tasks for each example type
22
- ExampleType.all.each do |example_type|
23
- # CLOBBER
24
- desc "Clobbers (deletes) #{example_type.name_pretty}"
25
- task example_type.clobber_task_name_short do
26
- rm_rf(example_type.dir)
27
- end
28
-
29
- # GENERATE
30
- desc "Generates #{example_type.name_pretty}"
31
- task example_type.gen_task_name_short => example_type.clobber_task_name do
32
- mkdir_p(example_type.dir)
33
- example_type.rails_options += "--skip-javascript"
34
- sh_in_dir(examples_dir, "rails new #{example_type.name} #{example_type.rails_options}")
35
- sh_in_dir(example_type.dir, "touch .gitignore")
36
- append_to_gemfile(example_type.gemfile, example_type.required_gems)
37
- bundle_install_in(example_type.dir)
38
- sh_in_dir(example_type.dir, "rake webpacker:install")
39
- sh_in_dir(example_type.dir, example_type.generator_shell_commands)
40
- sh_in_dir(example_type.dir, "yarn")
41
- end
42
- end
43
-
44
- desc "Clobbers (deletes) all example apps"
45
- task :clobber do
46
- rm_rf(examples_dir)
47
- end
48
-
49
- desc "Generates all example apps"
50
- task gen_all: ExampleType.all.map(&:gen_task_name)
51
- end
52
-
53
- desc "Generates all example apps. Run `rake -D examples` to see all available options"
54
- task examples: ["examples:gen_all"]
55
-
56
- private
57
-
58
- # Appends each string in an array as a new line of text in the given Gemfile.
59
- # Automatically adds line returns.
60
- def append_to_gemfile(gemfile, lines)
61
- old_text = File.read(gemfile)
62
- new_text = lines.reduce(old_text) { |a, e| a << "#{e}\n" }
63
- File.open(gemfile, "w") { |f| f.puts(new_text) }
64
- end
@@ -1,14 +0,0 @@
1
- example_type_data:
2
- -
3
- name: basic
4
- generator_options: ""
5
- -
6
- name: basic-server-rendering
7
- generator_options: --example-server-rendering
8
- -
9
- name: redux
10
- generator_options: --redux
11
- -
12
- name: redux-server-rendering
13
- generator_options: --redux --example-server-rendering
14
-
data/rakelib/lint.rake DELETED
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "task_helpers"
4
-
5
- namespace :lint do
6
- include ReactOnRails::TaskHelpers
7
-
8
- desc "Run Rubocop as shell"
9
- task :rubocop do
10
- sh_in_dir(gem_root, "bundle exec rubocop --version", "bundle exec rubocop .")
11
- end
12
-
13
- desc "Run scss-lint as shell"
14
- task :scss do
15
- sh_in_dir(gem_root, "bundle exec scss-lint spec/dummy/app/assets/stylesheets/")
16
- end
17
-
18
- desc "Run eslint as shell"
19
- task :eslint do
20
- sh_in_dir(gem_root, "yarn run eslint --version", "yarn run eslint .")
21
- end
22
-
23
- desc "Run all eslint & rubocop linters. Skip scss"
24
- task lint: %i[eslint rubocop] do
25
- puts "Completed all linting"
26
- end
27
- end
28
-
29
- desc "Runs all linters. Run `rake -D lint` to see all available lint options"
30
- task lint: ["lint:lint"]
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "task_helpers"
4
-
5
- namespace :node_package do
6
- include ReactOnRails::TaskHelpers
7
-
8
- task :build do
9
- puts "Building Node Package and running 'yalc publish'"
10
- sh "yarn run build && yalc publish"
11
- end
12
- end
13
-
14
- desc "Prepares node_package by building and symlinking any example/dummy apps present"
15
- task node_package: "node_package:build"
data/rakelib/release.rake DELETED
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler"
4
- require_relative "task_helpers"
5
- require_relative File.join(gem_root, "lib", "react_on_rails", "version_syntax_converter")
6
- require_relative File.join(gem_root, "lib", "react_on_rails", "git_utils")
7
- require_relative File.join(gem_root, "lib", "react_on_rails", "utils")
8
-
9
- class RaisingMessageHandler
10
- def add_error(error)
11
- raise error
12
- end
13
- end
14
-
15
- # rubocop:disable Metrics/BlockLength
16
-
17
- desc("Releases both the gem and node package using the given version.
18
-
19
- IMPORTANT: the gem version must be in valid rubygem format (no dashes).
20
- It will be automatically converted to a valid yarn semver by the rake task
21
- for the node package version. This only makes a difference for pre-release
22
- versions such as `3.0.0.beta.1` (yarn version would be `3.0.0-beta.1`).
23
-
24
- This task depends on the gem-release (ruby gem) and release-it (node package)
25
- which are installed via `bundle install` and `yarn global add release-it`
26
-
27
- 1st argument: The new version in rubygem format (no dashes). Pass no argument to
28
- automatically perform a patch version bump.
29
- 2nd argument: Perform a dry run by passing 'true' as a second argument.
30
-
31
- Note, accept defaults for npmjs options. Script will pause to get 2FA tokens.
32
-
33
- Example: `rake release[2.1.0,false]`")
34
- task :release, %i[gem_version dry_run tools_install] do |_t, args|
35
- include ReactOnRails::TaskHelpers
36
-
37
- # Check if there are uncommited changes
38
- ReactOnRails::GitUtils.uncommitted_changes?(RaisingMessageHandler.new)
39
- args_hash = args.to_hash
40
-
41
- is_dry_run = ReactOnRails::Utils.object_to_boolean(args_hash[:dry_run])
42
-
43
- gem_version = args_hash.fetch(:gem_version, "")
44
-
45
- npm_version = if gem_version.strip.empty?
46
- ""
47
- else
48
- ReactOnRails::VersionSyntaxConverter.new.rubygem_to_npm(gem_version)
49
- end
50
-
51
- # Having the examples prevents publishing
52
- Rake::Task["examples:clobber"].invoke
53
- # Delete any react_on_rails.gemspec except the root one
54
- sh_in_dir(gem_root, "find . -mindepth 2 -name 'react_on_rails.gemspec' -delete")
55
-
56
- # See https://github.com/svenfuchs/gem-release
57
- sh_in_dir(gem_root, "git pull --rebase")
58
- sh_in_dir(gem_root, "gem bump --no-commit #{gem_version.strip.empty? ? '' : %(--version #{gem_version})}")
59
-
60
- # Update dummy app's Gemfile.lock
61
- bundle_install_in(dummy_app_dir)
62
-
63
- puts "Carefully add your OTP for NPM. If you get an error, 'git reset --hard' and start over."
64
- # Will bump the yarn version, commit, tag the commit, push to repo, and release on yarn
65
- release_it_command = +"release-it"
66
- release_it_command << " #{npm_version}" unless npm_version.strip.empty?
67
- release_it_command << " --npm.publish --no-git.requireCleanWorkingDir"
68
- release_it_command << " --dry-run --verbose" if is_dry_run
69
- sh_in_dir(gem_root, release_it_command)
70
-
71
- # Release the new gem version
72
-
73
- puts "Carefully add your OTP for Rubygems. If you get an error, run 'gem release' again."
74
- sh_in_dir(gem_root, "gem release") unless is_dry_run
75
-
76
- msg = <<~MSG
77
- Once you have successfully published, run these commands to update the spec apps:
78
-
79
- cd #{dummy_app_dir}; bundle update react_on_rails
80
- cd #{gem_root}#{' '}
81
- git commit -a -m 'Update Gemfile.lock for spec app'
82
- git push
83
- MSG
84
- puts msg
85
- end
86
- # rubocop:enable Metrics/BlockLength
87
-
88
- task :test do
89
- unbundled_sh_in_dir(gem_root, "cd #{dummy_app_dir}; bundle update react_on_rails")
90
- sh_in_dir(gem_root, "git commit -a -m 'Update Gemfile.lock for spec app'")
91
- sh_in_dir(gem_root, "git push")
92
- end
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "coveralls/rake/task" if ENV["USE_COVERALLS"] == "TRUE"
4
-
5
- require "pathname"
6
-
7
- require_relative "task_helpers"
8
- require_relative "example_type"
9
-
10
- # rubocop:disable Metrics/BlockLength
11
- namespace :run_rspec do
12
- include ReactOnRails::TaskHelpers
13
-
14
- spec_dummy_dir = File.join("spec", "dummy")
15
-
16
- desc "Run RSpec for top level only"
17
- task :gem do
18
- run_tests_in("", rspec_args: File.join("spec", "react_on_rails"))
19
- end
20
-
21
- desc "Runs dummy rspec with turbolinks"
22
- task dummy: ["dummy_apps:dummy_app"] do
23
- run_tests_in(spec_dummy_dir)
24
- end
25
-
26
- desc "Runs dummy rspec without turbolinks"
27
- task dummy_no_turbolinks: ["dummy_apps:dummy_app"] do
28
- run_tests_in(spec_dummy_dir,
29
- env_vars: "DISABLE_TURBOLINKS=TRUE",
30
- command_name: "dummy_no_turbolinks")
31
- end
32
-
33
- # Dynamically define Rake tasks for each example app found in the examples directory
34
- ExampleType.all.each do |example_type|
35
- desc "Runs RSpec for #{example_type.name_pretty} only"
36
- task example_type.rspec_task_name_short => example_type.gen_task_name do
37
- run_tests_in(File.join(examples_dir, example_type.name)) # have to use relative path
38
- end
39
- end
40
-
41
- desc "Runs Rspec for example apps only"
42
- task examples: "examples:gen_all" do
43
- ExampleType.all.each { |example_type| Rake::Task[example_type.rspec_task_name].invoke }
44
- end
45
-
46
- Coveralls::RakeTask.new if ENV["USE_COVERALLS"] == "TRUE"
47
-
48
- desc "run all tests no examples"
49
- task all_but_examples: %i[gem dummy_no_turbolinks dummy js_tests] do
50
- puts "Completed all RSpec tests"
51
- end
52
-
53
- desc "run all dummy tests"
54
- task all_dummy: %i[dummy_no_turbolinks dummy] do
55
- puts "Completed all RSpec tests"
56
- end
57
-
58
- desc "run all tests"
59
- task run_rspec: %i[all_but_examples examples] do
60
- puts "Completed all RSpec tests"
61
- end
62
- end
63
- # rubocop:enable Metrics/BlockLength
64
-
65
- desc "js tests (same as 'yarn run test')"
66
- task :js_tests do
67
- sh "yarn run test"
68
- end
69
-
70
- msg = <<-DESC.strip_heredoc
71
- Runs all tests, run `rake -D run_rspec` to see all available test options.
72
- "rake run_rspec:example_basic" is a good way to run only one generator test.
73
- DESC
74
- desc msg
75
- task run_rspec: ["run_rspec:run_rspec"]
76
-
77
- private
78
-
79
- def calc_path(dir)
80
- if dir.is_a?(String)
81
- if dir.start_with?(File::SEPARATOR)
82
- Pathname.new(dir)
83
- else
84
- Pathname.new(File.join(gem_root, dir))
85
- end
86
- else
87
- dir
88
- end
89
- end
90
-
91
- # Runs rspec in the given directory.
92
- # If string is passed and it's not absolute, it's converted relative to root of the gem.
93
- # TEST_ENV_COMMAND_NAME is used to make SimpleCov.command_name unique in order to
94
- # prevent a name collision. Defaults to the given directory's name.
95
- def run_tests_in(dir, options = {})
96
- path = calc_path(dir)
97
-
98
- command_name = options.fetch(:command_name, path.basename)
99
- rspec_args = options.fetch(:rspec_args, "")
100
- env_vars = +"#{options.fetch(:env_vars, '')} TEST_ENV_COMMAND_NAME=\"#{command_name}\""
101
- env_vars << "COVERAGE=true" if ENV["USE_COVERALLS"]
102
- sh_in_dir(path.realpath, "#{env_vars} bundle exec rspec #{rspec_args}")
103
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ReactOnRails
4
- module TaskHelpers
5
- # Returns the root folder of the react_on_rails gem
6
- def gem_root
7
- File.expand_path("..", __dir__)
8
- end
9
-
10
- # Returns the folder where examples are located
11
- def examples_dir
12
- File.join(gem_root, "gen-examples", "examples")
13
- end
14
-
15
- def dummy_app_dir
16
- File.join(gem_root, "spec/dummy")
17
- end
18
-
19
- # Executes a string or an array of strings in a shell in the given directory in an unbundled environment
20
- def sh_in_dir(dir, *shell_commands)
21
- shell_commands.flatten.each { |shell_command| sh %(cd #{dir} && #{shell_command.strip}) }
22
- end
23
-
24
- # Executes a string or an array of strings in a shell in the given directory
25
- def unbundled_sh_in_dir(dir, *shell_commands)
26
- Dir.chdir(dir) do
27
- # Without `with_unbundled_env`, running bundle in the child directories won't correctly
28
- # update the Gemfile.lock
29
- Bundler.with_unbundled_env do
30
- shell_commands.flatten.each do |shell_command|
31
- sh(shell_command.strip)
32
- end
33
- end
34
- end
35
- end
36
-
37
- def bundle_install_in(dir)
38
- unbundled_sh_in_dir(dir, "bundle install")
39
- end
40
-
41
- def bundle_install_in_no_turbolinks(dir)
42
- sh_in_dir(dir, "DISABLE_TURBOLINKS=TRUE bundle install")
43
- end
44
-
45
- # Runs bundle exec using that directory's Gemfile
46
- def bundle_exec(dir: nil, args: nil, env_vars: "")
47
- sh_in_dir(dir, "#{env_vars} #{args}")
48
- end
49
-
50
- def generators_source_dir
51
- File.join(gem_root, "lib/generators/react_on_rails")
52
- end
53
-
54
- def symbolize_keys(hash)
55
- hash.each_with_object({}) do |(key, value), new_hash|
56
- new_key = key.is_a?(String) ? key.to_sym : key
57
- new_value = value.is_a?(Hash) ? symbolize_keys(value) : value
58
- new_hash[new_key] = new_value
59
- end
60
- end
61
- end
62
- end