react_on_rails 11.0.3 → 12.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +320 -0
  3. data/.eslintignore +2 -1
  4. data/.eslintrc +30 -2
  5. data/.github/FUNDING.yml +1 -0
  6. data/.gitignore +3 -1
  7. data/.prettierignore +10 -0
  8. data/.prettierrc +23 -0
  9. data/.release-it.json +3 -0
  10. data/.rubocop.yml +39 -11
  11. data/.travis.yml +11 -22
  12. data/CHANGELOG.md +209 -4
  13. data/CONTRIBUTING.md +64 -84
  14. data/Gemfile +3 -5
  15. data/KUDOS.md +4 -1
  16. data/{docs/LICENSE.md → LICENSE.md} +1 -1
  17. data/PROJECTS.md +7 -1
  18. data/REACT-ON-RAILS-PRO-LICENSE +95 -0
  19. data/README.md +233 -634
  20. data/Rakefile +1 -5
  21. data/SUMMARY.md +42 -29
  22. data/book.json +5 -5
  23. data/docs/additional-reading/asset-pipeline.md +8 -16
  24. data/docs/additional-reading/convert-rails-5-api-only-app.md +19 -0
  25. data/docs/additional-reading/credits.md +10 -0
  26. data/docs/additional-reading/images.md +1 -1
  27. data/docs/additional-reading/rails-engine-integration.md +7 -0
  28. data/docs/additional-reading/rails_view_rendering_from_inline_javascript.md +2 -1
  29. data/docs/additional-reading/react-helmet.md +30 -10
  30. data/docs/additional-reading/react-router.md +52 -75
  31. data/docs/additional-reading/server-rendering-tips.md +14 -11
  32. data/docs/additional-reading/upgrade-webpacker-v3-to-v4.md +10 -0
  33. data/docs/additional-reading/webpack.md +2 -2
  34. data/docs/api/javascript-api.md +24 -4
  35. data/docs/api/redux-store-api.md +102 -0
  36. data/docs/api/view-helpers-api.md +133 -0
  37. data/docs/articles.md +20 -0
  38. data/docs/basics/client-vs-server-rendering.md +23 -0
  39. data/docs/basics/configuration.md +145 -61
  40. data/docs/basics/deployment.md +4 -0
  41. data/docs/basics/{generator.md → generator-details.md} +5 -8
  42. data/docs/basics/heroku-deployment.md +24 -0
  43. data/docs/basics/hmr-and-hot-reloading-with-the-webpack-dev-server.md +49 -0
  44. data/docs/basics/i18n.md +45 -23
  45. data/docs/basics/installation-into-an-existing-rails-app.md +59 -0
  46. data/docs/basics/minitest-configuration.md +31 -0
  47. data/docs/basics/react-server-rendering.md +29 -0
  48. data/docs/{additional-reading → basics}/recommended-project-structure.md +38 -10
  49. data/docs/basics/render-functions-and-railscontext.md +205 -0
  50. data/docs/basics/rspec-configuration.md +73 -0
  51. data/docs/basics/upgrading-react-on-rails.md +74 -3
  52. data/docs/basics/webpack-configuration.md +50 -0
  53. data/docs/contributor-info/errors-with-hooks.md +45 -0
  54. data/docs/contributor-info/pull-requests.md +44 -0
  55. data/docs/misc/doctrine.md +2 -2
  56. data/docs/{additional-reading → outdated}/code-splitting.md +19 -9
  57. data/docs/outdated/how-react-on-rails-works.md +44 -0
  58. data/docs/{basics/installation-overview.md → outdated/manual-installation-overview.md} +8 -13
  59. data/docs/{additional-reading → outdated}/rails-assets-relative-paths.md +3 -3
  60. data/docs/{additional-reading → outdated}/rails-assets.md +5 -13
  61. data/docs/testimonials/hvmn.md +25 -0
  62. data/docs/testimonials/resortpass.md +13 -0
  63. data/docs/testimonials/testimonials.md +28 -0
  64. data/docs/tutorial.md +182 -44
  65. data/jest.config.js +4 -0
  66. data/lib/generators/USAGE +1 -1
  67. data/lib/generators/react_on_rails/base_generator.rb +2 -2
  68. data/lib/generators/react_on_rails/dev_tests_generator.rb +3 -2
  69. data/lib/generators/react_on_rails/generator_helper.rb +4 -6
  70. data/lib/generators/react_on_rails/install_generator.rb +2 -0
  71. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +3 -1
  72. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-hmr +26 -0
  73. data/lib/generators/react_on_rails/templates/base/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +20 -40
  74. data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +4 -1
  75. data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +4 -8
  76. data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/store/helloWorldStore.js +1 -3
  77. data/lib/react_on_rails/configuration.rb +171 -100
  78. data/lib/react_on_rails/error.rb +2 -0
  79. data/lib/react_on_rails/git_utils.rb +2 -0
  80. data/lib/react_on_rails/{react_on_rails_helper.rb → helper.rb} +133 -161
  81. data/lib/react_on_rails/json_output.rb +1 -1
  82. data/lib/react_on_rails/json_parse_error.rb +28 -0
  83. data/lib/react_on_rails/locales/base.rb +150 -0
  84. data/lib/react_on_rails/locales/to_js.rb +37 -0
  85. data/lib/react_on_rails/locales/to_json.rb +27 -0
  86. data/lib/react_on_rails/prerender_error.rb +56 -18
  87. data/lib/react_on_rails/react_component/render_options.rb +31 -3
  88. data/lib/react_on_rails/server_rendering_js_code.rb +42 -0
  89. data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +93 -63
  90. data/lib/react_on_rails/server_rendering_pool.rb +1 -16
  91. data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +7 -8
  92. data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +17 -0
  93. data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +10 -6
  94. data/lib/react_on_rails/test_helper.rb +18 -7
  95. data/lib/react_on_rails/utils.rb +65 -25
  96. data/lib/react_on_rails/version.rb +1 -1
  97. data/lib/react_on_rails/version_checker.rb +5 -1
  98. data/lib/react_on_rails/version_syntax_converter.rb +14 -12
  99. data/lib/react_on_rails/webpacker_utils.rb +44 -10
  100. data/lib/react_on_rails.rb +7 -2
  101. data/lib/tasks/assets.rake +33 -46
  102. data/lib/tasks/locale.rake +4 -2
  103. data/package-scripts.yml +49 -0
  104. data/package.json +49 -40
  105. data/rakelib/dummy_apps.rake +1 -9
  106. data/rakelib/example_type.rb +3 -1
  107. data/rakelib/examples.rake +3 -0
  108. data/rakelib/lint.rake +2 -7
  109. data/rakelib/node_package.rake +2 -2
  110. data/rakelib/release.rake +4 -8
  111. data/rakelib/run_rspec.rake +5 -18
  112. data/react_on_rails.gemspec +5 -6
  113. data/tsconfig.json +14 -0
  114. data/webpackConfigLoader.js +5 -4
  115. data/yarn.lock +7645 -1821
  116. metadata +70 -60
  117. data/Gemfile.rails32 +0 -74
  118. data/docs/additional-reading/babel.md +0 -5
  119. data/docs/additional-reading/caching-and-performance.md +0 -4
  120. data/docs/additional-reading/heroku-deployment.md +0 -92
  121. data/docs/additional-reading/hot-reloading-rails-development.md +0 -57
  122. data/docs/additional-reading/node-server-rendering.md +0 -5
  123. data/docs/additional-reading/rspec-configuration.md +0 -56
  124. data/docs/api/ruby-api-hot-reload-view-helpers.md +0 -44
  125. data/docs/api/ruby-api.md +0 -8
  126. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-server +0 -12
  127. data/lib/react_on_rails/assets_precompile.rb +0 -150
  128. data/lib/react_on_rails/locales_to_js.rb +0 -134
  129. /data/docs/{misc → outdated}/rails3.md +0 -0
