react_on_rails 8.0.1 → 8.0.2
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 +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
|
[](https://travis-ci.org/shakacode/react_on_rails) [](https://app.codeship.com/projects/187011) [](https://gemnasium.com/shakacode/react_on_rails) [](https://badge.fury.io/rb/react_on_rails) [](https://badge.fury.io/js/react-on-rails) [](https://codeclimate.com/github/shakacode/react_on_rails) [](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)
|