react_on_rails 2.0.0.rc.3 → 2.0.0.rc.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/docs/additional_reading/heroku_deployment.md +46 -0
- data/docs/additional_reading/manual_installation.md +1 -1
- data/docs/coding-style/linters.md +3 -3
- data/docs/coding-style/style.md +4 -12
- data/docs/rails3.md +7 -0
- data/docs/tutorial-v2.md +210 -0
- data/lib/generators/USAGE +17 -0
- data/lib/generators/react_on_rails/bootstrap_generator.rb +1 -5
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.base.config.js +1 -4
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.rails.config.js +13 -2
- data/lib/generators/react_on_rails/templates/base/base/package.json +2 -3
- data/lib/generators/react_on_rails/templates/base/server_rendering/client/webpack.server.rails.config.js +1 -1
- data/lib/react_on_rails/configuration.rb +0 -2
- data/lib/react_on_rails/engine.rb +5 -0
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/version_checker.rb +66 -32
- data/package.json +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00b3529c45b04826cc9f06735e62276563ddce94
|
4
|
+
data.tar.gz: 04d6beee91a23ebaba8161a828b5f1d8e20f34f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d5d6aedc821b9ac2f7e3f53d1764413d7d42fdb48480edfa0833720bf3392075b8e228c697fd1caee841eebfca269bc793113b6775089728083c2aed15e86c1
|
7
|
+
data.tar.gz: f9944838c5cf645e5d00f19bf4846907572164428e89ec64b1afe9f75a6162ce43fd9a300be360f31134675455cea41248540e0cbf32405952cf875cd9a669b6
|
data/CHANGELOG.md
CHANGED
@@ -39,6 +39,17 @@ All notable changes to this project will be documented in this file. Items under
|
|
39
39
|
- JS Linter uses ShakaCode JavaScript style: https://github.com/shakacode/style-guide-javascript
|
40
40
|
- Generators account these differences.
|
41
41
|
|
42
|
+
### Migration Steps
|
43
|
+
[Example of upgrading](https://github.com/shakacode/react-webpack-rails-tutorial/commit/5b1b8698e8daf0f0b94e987740bc85ee237ef608)
|
44
|
+
|
45
|
+
1. Update the `react_on_rails` gem
|
46
|
+
2. Search you app for 'generator_function' and remove lines in layouts and rb files that contain it. Determination of a generator function is handled automatically.
|
47
|
+
3. Find your files where you registered client and server globals, and use the new ReactOnRails.register syntax. Optionally rename the files `clientRegistration.jsx` and `serverRegistration.jsx` rather than `Globals`.
|
48
|
+
4. Update your index.jade to use the new API `ReactOnRails.render("MyApp", !{props}, 'app');`
|
49
|
+
5. Update your webpack files per the example commit. Remove globally exposing React and ReactDom, as well as their inclusion in the `entry` section. These are automatically included now.
|
50
|
+
|
51
|
+
That's it!
|
52
|
+
|
42
53
|
## v1.2.2
|
43
54
|
### Fixed
|
44
55
|
- Missing Lodash from generated package.json [#175](https://github.com/shakacode/react_on_rails/pull/175)
|
@@ -21,3 +21,49 @@ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi
|
|
21
21
|
Heroku will now be able to use the multiple buildpacks specified in `.buildpacks`.
|
22
22
|
|
23
23
|
Note, an alternative approach is to use the [Heroku Toolbelt to set buildpacks](https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app).
|
24
|
+
|
25
|
+
## Fresh Rails Install
|
26
|
+
|
27
|
+
### Swap out sqlite for postgres by doing the following:
|
28
|
+
|
29
|
+
1. Delete the line with `sqlite` and replace it with:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
gem 'pg'
|
33
|
+
```
|
34
|
+
|
35
|
+
2. Replace your `database.yml` file with this (assuming your app name is "ror")
|
36
|
+
|
37
|
+
```yml
|
38
|
+
default: &default
|
39
|
+
adapter: postgresql
|
40
|
+
username:
|
41
|
+
password:
|
42
|
+
host: localhost
|
43
|
+
|
44
|
+
development:
|
45
|
+
<<: *default
|
46
|
+
database: ror_development
|
47
|
+
|
48
|
+
# Warning: The database defined as "test" will be erased and
|
49
|
+
# re-generated from your development database when you run "rake".
|
50
|
+
# Do not set this db to the same as development or production.
|
51
|
+
test:
|
52
|
+
<<: *default
|
53
|
+
database: ror_test
|
54
|
+
|
55
|
+
production:
|
56
|
+
<<: *default
|
57
|
+
database: ror_production
|
58
|
+
```
|
59
|
+
|
60
|
+
Run:
|
61
|
+
|
62
|
+
```
|
63
|
+
bundle
|
64
|
+
bin/rake db:migrate
|
65
|
+
bin/rake db:setup
|
66
|
+
```
|
67
|
+
|
68
|
+
|
69
|
+
|
@@ -58,7 +58,7 @@ You can disable all rules for a line or block, or only specific rules, as shown
|
|
58
58
|
|
59
59
|
* [Configuring ESLint](http://eslint.org/docs/user-guide/configuring.html#configuring-rules)
|
60
60
|
* [ESLint quick start](http://untilfalse.com/eslint-quick-start/)
|
61
|
-
* [RuboCop]
|
62
|
-
* [ESLint]
|
63
|
-
* [JSCS]
|
61
|
+
* [RuboCop](https://github.com/bbatsov/rubocop)
|
62
|
+
* [ESLint](http://eslint.org/)
|
63
|
+
* [JSCS](https://github.com/jscs-dev/node-jscs)
|
64
64
|
|
data/docs/coding-style/style.md
CHANGED
@@ -6,26 +6,18 @@ This document describes the coding style of [ShakaCode](http://www.shakacode.com
|
|
6
6
|
* Anything additional goes next.
|
7
7
|
|
8
8
|
## Client Side JavaScript and React
|
9
|
-
*
|
10
|
-
* Use [Lodash](https://lodash.com/) rather than Underscore.
|
11
|
-
* Place all JavaScript for the client app in `/client`
|
12
|
-
* Organize your app into high level domains which map to JavaScript bundles. These are like mini-apps that live within your entire app. Create directories named like `/client/app/<bundle>` and configure Webpack to generate different corresponding bundles.
|
13
|
-
* Carefully organize your React components into [Smart and Dumb Components](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ygdkh1l7b):
|
14
|
-
1. "dumb" components that live in the `/client/app/<bundle>/components/` directories. These components should take props, including values and callbacks, and should not talk directly to Redux or any AJAX endpoints.
|
15
|
-
2. "smart" components that live in the `/client/app/<bundle>/containers/` directory. These components will talk to the Redux store and AJAX endpoints.
|
16
|
-
* Place common code shared across bundles in `/client/app/libs` and configure Webpack to generate a common bundle for this one.
|
17
|
-
* Prefix Immutable.js variable names and properties with `$$`. By doing this, you will clearly know that you are dealing with an Immutable.js object and not a standard JavaScript Object or Array.
|
18
|
-
* Use ES6 classes rather than `React.createClass`.
|
19
|
-
* Bind callbacks passed to react components with `_.bindAll` in the constructor unless you need to bind additional parameters. In that case, you can call `_.bind` within the rendering.
|
9
|
+
* See the [Shakacode JavaScript Style Guide](https://github.com/shakacode/style-guide-javascript)
|
20
10
|
|
21
11
|
## Style Guides to Follow
|
22
12
|
Follow these style guidelines per the linter configuration. Basically, lint your code and if you have questions about the suggested fixes, look here:
|
23
13
|
|
24
14
|
### Ruby Coding Standards
|
25
|
-
* [
|
15
|
+
* [ShakaCode Ruby Coding Standards](https://github.com/shakacode/style-guide-ruby)
|
26
16
|
* [Ruby Documentation](http://guides.rubyonrails.org/api_documentation_guidelines.html)
|
27
17
|
|
28
18
|
### JavaScript Coding Standards
|
19
|
+
* [ShakaCode Javascript](https://github.com/shakacode/style-guide-javascript)
|
20
|
+
* Use the [eslint-config-shakacode](https://github.com/shakacode/style-guide-javascript/tree/master/packages/eslint-config-shakacode) npm package with eslint.
|
29
21
|
* [AirBnb Javascript](https://github.com/airbnb/javascript)
|
30
22
|
* [JSDoc](http://usejsdoc.org/)
|
31
23
|
|
data/docs/rails3.md
ADDED
data/docs/tutorial-v2.md
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
I just released RC3 of [React On Rails](https://github.com/shakacode/react_on_rails/tree/npm-react-on-rails-js). Here's a tiny tutorial to get you started. This tutorial setups up a new Rails app with **React on Rails**, demonstrating Rails + React + Redux + Server Rendering.
|
2
|
+
|
3
|
+
You can find:
|
4
|
+
|
5
|
+
* [Source code for this sample app](https://github.com/justin808/test-react-on-rails-3)
|
6
|
+
* [Live on Heroku](https://shakacode-react-on-rails.herokuapp.com/hello_world)
|
7
|
+
|
8
|
+
By the time you read this, the latest may have changed. Be sure to check the versions here:
|
9
|
+
|
10
|
+
* https://rubygems.org/gems/react_on_rails
|
11
|
+
* https://www.npmjs.com/package/react-on-rails
|
12
|
+
|
13
|
+
Trying out v2 is super easy, so long as you have the basic prerequisites. This includes the basics for Rails 4.x and node version 4+. I recommend `rvm` and `nvm` to install Ruby and Node.
|
14
|
+
|
15
|
+
```
|
16
|
+
cd <directory where you want to create your new Rails app>
|
17
|
+
# any name you like
|
18
|
+
rails new test-react-on-rails-3
|
19
|
+
cd test-react-on-rails-3
|
20
|
+
# git-extras command to make a new git repo and commit everything
|
21
|
+
git setup
|
22
|
+
vim Gemfile
|
23
|
+
```
|
24
|
+
|
25
|
+
Add this line to your Gemfile:
|
26
|
+
|
27
|
+
```
|
28
|
+
gem 'react_on_rails', '~> 2.0.0.rc.3'
|
29
|
+
```
|
30
|
+
|
31
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/fb2c41941cdc2b6cdfcc563f8a837a9cf5a51cec.png" width="482" height="113">
|
32
|
+
|
33
|
+
```
|
34
|
+
bundle
|
35
|
+
bundle exec rails generate react_on_rails:install -R -S -H -L
|
36
|
+
bundle && npm i
|
37
|
+
npm run rails-server
|
38
|
+
```
|
39
|
+
|
40
|
+
* R => Redux
|
41
|
+
* S => Server Rendering
|
42
|
+
* H => Heroku setup
|
43
|
+
* L => Linters
|
44
|
+
|
45
|
+
|
46
|
+
Visit http://localhost:3000/hello_world and see your React On Rails app running!
|
47
|
+
|
48
|
+
```
|
49
|
+
npm run node-server-hot
|
50
|
+
```
|
51
|
+
|
52
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/5bd396a7f9c0764929b693fb79eb6685ec6f62cf.png" width="470" height="499">
|
53
|
+
|
54
|
+
Visit http://localhost:4000 and see your React On Rails app running using the Webpack Dev server.
|
55
|
+
|
56
|
+
With this setup, you can make changes to your JS or CSS and the browser will hot reload the changes (no page refresh required).
|
57
|
+
|
58
|
+
I'm going to add this line to:
|
59
|
+
|
60
|
+
```html
|
61
|
+
<h1>Welcome to React On Rails!</h1>
|
62
|
+
```
|
63
|
+
|
64
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/d20719a52541e95ddd968a95192d3247369c3bf6.png" width="498" height="500">
|
65
|
+
|
66
|
+
If you save, you'll soon see this screen:
|
67
|
+
|
68
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/228706a99a411548a4539f72446d3f115ed36f95.png" width="555" height="500">
|
69
|
+
|
70
|
+
|
71
|
+
If you're motivated to try the linting setup, you'll want to run the following commands:
|
72
|
+
|
73
|
+
bin/rake lint
|
74
|
+
|
75
|
+
You'll see a few rubocop errors.
|
76
|
+
|
77
|
+
rubocop -a
|
78
|
+
|
79
|
+
That will fix almost all the errors. However, the linter setup expects you to have rspec (small bug currently). These two commands address that issue:
|
80
|
+
|
81
|
+
```
|
82
|
+
rm -rf test
|
83
|
+
mkdir spec
|
84
|
+
```
|
85
|
+
|
86
|
+
bin/rake lint
|
87
|
+
|
88
|
+
The edit `application.scss`. Delete the comment at the top.
|
89
|
+
|
90
|
+
bin/rake lint
|
91
|
+
|
92
|
+
You should see
|
93
|
+
|
94
|
+
```
|
95
|
+
bin/rake lint
|
96
|
+
|
97
|
+
Running via Spring preloader in process 26674
|
98
|
+
Running Rubocop Linters via `rubocop -S -D .`
|
99
|
+
rubocop -S -D .
|
100
|
+
Warning: Deprecated pattern style '/Users/justin/scratch/test-react-on-rails-3/client/node_modules/**/*' in /Users/justin/scratch/test-react-on-rails-3/.rubocop.yml
|
101
|
+
Inspecting 22 files
|
102
|
+
......................
|
103
|
+
|
104
|
+
22 files inspected, no offenses detected
|
105
|
+
Running ruby-lint Linters via `ruby-lint app config spec lib`
|
106
|
+
ruby-lint app config spec lib
|
107
|
+
scss-lint found no lints
|
108
|
+
Running eslint via `cd client && npm run eslint . -- --ext .jsx,.js`
|
109
|
+
cd client && npm run eslint . -- --ext .jsx,.js
|
110
|
+
|
111
|
+
> react-webpack-rails-tutorial@1.1.0 eslint /Users/justin/scratch/test-react-on-rails-3/client
|
112
|
+
> eslint --ext .js,.jsx . "." "--ext" ".jsx,.js"
|
113
|
+
|
114
|
+
Running jscs via `cd client && npm run jscs .`
|
115
|
+
cd client && npm run jscs .
|
116
|
+
|
117
|
+
> react-webpack-rails-tutorial@1.1.0 jscs /Users/justin/scratch/test-react-on-rails-3/client
|
118
|
+
> jscs --verbose . "."
|
119
|
+
|
120
|
+
Completed running all JavaScript Linters
|
121
|
+
Completed all linting
|
122
|
+
```
|
123
|
+
|
124
|
+
## RubyMine
|
125
|
+
|
126
|
+
It's super important to exclude certain directories from RubyMine or else it will slow to a crawl as it tries to parse all the npm files.
|
127
|
+
|
128
|
+
* `app/assets/javascripts/generated`
|
129
|
+
* `client/node_modules`
|
130
|
+
|
131
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/a1b3e1146d86915f7d5d1c89548e81ec208458cc.png" width="338" height="500">
|
132
|
+
|
133
|
+
|
134
|
+
## Deploying to Heroku
|
135
|
+
|
136
|
+
### Create Your Heroku App
|
137
|
+
*Assuming you can login to heroku.com and have logged into to your shell for heroku.*
|
138
|
+
|
139
|
+
1. Visit https://dashboard.heroku.com/new and create an app, say named `my-name-react-on-rails`:
|
140
|
+
|
141
|
+
<img src="http://forum.shakacode.com/uploads/default/original/1X/2d1b6abc40eef8e411e84d2679de91353f617567.png" width="690" height="319">
|
142
|
+
|
143
|
+
Run this command that looks like this from your new heroku app
|
144
|
+
|
145
|
+
heroku git:remote -a my-name-react-on-rails
|
146
|
+
|
147
|
+
Set the correct buildpack for using react-on-rails:
|
148
|
+
|
149
|
+
heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi
|
150
|
+
|
151
|
+
|
152
|
+
### Swap out sqlite for postgres by doing the following:
|
153
|
+
|
154
|
+
1. Delete the line with `sqlite` and replace it with:
|
155
|
+
|
156
|
+
```ruby
|
157
|
+
gem 'pg'
|
158
|
+
```
|
159
|
+
|
160
|
+
2. Replace your `database.yml` file with this (assuming your app name is "ror").
|
161
|
+
|
162
|
+
```yml
|
163
|
+
default: &default
|
164
|
+
adapter: postgresql
|
165
|
+
username:
|
166
|
+
password:
|
167
|
+
host: localhost
|
168
|
+
|
169
|
+
development:
|
170
|
+
<<: *default
|
171
|
+
database: ror_development
|
172
|
+
|
173
|
+
# Warning: The database defined as "test" will be erased and
|
174
|
+
# re-generated from your development database when you run "rake".
|
175
|
+
# Do not set this db to the same as development or production.
|
176
|
+
test:
|
177
|
+
<<: *default
|
178
|
+
database: ror_test
|
179
|
+
|
180
|
+
production:
|
181
|
+
<<: *default
|
182
|
+
database: ror_production
|
183
|
+
```
|
184
|
+
|
185
|
+
Then you need to setup postgres so you can run locally:
|
186
|
+
|
187
|
+
```
|
188
|
+
bundle
|
189
|
+
bin/rake db:migrate
|
190
|
+
bin/rake db:setup
|
191
|
+
```
|
192
|
+
|
193
|
+
I'd recommend adding this line to the top of your `routes.rb`. That way, your root page will go to the Hello World page for React On Rails.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
root "hello_world#index"
|
197
|
+
```
|
198
|
+
|
199
|
+
You can see the changes [here on github](https://github.com/justin808/test-react-on-rails-3/commit/09909433c186566a53f611e8b1cfeca3238f5266).
|
200
|
+
|
201
|
+
Then push your app to Heroku!
|
202
|
+
|
203
|
+
git push heroku master
|
204
|
+
|
205
|
+
Here's mine:
|
206
|
+
|
207
|
+
* [Source code for this sample app](https://github.com/justin808/test-react-on-rails-3)
|
208
|
+
* [Live on Heroku](https://shakacode-react-on-rails.herokuapp.com/hello_world)
|
209
|
+
|
210
|
+
Feedback is greatly appreciated! As are stars on github!
|
data/lib/generators/USAGE
CHANGED
@@ -94,6 +94,23 @@ are such that the default is for the flag to be off. For example, the default fo
|
|
94
94
|
|
95
95
|
We really love using all the linters! Give them a try.
|
96
96
|
|
97
|
+
*******************************************************************************
|
98
|
+
|
99
|
+
After running the generator, you will want to:
|
100
|
+
|
101
|
+
bundle && npm i
|
102
|
+
|
103
|
+
Then you may run
|
104
|
+
|
105
|
+
npm run
|
106
|
+
|
107
|
+
And you will see several useful commands:
|
108
|
+
|
109
|
+
node-server-hot
|
110
|
+
echo 'visit http://localhost:4000' && cd client && npm start
|
111
|
+
rails-server
|
112
|
+
echo 'visit http://localhost:3000/hello_world' && foreman start -f Procfile.dev
|
113
|
+
|
97
114
|
More Details:
|
98
115
|
|
99
116
|
`https://github.com/shakacode/react_on_rails#generator`
|
@@ -52,11 +52,7 @@ module ReactOnRails
|
|
52
52
|
|
53
53
|
application_scss = File.join(destination_root, "app/assets/stylesheets/application.scss")
|
54
54
|
|
55
|
-
|
56
|
-
append_to_file(application_scss, data)
|
57
|
-
else
|
58
|
-
GeneratorMessages.add_error(setup_file_error(application_scss, data))
|
59
|
-
end
|
55
|
+
append_to_file(application_scss, data)
|
60
56
|
end
|
61
57
|
|
62
58
|
def strip_application_scss_of_incompatible_sprockets_statements
|
@@ -16,8 +16,6 @@ module.exports = {
|
|
16
16
|
vendor: [
|
17
17
|
'babel-polyfill',
|
18
18
|
'jquery',
|
19
|
-
'react',
|
20
|
-
'react-dom',
|
21
19
|
],
|
22
20
|
|
23
21
|
// This will contain the app entry points defined by webpack.hot.config and webpack.rails.config
|
@@ -26,7 +24,7 @@ module.exports = {
|
|
26
24
|
],
|
27
25
|
},
|
28
26
|
resolve: {
|
29
|
-
extensions: ['', '.
|
27
|
+
extensions: ['', '.js', '.jsx'],
|
30
28
|
alias: {
|
31
29
|
lib: path.join(process.cwd(), 'app', 'lib'),
|
32
30
|
react: path.resolve('./node_modules/react'),
|
@@ -34,7 +32,6 @@ module.exports = {
|
|
34
32
|
},
|
35
33
|
},
|
36
34
|
plugins: [
|
37
|
-
|
38
35
|
new webpack.DefinePlugin({
|
39
36
|
'process.env': {
|
40
37
|
NODE_ENV: JSON.stringify(nodeEnv),
|
data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.rails.config.js
CHANGED
@@ -25,8 +25,19 @@ config.entry.vendor.push('jquery-ujs');
|
|
25
25
|
|
26
26
|
// See webpack.common.config for adding modules common to both the webpack dev server and rails
|
27
27
|
config.module.loaders.push(
|
28
|
-
{
|
29
|
-
|
28
|
+
{
|
29
|
+
test: /\.jsx?$/,
|
30
|
+
loader: 'babel-loader',
|
31
|
+
exclude: /node_modules/,
|
32
|
+
},
|
33
|
+
{
|
34
|
+
test: require.resolve('react'),
|
35
|
+
loader: 'imports?shim=es5-shim/es5-shim&sham=es5-shim/es5-sham',
|
36
|
+
},
|
37
|
+
{
|
38
|
+
test: require.resolve('jquery-ujs'),
|
39
|
+
loader: 'imports?jQuery=jquery',
|
40
|
+
}
|
30
41
|
);
|
31
42
|
|
32
43
|
module.exports = config;
|
@@ -10,9 +10,8 @@
|
|
10
10
|
"scripts": {
|
11
11
|
"postinstall": "cd client && npm install",
|
12
12
|
"test": "rspec && (cd client && npm run lint)",
|
13
|
-
"node-server-hot": "cd client && npm start",
|
14
|
-
"rails-server
|
15
|
-
"rails-server": "foreman start -f Procfile.dev"
|
13
|
+
"node-server-hot": "echo 'visit http://localhost:4000' && cd client && npm start",
|
14
|
+
"rails-server": "echo 'visit http://localhost:3000/hello_world' && foreman start -f Procfile.dev"
|
16
15
|
},
|
17
16
|
"repository": {
|
18
17
|
"type": "git",
|
@@ -19,7 +19,7 @@ module.exports = {
|
|
19
19
|
path: '../app/assets/javascripts/generated',
|
20
20
|
},
|
21
21
|
resolve: {
|
22
|
-
extensions: ['', '.
|
22
|
+
extensions: ['', '.js', '.jsx'],
|
23
23
|
alias: {
|
24
24
|
lib: path.join(process.cwd(), 'app', 'lib'),
|
25
25
|
},
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative "version_checker"
|
2
1
|
|
3
2
|
module ReactOnRails
|
4
3
|
def self.configure
|
@@ -6,7 +5,6 @@ module ReactOnRails
|
|
6
5
|
end
|
7
6
|
|
8
7
|
def self.configuration
|
9
|
-
VersionChecker.warn_if_gem_and_node_package_versions_differ
|
10
8
|
@configuration ||= Configuration.new(
|
11
9
|
server_bundle_js_file: "app/assets/javascripts/generated/server.js",
|
12
10
|
prerender: false,
|
@@ -1,6 +1,11 @@
|
|
1
|
+
require_relative "version_checker"
|
2
|
+
|
1
3
|
module ReactOnRails
|
2
4
|
class Engine < ::Rails::Engine
|
3
5
|
config.to_prepare do
|
6
|
+
if File.exist?(VersionChecker::NodePackageVersion.package_json_path)
|
7
|
+
VersionChecker.build.warn_if_gem_and_node_package_versions_differ
|
8
|
+
end
|
4
9
|
ReactOnRails::ServerRenderingPool.reset_pool
|
5
10
|
end
|
6
11
|
end
|
@@ -1,51 +1,85 @@
|
|
1
1
|
require_relative "version"
|
2
2
|
|
3
3
|
module ReactOnRails
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
class VersionChecker
|
5
|
+
attr_reader :node_package_version, :logger
|
6
|
+
|
7
|
+
def self.build
|
8
|
+
new(NodePackageVersion.build, Rails.logger)
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(node_package_version, logger)
|
12
|
+
@logger = logger
|
13
|
+
@node_package_version = node_package_version
|
14
|
+
end
|
12
15
|
|
13
16
|
# For compatibility, the gem and the node package versions should always match, unless the user
|
14
17
|
# really knows what they're doing. So we will give a warning if they do not.
|
15
|
-
def
|
16
|
-
return
|
17
|
-
|
18
|
-
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n" \
|
19
|
-
" gem: #{gem_version}\n" \
|
20
|
-
" node package: #{node_package_version}\n" \
|
21
|
-
"Ensure the installed version of the gem is the same as the version of your installed node package"
|
22
|
-
puts(msg)
|
23
|
-
Rails.logger.warn(msg)
|
18
|
+
def warn_if_gem_and_node_package_versions_differ
|
19
|
+
return if node_package_version.major == gem_major_version || node_package_version.relative_path?
|
20
|
+
log_differing_versions_warning
|
24
21
|
end
|
25
22
|
|
26
23
|
private
|
27
24
|
|
28
|
-
def
|
29
|
-
ReactOnRails
|
25
|
+
def log_differing_versions_warning
|
26
|
+
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package MAJOR versions do not match\n" \
|
27
|
+
" gem: #{gem_version}\n" \
|
28
|
+
" node package: #{node_package_version.raw}\n" \
|
29
|
+
"Ensure the installed MAJOR version of the gem is the same as the MAJOR version of \n"\
|
30
|
+
"your installed node package."
|
31
|
+
logger.warn(msg)
|
30
32
|
end
|
31
33
|
|
32
|
-
|
33
|
-
|
34
|
-
return unless client_package_json.present? && File.exist?(client_package_json)
|
35
|
-
contents = File.read(client_package_json)
|
36
|
-
raw_version = contents.match(/"react-on-rails": "(.*)",/)[1]
|
37
|
-
raw_version.tr("-", ".")
|
34
|
+
def gem_version
|
35
|
+
ReactOnRails::VERSION
|
38
36
|
end
|
39
37
|
|
40
|
-
def
|
41
|
-
|
42
|
-
Rails.root.join("client", "package.json")
|
38
|
+
def gem_major_version
|
39
|
+
gem_version.match(/(\d+)\./)[1]
|
43
40
|
end
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
42
|
+
class NodePackageVersion
|
43
|
+
attr_reader :package_json
|
44
|
+
|
45
|
+
def self.build
|
46
|
+
new(package_json_path)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.package_json_path
|
50
|
+
Rails.root.join("client", "package.json")
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(package_json)
|
54
|
+
@package_json = package_json
|
55
|
+
end
|
56
|
+
|
57
|
+
def raw
|
58
|
+
JSON.parse(package_json_contents)["dependencies"]["react-on-rails"]
|
59
|
+
end
|
60
|
+
|
61
|
+
def normalized
|
62
|
+
match = raw
|
63
|
+
.tr("-", ".")
|
64
|
+
.strip
|
65
|
+
.match(/(\d.*)/)
|
66
|
+
match.present? ? match[0] : nil
|
67
|
+
end
|
68
|
+
|
69
|
+
def relative_path?
|
70
|
+
normalized.nil? # must be a relative path if nil and we haven't failed
|
71
|
+
end
|
72
|
+
|
73
|
+
def major
|
74
|
+
return if normalized.nil?
|
75
|
+
normalized.match(/(\d+)\./)[1]
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def package_json_contents
|
81
|
+
@package_json_contents ||= File.read(package_json)
|
82
|
+
end
|
49
83
|
end
|
50
84
|
end
|
51
85
|
end
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: react_on_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.rc.
|
4
|
+
version: 2.0.0.rc.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Gordon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: connection_pool
|
@@ -302,7 +302,9 @@ files:
|
|
302
302
|
- docs/coding-style/style.md
|
303
303
|
- docs/contributing.md
|
304
304
|
- docs/generator_testing.md
|
305
|
+
- docs/rails3.md
|
305
306
|
- docs/releasing.md
|
307
|
+
- docs/tutorial-v2.md
|
306
308
|
- lib/generators/USAGE
|
307
309
|
- lib/generators/react_on_rails/base_generator.rb
|
308
310
|
- lib/generators/react_on_rails/bootstrap_generator.rb
|