react_on_rails 8.0.1 → 8.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +11 -1
- data/.travis.yml +9 -11
- data/CHANGELOG.md +13 -1
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +8 -18
- data/README.md +7 -3
- data/Rakefile +6 -1
- data/app/helpers/react_on_rails_helper.rb +41 -35
- data/docs/basics/generator.md +1 -1
- data/lib/generators/react_on_rails/base_generator.rb +13 -11
- data/lib/generators/react_on_rails/dev_tests_generator.rb +8 -16
- data/lib/generators/react_on_rails/generator_helper.rb +4 -0
- data/lib/generators/react_on_rails/generator_messages.rb +2 -0
- data/lib/generators/react_on_rails/install_generator.rb +4 -4
- data/lib/generators/react_on_rails/node_generator.rb +4 -2
- data/lib/generators/react_on_rails/react_no_redux_generator.rb +3 -1
- data/lib/generators/react_on_rails/react_with_redux_generator.rb +5 -3
- data/lib/generators/react_on_rails/templates/base/base/app/controllers/hello_world_controller.rb +2 -0
- data/lib/generators/react_on_rails/templates/dev_tests/spec/features/hello_world_spec.rb +2 -0
- data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +2 -0
- data/lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb +2 -0
- data/lib/generators/react_on_rails/templates/dev_tests/spec/spec_helper.rb +2 -0
- data/lib/react_on_rails/assets_precompile.rb +11 -5
- data/lib/react_on_rails/configuration.rb +3 -1
- data/lib/react_on_rails/controller.rb +2 -0
- data/lib/react_on_rails/engine.rb +2 -0
- data/lib/react_on_rails/git_utils.rb +2 -0
- data/lib/react_on_rails/json_output.rb +2 -0
- data/lib/react_on_rails/locales_to_js.rb +13 -9
- data/lib/react_on_rails/prerender_error.rb +13 -10
- data/lib/react_on_rails/react_component/options.rb +2 -0
- data/lib/react_on_rails/server_rendering_pool/exec.rb +8 -0
- data/lib/react_on_rails/server_rendering_pool/node.rb +3 -1
- data/lib/react_on_rails/server_rendering_pool.rb +2 -0
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +4 -0
- data/lib/react_on_rails/test_helper/node_process_launcher.rb +2 -0
- data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +4 -2
- data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +2 -0
- data/lib/react_on_rails/test_helper.rb +3 -1
- data/lib/react_on_rails/utils.rb +49 -3
- data/lib/react_on_rails/version.rb +3 -1
- data/lib/react_on_rails/version_checker.rb +2 -0
- data/lib/react_on_rails/version_syntax_converter.rb +2 -0
- data/lib/react_on_rails.rb +2 -0
- data/lib/tasks/assets.rake +12 -9
- data/lib/tasks/locale.rake +7 -4
- data/package.json +2 -2
- data/rakelib/docker.rake +2 -0
- data/rakelib/dummy_apps.rake +3 -6
- data/rakelib/example_type.rb +3 -1
- data/rakelib/examples.rake +4 -1
- data/rakelib/lint.rake +2 -0
- data/rakelib/node_package.rake +3 -1
- data/rakelib/release.rake +3 -1
- data/rakelib/run_rspec.rake +10 -13
- data/rakelib/task_helpers.rb +2 -4
- data/react_on_rails.gemspec +7 -3
- metadata +30 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e87c2d5daec14b131563f66b8813aadc20962b0
|
4
|
+
data.tar.gz: d04373277451a8cd984a63e1e325fa520b7c932e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7779155e1479945571bcf199003b158c78422a8f61ae0bde697544132e78e6a48e42617b0662cb664a455b2f305da7badd53286776206b54b55d6eed5fa19f02
|
7
|
+
data.tar.gz: 656b9484ca39ab1b67d26dcaf3e1d38f695c8b8e5be6a1bf8836be392614146eac2c0e8e05576408cee9222d19398372623342f877c4fa026b085a9b7a1cc0ad
|
data/.rubocop.yml
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
AllCops:
|
5
5
|
DisplayCopNames: true
|
6
|
-
TargetRubyVersion: 2.
|
6
|
+
TargetRubyVersion: 2.3
|
7
7
|
|
8
8
|
Include:
|
9
9
|
- '**/Rakefile'
|
@@ -23,12 +23,22 @@ AllCops:
|
|
23
23
|
- 'bin/**/*'
|
24
24
|
- !ruby/regexp /old_and_unused\.rb$/
|
25
25
|
- 'spec/react_on_rails/dummy-for-generators/**/*'
|
26
|
+
- 'spec/dummy/Procfile.*'
|
26
27
|
- 'spec/dummy/bin/**/*'
|
27
28
|
- 'spec/dummy/client/node_modules/**/*'
|
28
29
|
- 'spec/dummy/client/node_modules/**/.*'
|
29
30
|
- 'gen-examples/examples/**/.*'
|
30
31
|
- 'gen-examples/examples/**/*'
|
31
32
|
|
33
|
+
Style/FileName:
|
34
|
+
Exclude:
|
35
|
+
- 'Gemfile'
|
36
|
+
- 'spec/dummy/Gemfile'
|
37
|
+
|
38
|
+
# Turn off until we require 2.3 ruby
|
39
|
+
Style/SafeNavigation:
|
40
|
+
Enabled: false
|
41
|
+
|
32
42
|
Metrics/LineLength:
|
33
43
|
Max: 120
|
34
44
|
|
data/.travis.yml
CHANGED
@@ -3,12 +3,9 @@ sudo: required
|
|
3
3
|
language: ruby
|
4
4
|
|
5
5
|
rvm:
|
6
|
-
# Ruby 2.0.0 fails due to newer Nokogir
|
7
|
-
# nokogiri-1.7.0.1 requires ruby version >= 2.1.0, which is incompatible with the current version, ruby 2.0.0p648
|
8
6
|
# Rails 5 requires 2.2
|
9
|
-
# - 2.1.10
|
10
|
-
- 2.2.6
|
11
7
|
- 2.3.1
|
8
|
+
- 2.4.1
|
12
9
|
services:
|
13
10
|
- docker
|
14
11
|
|
@@ -36,20 +33,21 @@ before_install:
|
|
36
33
|
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen scn 1600x1200x16"
|
37
34
|
|
38
35
|
install:
|
39
|
-
- travis_retry
|
36
|
+
- travis_retry gem install bundler
|
37
|
+
- travis_retry nvm install node 8.0.0
|
40
38
|
- node -v
|
41
|
-
- travis_retry npm i -g yarn@0.
|
42
|
-
- travis_retry yarn
|
39
|
+
- travis_retry npm i -g yarn@0.24.6
|
40
|
+
- travis_retry yarn global add babel-cli
|
43
41
|
- travis_retry bundle install
|
44
|
-
-
|
45
|
-
-
|
46
|
-
- rake
|
42
|
+
- travis_retry yarn
|
43
|
+
- travis_retry yarn run build
|
44
|
+
- bundle exec rake prepare_for_ci
|
47
45
|
|
48
46
|
before_script:
|
49
47
|
- "export DISPLAY=:99"
|
50
48
|
|
51
49
|
script:
|
52
|
-
- rake
|
50
|
+
- bundle exec rake
|
53
51
|
|
54
52
|
notifications:
|
55
53
|
slack:
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,16 @@ Changes since last non-beta release.
|
|
8
8
|
|
9
9
|
*Please add entries here for your pull requests.*
|
10
10
|
|
11
|
+
## [8.0.2]
|
12
|
+
### Fixed
|
13
|
+
- Any failure in webpack to build test files quits tests.
|
14
|
+
- CI Improvements:
|
15
|
+
- Switched to yarn link and removed relative path install of react-on-rails
|
16
|
+
- Removed testing of Turbolinks 2
|
17
|
+
- All tests run against Rails 5.1.1
|
18
|
+
- Fixed test failures against Ruby 2.4
|
19
|
+
- [#862](https://github.com/shakacode/react_on_rails/pull/862) by [justin808](https://github.com/justin808)
|
20
|
+
|
11
21
|
## [8.0.1]
|
12
22
|
### Fixed
|
13
23
|
- Generator no longer modifies `assets.rb`. [#859](https://github.com/shakacode/react_on_rails/pull/859) by [justin808](https://github.com/justin808)
|
@@ -596,7 +606,9 @@ Best done with Object destructing:
|
|
596
606
|
##### Fixed
|
597
607
|
- Fix several generator related issues.
|
598
608
|
|
599
|
-
[Unreleased]: https://github.com/shakacode/react_on_rails/compare/8.0.
|
609
|
+
[Unreleased]: https://github.com/shakacode/react_on_rails/compare/8.0.2...master
|
610
|
+
[8.0.2]: https://github.com/shakacode/react_on_rails/compare/8.0.1...8.0.2
|
611
|
+
[8.0.1]: https://github.com/shakacode/react_on_rails/compare/8.0.0...8.0.1
|
600
612
|
[8.0.0]: https://github.com/shakacode/react_on_rails/compare/7.0.4...8.0.0
|
601
613
|
[8.0.0-beta.3]: https://github.com/shakacode/react_on_rails/compare/8.0.0-beta.2...8.0.0-beta.3
|
602
614
|
[8.0.0-beta.2]: https://github.com/shakacode/react_on_rails/compare/8.0.0-beta.1...8.0.0-beta.2
|
data/CONTRIBUTING.md
CHANGED
@@ -111,7 +111,7 @@ When you use a relative path, be sure to run the above `yarn` command whenever y
|
|
111
111
|
|
112
112
|
#### Example: Testing NPM changes with the dummy app
|
113
113
|
1. Add `console.log('Hello!')` [here](https://github.com/shakacode/react_on_rails/blob/master/node_package/src/clientStartup.js#L181) in `react_on_rails/node_package/src/clientStartup.js` to confirm we're getting an update to the node package.
|
114
|
-
2.
|
114
|
+
2. The "postinstall" script of "spec/dummy/client" calls "yarn link react-on-rails" to setup a sym link to the parent package.
|
115
115
|
3. Refresh the browser if the server is already running or start the server using `foreman start` from `react_on_rails/spec/dummy` and navigate to `http://localhost:5000/`. You will now see the `Hello!` message printed in the browser's console.
|
116
116
|
|
117
117
|
_Note: running `npm i` automatically builds the npm package before installing. However, when using yarn you will need to run `yarn run build` in the root directory before the install script. This will be updated when [yarn issue #2649](https://github.com/yarnpkg/yarn/issues/2649) (above) is resolved._
|
@@ -215,7 +215,7 @@ If you run `rspec` at the top level, you'll see this message: `require': cannot
|
|
215
215
|
|
216
216
|
After running a test, you can view the coverage results SimpleCov reports by opening `coverage/index.html`.
|
217
217
|
|
218
|
-
|
218
|
+
Turbolinks 5 is included in the test app, unless "DISABLE_TURBOLINKS" is set to YES in the environment.
|
219
219
|
|
220
220
|
Run `rake -T` or `rake -D` to see testing options.
|
221
221
|
|
data/Gemfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
5
|
# Specify your gem"s dependencies in react_on_rails.gemspec
|
@@ -14,20 +16,16 @@ gem "mini_racer"
|
|
14
16
|
gem "puma"
|
15
17
|
gem "rails", "5.1.1"
|
16
18
|
gem "rails_12factor"
|
17
|
-
gem "rubocop",
|
19
|
+
gem "rubocop", require: false
|
18
20
|
gem "ruby-lint", require: false
|
19
21
|
gem "sass-rails", "~> 5.0"
|
20
22
|
gem "scss_lint", require: false
|
21
|
-
gem "sdoc",
|
23
|
+
gem "sdoc", group: :doc
|
22
24
|
gem "spring"
|
23
25
|
gem "sqlite3"
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
gem "turbolinks", "2.5.3"
|
28
|
-
end
|
29
|
-
gem "uglifier", ">= 2.7.2"
|
30
|
-
gem "web-console", "~> 2.0", group: :development
|
26
|
+
gem "turbolinks", "~> 5.0"
|
27
|
+
gem "uglifier"
|
28
|
+
gem "web-console", group: :development
|
31
29
|
|
32
30
|
# below are copied from spec/dummy/Gemfile
|
33
31
|
gem "capybara"
|
@@ -42,12 +40,4 @@ gem "poltergeist"
|
|
42
40
|
gem "selenium-webdriver"
|
43
41
|
gem "webpacker_lite"
|
44
42
|
|
45
|
-
|
46
|
-
# Favorite debugging gems
|
47
|
-
gem "pry"
|
48
|
-
gem "pry-byebug"
|
49
|
-
gem "pry-doc"
|
50
|
-
gem "pry-rails"
|
51
|
-
gem "pry-rescue"
|
52
|
-
gem "pry-stack_explorer"
|
53
|
-
################################################################################
|
43
|
+
gem "rainbow"
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
[![Build Status](https://travis-ci.org/shakacode/react_on_rails.svg?branch=master)](https://travis-ci.org/shakacode/react_on_rails) [![Codeship Status for shakacode/react_on_rails](https://app.codeship.com/projects/cec6c040-971f-0134-488f-0a5146246bd8/status?branch=master)](https://app.codeship.com/projects/187011) [![Dependency Status](https://gemnasium.com/shakacode/react_on_rails.svg)](https://gemnasium.com/shakacode/react_on_rails) [![Gem Version](https://badge.fury.io/rb/react_on_rails.svg)](https://badge.fury.io/rb/react_on_rails) [![npm version](https://badge.fury.io/js/react-on-rails.svg)](https://badge.fury.io/js/react-on-rails) [![Code Climate](https://codeclimate.com/github/shakacode/react_on_rails/badges/gpa.svg)](https://codeclimate.com/github/shakacode/react_on_rails) [![Coverage Status](https://coveralls.io/repos/shakacode/react_on_rails/badge.svg?branch=master&service=github)](https://coveralls.io/github/shakacode/react_on_rails?branch=master)
|
2
2
|
|
3
|
-
The Docs here on `master` refer to 8.0.0 including support for [webpacker_lite](https://github.com/shakacode/webpacker_lite)!
|
3
|
+
The Docs here on `master` refer to 8.0.0 including support for [webpacker_lite](https://github.com/shakacode/webpacker_lite)!
|
4
|
+
*Use the [7.0.4 docs](https://github.com/shakacode/react_on_rails/tree/7.0.4) to refer to the older asset pipeline way.*
|
4
5
|
|
5
|
-
**[VERSION 8.0.0](https://rubygems.org/gems/react_on_rails/versions/8.0.0.beta.3)** has shipped with [webpacker_lite](https://github.com/shakacode/webpacker_lite) support! [react-webpack-rails-tutorial PR #395](https://github.com/shakacode/react-webpack-rails-tutorial/pull/395) shows the changes needed to
|
6
|
-
* Why did we fork webpacker to make webpacker_lite? Please provide feedback on my draft article: [Webpacker Lite: Why Did We Fork Webpacker?](https://medium.com/@railsonmaui/webpacker-lite-why-did-we-fork-webpacker-ee3305688d66) (Draft will soon become regular article).
|
6
|
+
**[VERSION 8.0.0](https://rubygems.org/gems/react_on_rails/versions/8.0.0.beta.3)** has shipped with [webpacker_lite](https://github.com/shakacode/webpacker_lite) support! [react-webpack-rails-tutorial PR #395](https://github.com/shakacode/react-webpack-rails-tutorial/pull/395) shows the changes needed to migrate from the Asset Pipeline to Webpacker Lite. For more information, see my article: [Webpacker Lite: Why Fork Webpacker?](https://blog.shakacode.com/webpacker-lite-why-fork-webpacker-f0a7707fac92). Per recent discussions, we may [eventually merge Webpacker Lite changes back into Webpacker](https://github.com/rails/webpacker/issues/464). If so, any changes will be minor if you're using Webpacker Lite.
|
7
7
|
|
8
8
|
**For a complete example of this gem, see our live demo at [www.reactrails.com](http://www.reactrails.com). ([Source Code](https://github.com/shakacode/react-webpack-rails-tutorial))**
|
9
9
|
|
@@ -38,6 +38,7 @@ For more testimonials, see [Live Projects](PROJECTS.md) and [Kudos](./KUDOS.md).
|
|
38
38
|
|
39
39
|
### Articles
|
40
40
|
|
41
|
+
* [Webpacker Lite: Why Fork Webpacker?](https://blog.shakacode.com/webpacker-lite-why-fork-webpacker-f0a7707fac92)
|
41
42
|
* [React on Rails, 2000+ 🌟 Stars](https://medium.com/shakacode/react-on-rails-2000-stars-32ff5cfacfbf#.6gmfb2gpy)
|
42
43
|
* [The React on Rails Doctrine](https://medium.com/@railsonmaui/the-react-on-rails-doctrine-3c59a778c724)
|
43
44
|
|
@@ -512,6 +513,9 @@ Node.js can be used as the backend for server-side rendering instead of [execJS]
|
|
512
513
|
|
513
514
|
## Additional Documentation
|
514
515
|
**Try out our new [Documentation Gitbook](https://shakacode.gitbooks.io/react-on-rails/content/) for improved readability & reference!**
|
516
|
+
+ **Webpacker Lite**
|
517
|
+
+ [Webpacker Lite: Why Fork Webpacker?](https://blog.shakacode.com/webpacker-lite-why-fork-webpacker-f0a7707fac92)
|
518
|
+
|
515
519
|
+ **Rails**
|
516
520
|
+ [Rails Assets](./docs/additional-reading/rails-assets.md)
|
517
521
|
+ [Rails Engine Integration](./docs/additional-reading/rails-engine-integration.md)
|
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Rake will automatically load any *.rake files inside of the "rakelib" folder
|
2
4
|
# See rakelib/
|
3
|
-
tasks = %w
|
5
|
+
tasks = %w[run_rspec lint]
|
4
6
|
if ENV["USE_COVERALLS"] == "TRUE"
|
5
7
|
require "coveralls/rake/task"
|
6
8
|
Coveralls::RakeTask.new
|
@@ -12,3 +14,6 @@ task default: tasks
|
|
12
14
|
|
13
15
|
desc "All actions but no examples, good for local developer run."
|
14
16
|
task all_but_examples: ["run_rspec:all_but_examples", "lint"]
|
17
|
+
|
18
|
+
desc "Prepare for ci, including node_package, dummy app, and generator examples"
|
19
|
+
task prepare_for_ci: %w[node_package dummy_apps examples]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# rubocop:disable Metrics/ModuleLength
|
2
4
|
# NOTE:
|
3
5
|
# For any heredoc JS:
|
@@ -11,7 +13,7 @@ require "react_on_rails/json_output"
|
|
11
13
|
module ReactOnRailsHelper
|
12
14
|
include ReactOnRails::Utils::Required
|
13
15
|
|
14
|
-
COMPONENT_HTML_KEY = "componentHtml"
|
16
|
+
COMPONENT_HTML_KEY = "componentHtml"
|
15
17
|
|
16
18
|
# The env_javascript_include_tag and env_stylesheet_link_tag support the usage of a webpack
|
17
19
|
# dev server for providing the JS and CSS assets during development mode. See
|
@@ -175,7 +177,7 @@ module ReactOnRailsHelper
|
|
175
177
|
# that contains a data props.
|
176
178
|
def redux_store_hydration_data
|
177
179
|
return if @registered_stores_defer_render.blank?
|
178
|
-
@registered_stores_defer_render.reduce("") do |accum, redux_store_data|
|
180
|
+
@registered_stores_defer_render.reduce("".dup) do |accum, redux_store_data|
|
179
181
|
accum << render_redux_store_data(redux_store_data)
|
180
182
|
end.html_safe
|
181
183
|
end
|
@@ -188,32 +190,32 @@ module ReactOnRailsHelper
|
|
188
190
|
# If you have more than one line that needs to be executed, wrap it in an IIFE.
|
189
191
|
# JS exceptions are caught and console messages are handled properly.
|
190
192
|
def server_render_js(js_expression, options = {})
|
191
|
-
wrapper_js = <<-JS
|
192
|
-
(function() {
|
193
|
-
var htmlResult = '';
|
194
|
-
var consoleReplayScript = '';
|
195
|
-
var hasErrors = false;
|
196
|
-
|
197
|
-
try {
|
198
|
-
htmlResult =
|
193
|
+
wrapper_js = <<-JS.strip_heredoc
|
199
194
|
(function() {
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
195
|
+
var htmlResult = '';
|
196
|
+
var consoleReplayScript = '';
|
197
|
+
var hasErrors = false;
|
198
|
+
|
199
|
+
try {
|
200
|
+
htmlResult =
|
201
|
+
(function() {
|
202
|
+
return #{js_expression};
|
203
|
+
})();
|
204
|
+
} catch(e) {
|
205
|
+
htmlResult = ReactOnRails.handleError({e: e, name: null,
|
206
|
+
jsCode: '#{escape_javascript(js_expression)}', serverSide: true});
|
207
|
+
hasErrors = true;
|
208
|
+
}
|
209
|
+
|
210
|
+
consoleReplayScript = ReactOnRails.buildConsoleReplay();
|
211
|
+
|
212
|
+
return JSON.stringify({
|
213
|
+
html: htmlResult,
|
214
|
+
consoleReplayScript: consoleReplayScript,
|
215
|
+
hasErrors: hasErrors
|
216
|
+
});
|
217
|
+
|
218
|
+
})()
|
217
219
|
JS
|
218
220
|
|
219
221
|
result = ReactOnRails::ServerRenderingPool.server_render_js_with_console_logging(wrapper_js)
|
@@ -300,11 +302,13 @@ module ReactOnRailsHelper
|
|
300
302
|
|
301
303
|
def compose_react_component_html_with_spec_and_console(component_specification_tag, rendered_output, console_script)
|
302
304
|
# IMPORTANT: Ensure that we mark string as html_safe to avoid escaping.
|
305
|
+
# rubocop:disable Layout/IndentHeredoc
|
303
306
|
<<-HTML.html_safe
|
304
307
|
#{component_specification_tag}
|
305
308
|
#{rendered_output}
|
306
309
|
#{console_script}
|
307
310
|
HTML
|
311
|
+
# rubocop:enable Layout/IndentHeredoc
|
308
312
|
end
|
309
313
|
|
310
314
|
# prepend the rails_context if not yet applied
|
@@ -367,6 +371,7 @@ module ReactOnRailsHelper
|
|
367
371
|
#
|
368
372
|
# Read more here: http://timelessrepo.com/json-isnt-a-javascript-subset
|
369
373
|
|
374
|
+
# rubocop:disable Layout/IndentHeredoc
|
370
375
|
wrapper_js = <<-JS
|
371
376
|
(function() {
|
372
377
|
var railsContext = #{rails_context(server_side: true).to_json};
|
@@ -381,6 +386,7 @@ module ReactOnRailsHelper
|
|
381
386
|
});
|
382
387
|
})()
|
383
388
|
JS
|
389
|
+
# rubocop:enable Layout/IndentHeredoc
|
384
390
|
|
385
391
|
result = ReactOnRails::ServerRenderingPool.server_render_js_with_console_logging(wrapper_js)
|
386
392
|
|
@@ -407,22 +413,22 @@ module ReactOnRailsHelper
|
|
407
413
|
|
408
414
|
def initialize_redux_stores
|
409
415
|
return "" unless @registered_stores.present? || @registered_stores_defer_render.present?
|
410
|
-
declarations = "var reduxProps, store, storeGenerator;\n"
|
416
|
+
declarations = "var reduxProps, store, storeGenerator;\n".dup
|
411
417
|
|
412
418
|
all_stores = (@registered_stores || []) + (@registered_stores_defer_render || [])
|
413
419
|
|
414
|
-
result = <<-JS
|
420
|
+
result = <<-JS.dup
|
415
421
|
ReactOnRails.clearHydratedStores();
|
416
422
|
JS
|
417
423
|
|
418
424
|
result << all_stores.each_with_object(declarations) do |redux_store_data, memo|
|
419
425
|
store_name = redux_store_data[:store_name]
|
420
426
|
props = props_string(redux_store_data[:props])
|
421
|
-
memo << <<-JS
|
422
|
-
reduxProps = #{props};
|
423
|
-
storeGenerator = ReactOnRails.getStoreGenerator('#{store_name}');
|
424
|
-
store = storeGenerator(reduxProps, railsContext);
|
425
|
-
ReactOnRails.setStore('#{store_name}', store);
|
427
|
+
memo << <<-JS.strip_heredoc
|
428
|
+
reduxProps = #{props};
|
429
|
+
storeGenerator = ReactOnRails.getStoreGenerator('#{store_name}');
|
430
|
+
store = storeGenerator(reduxProps, railsContext);
|
431
|
+
ReactOnRails.setStore('#{store_name}', store);
|
426
432
|
JS
|
427
433
|
end
|
428
434
|
result
|
@@ -486,7 +492,7 @@ ReactOnRails.setStore('#{store_name}', store);
|
|
486
492
|
def send_tag_method(tag_method_name, args)
|
487
493
|
asset_type = use_hot_reloading? ? :hot : :static
|
488
494
|
assets = Array(args[asset_type])
|
489
|
-
options = args.delete_if { |key, _value| %i
|
495
|
+
options = args.delete_if { |key, _value| %i[hot static].include?(key) }
|
490
496
|
send(tag_method_name, *assets, options) unless assets.empty?
|
491
497
|
end
|
492
498
|
|
data/docs/basics/generator.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "rails/generators"
|
2
4
|
require_relative "generator_messages"
|
3
5
|
require_relative "generator_helper"
|
@@ -38,26 +40,26 @@ module ReactOnRails
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def create_react_directories
|
41
|
-
dirs = %w
|
43
|
+
dirs = %w[components containers startup]
|
42
44
|
dirs.each { |name| empty_directory("client/app/bundles/HelloWorld/#{name}") }
|
43
45
|
end
|
44
46
|
|
45
47
|
def copy_base_files
|
46
48
|
base_path = "base/base/"
|
47
|
-
base_files = %w
|
49
|
+
base_files = %w[app/controllers/hello_world_controller.rb
|
48
50
|
config/webpacker_lite.yml
|
49
51
|
client/.babelrc
|
50
52
|
client/webpack.config.js
|
51
|
-
client/REACT_ON_RAILS_CLIENT_README.md
|
53
|
+
client/REACT_ON_RAILS_CLIENT_README.md]
|
52
54
|
base_files.each { |file| copy_file("#{base_path}#{file}", file) }
|
53
55
|
end
|
54
56
|
|
55
57
|
def template_base_files
|
56
58
|
base_path = "base/base/"
|
57
|
-
%w
|
59
|
+
%w[app/views/layouts/hello_world.html.erb
|
58
60
|
config/initializers/react_on_rails.rb
|
59
61
|
Procfile.dev
|
60
|
-
client/package.json
|
62
|
+
client/package.json].each { |file| template("#{base_path}#{file}.tt", file) }
|
61
63
|
end
|
62
64
|
|
63
65
|
def template_package_json
|
@@ -136,12 +138,12 @@ STRING
|
|
136
138
|
regexp = / {2}"scripts": {/
|
137
139
|
else
|
138
140
|
regexp = /^{/
|
139
|
-
replacement = <<-STRING
|
140
|
-
{
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
STRING
|
141
|
+
replacement = <<-STRING.strip_heredoc
|
142
|
+
{
|
143
|
+
"scripts": {
|
144
|
+
#{postinstall}
|
145
|
+
},
|
146
|
+
STRING
|
145
147
|
end
|
146
148
|
|
147
149
|
contents.gsub!(regexp, replacement)
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "rails/generators"
|
2
4
|
require_relative "generator_helper"
|
3
5
|
|
4
6
|
module ReactOnRails
|
5
7
|
module Generators
|
6
|
-
FALLBACK_OPTION_FOR_NODE_MODULES = <<-TEXT
|
8
|
+
FALLBACK_OPTION_FOR_NODE_MODULES = <<-TEXT
|
7
9
|
// This fixes an issue with resolving 'react' when using a local symlinked version
|
8
10
|
// of the node_package folder
|
9
11
|
modules: [
|
@@ -26,29 +28,20 @@ module ReactOnRails
|
|
26
28
|
desc: "Setup prerender true for server rendered examples"
|
27
29
|
|
28
30
|
def copy_rspec_files
|
29
|
-
%w
|
31
|
+
%w[spec/spec_helper.rb
|
30
32
|
spec/rails_helper.rb
|
31
33
|
spec/simplecov_helper.rb
|
32
|
-
.rspec
|
34
|
+
.rspec].each { |file| copy_file(file) }
|
33
35
|
end
|
34
36
|
|
35
37
|
def copy_tests
|
36
|
-
%w
|
37
|
-
end
|
38
|
-
|
39
|
-
# We want to use the node module in the local build, not the one published to NPM
|
40
|
-
def change_package_json_to_use_local_react_on_rails_module
|
41
|
-
package_json = File.join(destination_root, "client", "package.json")
|
42
|
-
old_contents = File.read(package_json)
|
43
|
-
new_contents = old_contents.gsub(/"react-on-rails": ".+",/,
|
44
|
-
'"react-on-rails": "file:../../../..",')
|
45
|
-
File.open(package_json, "w+") { |f| f.puts new_contents }
|
38
|
+
%w[spec/features/hello_world_spec.rb].each { |file| copy_file(file) }
|
46
39
|
end
|
47
40
|
|
48
41
|
def add_test_related_gems_to_gemfile
|
49
42
|
gem("rspec-rails", group: :test)
|
43
|
+
gem("poltergeist", group: :test)
|
50
44
|
gem("coveralls", require: false)
|
51
|
-
gem("poltergeist")
|
52
45
|
end
|
53
46
|
|
54
47
|
def replace_prerender_if_server_rendering
|
@@ -66,8 +59,7 @@ module ReactOnRails
|
|
66
59
|
contents = File.read(client_package_json)
|
67
60
|
replacement_value = <<-STRING
|
68
61
|
"scripts": {
|
69
|
-
"postinstall": "yarn
|
70
|
-
"install-react-on-rails": "rm -rf node_modules/react-on-rails && npm i 'file:../../../..'",
|
62
|
+
"postinstall": "yarn link react-on-rails",
|
71
63
|
STRING
|
72
64
|
new_client_package_json_contents = contents.gsub(/ {2}"scripts": {/,
|
73
65
|
replacement_value)
|