react_on_rails 11.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.circleci/config.yml +320 -0
- data/.eslintignore +2 -1
- data/.eslintrc +30 -2
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +3 -1
- data/.prettierignore +10 -0
- data/.prettierrc +23 -0
- data/.release-it.json +3 -0
- data/.rubocop.yml +39 -11
- data/.travis.yml +11 -22
- data/CHANGELOG.md +235 -6
- data/CONTRIBUTING.md +64 -84
- data/Gemfile +3 -5
- data/KUDOS.md +4 -1
- data/{docs/LICENSE.md → LICENSE.md} +1 -1
- data/PROJECTS.md +7 -1
- data/REACT-ON-RAILS-PRO-LICENSE +95 -0
- data/README.md +233 -630
- data/Rakefile +1 -5
- data/SUMMARY.md +42 -29
- data/book.json +5 -5
- data/docs/additional-reading/asset-pipeline.md +8 -16
- data/docs/additional-reading/convert-rails-5-api-only-app.md +19 -0
- data/docs/additional-reading/credits.md +10 -0
- data/docs/additional-reading/images.md +1 -1
- data/docs/additional-reading/rails-engine-integration.md +7 -0
- data/docs/additional-reading/rails_view_rendering_from_inline_javascript.md +2 -1
- data/docs/additional-reading/react-helmet.md +30 -10
- data/docs/additional-reading/react-router.md +52 -75
- data/docs/additional-reading/server-rendering-tips.md +14 -11
- data/docs/additional-reading/upgrade-webpacker-v3-to-v4.md +10 -0
- data/docs/additional-reading/webpack.md +2 -2
- data/docs/api/javascript-api.md +24 -4
- data/docs/api/redux-store-api.md +102 -0
- data/docs/api/view-helpers-api.md +133 -0
- data/docs/articles.md +20 -0
- data/docs/basics/client-vs-server-rendering.md +23 -0
- data/docs/basics/configuration.md +145 -61
- data/docs/basics/deployment.md +4 -0
- data/docs/basics/{generator.md → generator-details.md} +5 -8
- data/docs/basics/heroku-deployment.md +24 -0
- data/docs/basics/hmr-and-hot-reloading-with-the-webpack-dev-server.md +49 -0
- data/docs/basics/i18n.md +45 -23
- data/docs/basics/installation-into-an-existing-rails-app.md +59 -0
- data/docs/basics/minitest-configuration.md +31 -0
- data/docs/basics/react-server-rendering.md +29 -0
- data/docs/{additional-reading → basics}/recommended-project-structure.md +38 -10
- data/docs/basics/render-functions-and-railscontext.md +205 -0
- data/docs/basics/rspec-configuration.md +73 -0
- data/docs/basics/upgrading-react-on-rails.md +75 -4
- data/docs/basics/webpack-configuration.md +50 -0
- data/docs/contributor-info/errors-with-hooks.md +45 -0
- data/docs/contributor-info/pull-requests.md +44 -0
- data/docs/misc/doctrine.md +2 -2
- data/docs/{additional-reading → outdated}/code-splitting.md +19 -9
- data/docs/outdated/how-react-on-rails-works.md +44 -0
- data/docs/{basics/installation-overview.md → outdated/manual-installation-overview.md} +8 -13
- data/docs/{additional-reading → outdated}/rails-assets-relative-paths.md +3 -3
- data/docs/{additional-reading → outdated}/rails-assets.md +5 -13
- data/docs/testimonials/hvmn.md +25 -0
- data/docs/testimonials/resortpass.md +13 -0
- data/docs/testimonials/testimonials.md +28 -0
- data/docs/tutorial.md +182 -44
- data/jest.config.js +4 -0
- data/lib/generators/USAGE +1 -1
- data/lib/generators/react_on_rails/base_generator.rb +2 -2
- data/lib/generators/react_on_rails/dev_tests_generator.rb +3 -2
- data/lib/generators/react_on_rails/generator_helper.rb +4 -6
- data/lib/generators/react_on_rails/install_generator.rb +2 -0
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +3 -1
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-hmr +26 -0
- data/lib/generators/react_on_rails/templates/base/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +20 -40
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +4 -1
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +4 -8
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/store/helloWorldStore.js +1 -3
- data/lib/react_on_rails/configuration.rb +175 -102
- data/lib/react_on_rails/error.rb +2 -0
- data/lib/react_on_rails/git_utils.rb +2 -0
- data/lib/react_on_rails/{react_on_rails_helper.rb → helper.rb} +201 -225
- data/lib/react_on_rails/json_output.rb +1 -1
- data/lib/react_on_rails/json_parse_error.rb +28 -0
- data/lib/react_on_rails/locales/base.rb +150 -0
- data/lib/react_on_rails/locales/to_js.rb +37 -0
- data/lib/react_on_rails/locales/to_json.rb +27 -0
- data/lib/react_on_rails/prerender_error.rb +56 -18
- data/lib/react_on_rails/react_component/render_options.rb +98 -0
- data/lib/react_on_rails/server_rendering_js_code.rb +42 -0
- data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +139 -106
- data/lib/react_on_rails/server_rendering_pool.rb +4 -16
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +7 -8
- data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +17 -0
- data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +10 -6
- data/lib/react_on_rails/test_helper.rb +18 -7
- data/lib/react_on_rails/utils.rb +66 -26
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/version_checker.rb +5 -1
- data/lib/react_on_rails/version_syntax_converter.rb +14 -12
- data/lib/react_on_rails/webpacker_utils.rb +44 -10
- data/lib/react_on_rails.rb +8 -3
- data/lib/tasks/assets.rake +33 -46
- data/lib/tasks/locale.rake +4 -2
- data/package-scripts.yml +49 -0
- data/package.json +49 -40
- data/rakelib/dummy_apps.rake +1 -9
- data/rakelib/example_type.rb +3 -1
- data/rakelib/examples.rake +3 -0
- data/rakelib/lint.rake +2 -7
- data/rakelib/node_package.rake +2 -2
- data/rakelib/release.rake +4 -8
- data/rakelib/run_rspec.rake +5 -18
- data/react_on_rails.gemspec +5 -6
- data/tsconfig.json +14 -0
- data/webpackConfigLoader.js +5 -4
- data/yarn.lock +7645 -1821
- metadata +71 -61
- data/Gemfile.rails32 +0 -74
- data/docs/additional-reading/babel.md +0 -5
- data/docs/additional-reading/caching-and-performance.md +0 -4
- data/docs/additional-reading/heroku-deployment.md +0 -92
- data/docs/additional-reading/hot-reloading-rails-development.md +0 -57
- data/docs/additional-reading/node-server-rendering.md +0 -5
- data/docs/additional-reading/rspec-configuration.md +0 -56
- data/docs/api/ruby-api-hot-reload-view-helpers.md +0 -44
- data/docs/api/ruby-api.md +0 -8
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-server +0 -12
- data/lib/react_on_rails/assets_precompile.rb +0 -150
- data/lib/react_on_rails/locales_to_js.rb +0 -134
- data/lib/react_on_rails/react_component/options.rb +0 -64
- /data/docs/{misc → outdated}/rails3.md +0 -0
data/rakelib/dummy_apps.rake
CHANGED
|
@@ -8,6 +8,7 @@ namespace :dummy_apps do
|
|
|
8
8
|
task :yarn_install do
|
|
9
9
|
yarn_install_cmd = "yarn install --mutex network"
|
|
10
10
|
sh_in_dir(dummy_app_dir, yarn_install_cmd)
|
|
11
|
+
sh_in_dir(dummy_app_dir, "yalc link react-on-rails")
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
task dummy_app: [:yarn_install] do
|
|
@@ -15,15 +16,6 @@ namespace :dummy_apps do
|
|
|
15
16
|
bundle_install_in(dummy_app_dir)
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
task :dummy_no_webpacker do
|
|
19
|
-
npm_install_cmd = "npm install"
|
|
20
|
-
install_react_on_rails_cmd = "yarn run install-react-on-rails"
|
|
21
|
-
dummy_app_dir = File.join(gem_root, "spec/dummy_no_webpacker")
|
|
22
|
-
sh_in_dir(File.join(gem_root, "spec/dummy_no_webpacker/client"), npm_install_cmd)
|
|
23
|
-
sh_in_dir(dummy_app_dir, install_react_on_rails_cmd)
|
|
24
|
-
sh_in_dir(dummy_app_dir, "BUNDLE_GEMFILE=Gemfile.rails32 bundle install")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
19
|
task dummy_apps: %i[dummy_app node_package] do
|
|
28
20
|
puts "Prepared all Dummy Apps"
|
|
29
21
|
end
|
data/rakelib/example_type.rb
CHANGED
|
@@ -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|
|
data/rakelib/examples.rake
CHANGED
|
@@ -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
|
|
30
|
-
task :
|
|
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
|
data/rakelib/node_package.rake
CHANGED
|
@@ -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 '
|
|
10
|
-
sh "yarn run build &&
|
|
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
|
|
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
|
data/rakelib/run_rspec.rake
CHANGED
|
@@ -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"
|
data/react_on_rails.gemspec
CHANGED
|
@@ -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.
|
|
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", "~>
|
|
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", "~>
|
|
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.
|
|
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
|
+
}
|
data/webpackConfigLoader.js
CHANGED
|
@@ -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
|
|
22
|
-
const port = settings.dev_server
|
|
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 =
|
|
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
|
|