@@ -49,8 +49,10 @@ module ReactOnRails
49
49
  end
50
50
 
51
51
  # Options we pass when running `rails new` from the command-line.
52
+ attr_writer :rails_options
53
+
52
54
  def rails_options
53
- "--skip-bundle --skip-spring --skip-git --skip-test-unit --skip-active-record"
55
+ @rails_options ||= "--skip-bundle --skip-spring --skip-git --skip-test-unit --skip-active-record"
54
56
  end
55
57
 
56
58
  %w[gen clobber npm_install build_webpack_bundles].each do |task_type|
@@ -6,6 +6,8 @@
6
6
  # Also see example_type.rb
7
7
 
8
8
  require "yaml"
9
+ require 'rails/version'
10
+
9
11
  require_relative "example_type"
10
12
  require_relative "task_helpers"
11
13
 
@@ -28,6 +30,7 @@ namespace :examples do # rubocop:disable Metrics/BlockLength
28
30
  desc "Generates #{example_type.name_pretty}"
29
31
  task example_type.gen_task_name_short => example_type.clobber_task_name do
30
32
  mkdir_p(example_type.dir)
33
+ example_type.rails_options += " --webpack" if Rails.version >= "5.1" && Rails.version < "6"
31
34
  sh_in_dir(examples_dir, "rails new #{example_type.name} #{example_type.rails_options}")
32
35
  sh_in_dir(example_type.dir, "touch .gitignore")
33
36
  sh_in_dir(example_type.dir, "rake webpacker:install")
data/rakelib/lint.rake CHANGED
@@ -26,13 +26,8 @@ namespace :lint do # rubocop:disable Metrics/BlockLength
26
26
  sh_in_dir(gem_root, "yarn run eslint")
27
27
  end
28
28
 
29
- desc "Run flow from shell"
30
- task :flow do
31
- sh_in_dir(gem_root, "yarn run flow")
32
- end
33
-
34
- desc "Run all eslint, flow, rubocop linters. Skip ruby-lint and scss"
35
- task lint: %i[eslint flow rubocop] do
29
+ desc "Run all eslint & rubocop linters. Skip ruby-lint and scss"
30
+ task lint: %i[eslint rubocop] do
36
31
  puts "Completed all linting"
37
32
  end
38
33
  end
@@ -6,8 +6,8 @@ namespace :node_package do
6
6
  include ReactOnRails::TaskHelpers
7
7
 
8
8
  task :build do
9
- puts "Building Node Package and running 'yarn link'"
10
- sh "yarn run build && yarn link"
9
+ puts "Building Node Package and running 'yalc publish'"
10
+ sh "yarn run build && yalc publish"
11
11
  end
12
12
  end
13
13
 
data/rakelib/release.rake CHANGED
@@ -41,7 +41,7 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args|
41
41
  npm_version = if gem_version.strip.empty?
42
42
  ""
43
43
  else
44
- VersionSyntaxConverter.new.rubygem_to_npm(gem_version)
44
+ ReactOnRails::VersionSyntaxConverter.new.rubygem_to_npm(gem_version)
45
45
  end
46
46
 
47
47
  # Having the examples prevents publishing
@@ -60,19 +60,15 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args|
60
60
  sh_in_dir(gem_root, "git add .")
61
61
 
62
62
  # Will bump the yarn version, commit, tag the commit, push to repo, and release on yarn
63
- release_it_command = "$(yarn bin)/release-it --non-interactive --npm.publish".dup
64
- release_it_command << " --dry-run --verbose" if is_dry_run
63
+ release_it_command = "$(yarn bin)/release-it".dup
65
64
  release_it_command << " #{npm_version}" unless npm_version.strip.empty?
65
+ release_it_command << " --non-interactive --npm.publish"
66
+ release_it_command << " --dry-run --verbose" if is_dry_run
66
67
  sh_in_dir(gem_root, release_it_command)
67
68
 
68
69
  # Release the new gem version
69
70
  unless is_dry_run
70
71
  sh_in_dir(gem_root, "gem release")
71
-
72
- # Update master with new npm version
73
- sh_in_dir(File.join(gem_root, "spec", "dummy", "client"), "yarn add react-on-rails@#{npm_version} --exact")
74
- sh_in_dir(gem_root, "git commit -am 'Updated spec/dummy/client/package.json latest version'")
75
- sh_in_dir(gem_root, "git push")
76
72
  end
77
73
  end
78
74
  # rubocop:enable Metrics/BlockLength
@@ -18,16 +18,6 @@ namespace :run_rspec do
18
18
  run_tests_in("", rspec_args: File.join("spec", "react_on_rails"))
19
19
  end
20
20
 
21
- desc "Run RSpec with rails32 gemfile"
22
- task :gem_rails32 do
23
- rspec_args = "spec/react_on_rails --tag ~webpacker --exclude-pattern "\
24
- "\"**/generators/*_spec.rb,"\
25
- "**/test_helper/webpack_*_spec.rb\""
26
- run_tests_in("",
27
- rspec_args: rspec_args,
28
- env_vars: "BUNDLE_GEMFILE=spec/dummy_no_webpacker/Gemfile.rails32")
29
- end
30
-
31
21
  desc "Runs dummy rspec with turbolinks"
32
22
  task dummy: ["dummy_apps:dummy_app"] do
33
23
  clean_gen_assets(spec_dummy_dir)
@@ -44,14 +34,6 @@ namespace :run_rspec do
44
34
  command_name: "dummy_no_turbolinks")
45
35
  end
46
36
 
47
- desc "Runs dummy_no_webpacker rspec"
48
- task :dummy_no_webpacker do
49
- dummy_app_dir = File.join(gem_root, "spec/dummy_no_webpacker")
50
- clean_gen_assets(dummy_app_dir)
51
- run_tests_in(dummy_app_dir,
52
- env_vars: "BUNDLE_GEMFILE=Gemfile.rails32")
53
- end
54
-
55
37
  # Dynamically define Rake tasks for each example app found in the examples directory
56
38
  ExampleType.all.each do |example_type|
57
39
  desc "Runs RSpec for #{example_type.name_pretty} only"
@@ -77,6 +59,11 @@ namespace :run_rspec do
77
59
  puts "Completed all RSpec tests"
78
60
  end
79
61
 
62
+ desc "run all dummy tests"
63
+ task all_dummy: %i[dummy_no_turbolinks dummy] do
64
+ puts "Completed all RSpec tests"
65
+ end
66
+
80
67
  desc "run all tests"
81
68
  task run_rspec: %i[all_but_examples examples] do
82
69
  puts "Completed all RSpec tests"
@@ -23,16 +23,17 @@ Gem::Specification.new do |s|
23
23
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  s.require_paths = ["lib"]
25
25
 
26
- s.required_ruby_version = ">= 2.1.0"
26
+ s.required_ruby_version = ">= 2.5.0"
27
27
 
28
28
  s.add_dependency "addressable"
29
29
  s.add_dependency "connection_pool"
30
30
  s.add_dependency "execjs", "~> 2.5"
31
31
  s.add_dependency "rails", ">= 3.2"
32
- s.add_dependency "rainbow", "~> 2.2"
32
+ s.add_dependency "rainbow", "~> 3.0"
33
+ s.add_dependency "webpacker", ">= 4.0"
33
34
 
34
35
  s.add_development_dependency "awesome_print"
35
- s.add_development_dependency "bundler", "~> 1"
36
+ s.add_development_dependency "bundler", "~> 2"
36
37
  s.add_development_dependency "coveralls"
37
38
  s.add_development_dependency "gem-release"
38
39
  s.add_development_dependency "generator_spec"
@@ -41,14 +42,12 @@ Gem::Specification.new do |s|
41
42
  s.add_development_dependency "pry-byebug"
42
43
  s.add_development_dependency "pry-doc"
43
44
  s.add_development_dependency "pry-rescue"
44
- s.add_development_dependency "pry-stack_explorer"
45
45
  s.add_development_dependency "pry-state"
46
- s.add_development_dependency "pry-toys"
47
46
  s.add_development_dependency "rails", "~> 5.2"
48
47
 
49
48
  s.add_development_dependency "rake", "~> 10.0"
50
49
  s.add_development_dependency "rspec"
51
- s.add_development_dependency "rubocop", "0.55.0"
50
+ s.add_development_dependency "rubocop", "0.85.0"
52
51
 
53
52
  s.post_install_message = '
54
53
  --------------------------------------------------------------------------------
data/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": true,
4
+ "esModuleInterop": true,
5
+ "jsx": "react",
6
+ "lib": ["dom", "es2015"],
7
+ "module": "CommonJS",
8
+ "noImplicitAny": true,
9
+ "outDir": "node_package/lib",
10
+ "strict": true,
11
+ "target": "es5"
12
+ },
13
+ "include": ["node_package/src/**/*"]
14
+ }
@@ -1,4 +1,6 @@
1
1
  /**
2
+ * TODO: THIS SHOULD BE REMOVED
3
+ *
2
4
  * Allow defaults for the config/webpacker.yml. Thee values in this file MUST match values
3
5
  * in https://github.com/rails/webpacker/blob/master/lib/install/config/webpacker.yml
4
6
  *
@@ -11,15 +13,14 @@ const { env } = require('process');
11
13
  const { safeLoad } = require('js-yaml');
12
14
  const { readFileSync } = require('fs');
13
15
 
14
-
15
16
  function removeOuterSlashes(string) {
16
17
  return string.replace(/^\/*/, '').replace(/\/*$/, '');
17
18
  }
18
19
 
19
20
  function formatPublicPath(settings) {
20
21
  if (settings.dev_server) {
21
- const host = settings.dev_server.host;
22
- const port = settings.dev_server.port;
22
+ const { host } = settings.dev_server;
23
+ const { port } = settings.dev_server;
23
24
  const path = settings.public_output_path;
24
25
  const hostWithHttp = `http://${host}:${port}`;
25
26
 
@@ -48,7 +49,7 @@ function formatPublicPath(settings) {
48
49
  */
49
50
  const configLoader = (configPath) => {
50
51
  // Some test environments might not have the NODE_ENV set, so we'll have fallbacks.
51
- const configEnv = (env.NODE_ENV || env.RAILS_ENV || 'development');
52
+ const configEnv = env.NODE_ENV || env.RAILS_ENV || 'development';
52
53
  const ymlConfigPath = join(configPath, 'webpacker.yml');
53
54
  const settings = safeLoad(readFileSync(ymlConfigPath, 'utf8'))[configEnv];
54
55