react_webpack_rails 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -7
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +0 -4
  5. data/docs/README.md +0 -5
  6. data/docs/hot_reloading.md +43 -0
  7. data/js/src/index.js +1 -0
  8. data/js/src/integrations/react.js +13 -1
  9. data/js/src/nodes.js +18 -13
  10. data/js/src/version.js +1 -1
  11. data/js/test/integrations/react.spec.js +18 -2
  12. data/js/test/nodes.spec.js +7 -1
  13. data/lib/generators/react_webpack_rails/install/core_generator.rb +1 -0
  14. data/lib/generators/react_webpack_rails/install/hot_reload_generator.rb +11 -0
  15. data/lib/generators/react_webpack_rails/install/view_helpers_generator.rb +1 -1
  16. data/lib/generators/react_webpack_rails/install_generator.rb +3 -1
  17. data/lib/generators/react_webpack_rails/templates/.eslintrc +9 -0
  18. data/lib/generators/react_webpack_rails/templates/forever/production.json +1 -1
  19. data/lib/generators/react_webpack_rails/templates/karma.conf.js +2 -2
  20. data/lib/generators/react_webpack_rails/templates/packages/core.json +22 -19
  21. data/lib/generators/react_webpack_rails/templates/packages/hot-reload.json +2 -2
  22. data/lib/generators/react_webpack_rails/templates/packages/js-specs.json +7 -7
  23. data/lib/generators/react_webpack_rails/templates/packages/redux.json +3 -3
  24. data/lib/generators/react_webpack_rails/templates/packages/server-side.json +2 -2
  25. data/lib/generators/react_webpack_rails/templates/packages/view-helpers.json +1 -1
  26. data/lib/generators/react_webpack_rails/templates/react/node_server.js +3 -2
  27. data/lib/generators/react_webpack_rails/templates/webpack.config.js +8 -6
  28. data/lib/generators/react_webpack_rails/templates/webpack/dev.config.js +5 -0
  29. data/lib/generators/react_webpack_rails/templates/webpack/hot-dev.config.js +9 -3
  30. data/lib/react_webpack_rails/node_integration_runner.rb +2 -0
  31. data/lib/react_webpack_rails/version.rb +1 -1
  32. data/lib/react_webpack_rails/view_helpers.rb +1 -1
  33. data/package.json +17 -14
  34. data/react_webpack_rails.gemspec +3 -3
  35. metadata +11 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab94298add2a819ece6deb843faba11d9854eb57
4
- data.tar.gz: 3f287303ddad42a74f2f1940e730648a1fb22c72
3
+ metadata.gz: af9564bfb4b12c69e4d66eeac675460937160f2f
4
+ data.tar.gz: c3288864a9793770dc625a038dd4bf5bc1064ec8
5
5
  SHA512:
6
- metadata.gz: 19e00ab4020c5446abc04f4591ae2dd2a1d9ae41904d73596d4761ce6164f7481ef9cd1c62620aa9fb8a0970f4e03d326cb174c5a9bf2b5d7cbc334a6296d0a7
7
- data.tar.gz: 168c1019d826949b794ada7d57628729cda4757a2e94d790b50dd73c3eb47d3c9f717a8201b4e25834c05f78bf9b87d3b4403970a78b9cb53da78d7a75183388
6
+ metadata.gz: 216d8a5c7400488a76af02e6aff743622c34087bb696457dedb3a1e63847c10b2d9fa5966f8ef6fe1ee5df2a8572dd5d36c8f28126ea1713a30b38afbca0dce0
7
+ data.tar.gz: 6079da81cf633683d9c58a3a8e175b7f4265cdec441998f6058eee390ea495d7bf1fd03224204ae7a8f076b2e085f7133cf7a24514d36ee1655ed023daa7c0fb
@@ -1,11 +1,90 @@
1
+ ## 0.7.0
2
+ - updated packages
3
+ - added ready to use eslint setup
4
+ - added NODE_ENV eq 'development' for webpack dev config.
5
+ - fixed server-side render
6
+
7
+ #### migration 0.6.0 -> 0.7.0
8
+ - update your packges using [ncu](https://github.com/tjunnone/npm-check-updates) or manually in package.json.
9
+ - setup eslint
10
+ - install eslit-config-airbnb and it's dependencies:
11
+
12
+ ```bash
13
+ (
14
+ export PKG=eslint-config-airbnb;
15
+ npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
16
+ )
17
+ ```
18
+ - add .eslintrc file in project root path:
19
+
20
+ ```json
21
+ {
22
+ "extends": "airbnb",
23
+ "env": {
24
+ "mocha": true
25
+ },
26
+ "rules": {
27
+ "import/no-extraneous-dependencies": [0]
28
+ }
29
+ }
30
+ ```
31
+ - Set NODE_EVN in development:
32
+
33
+ in `dev.config.js` add:
34
+
35
+ ```js
36
+ const Webpack = require('webpack');
37
+ [...]
38
+ config.plugins.push(
39
+ new Webpack.DefinePlugin({'process.env': {'NODE_ENV': '"development"'}})
40
+ );
41
+ ```
42
+ - If using server-side render, update node_server.js - required by new httpdispatcher version,
43
+
44
+ replace:
45
+
46
+ ```js
47
+ const dispatcher = require('httpdispatcher');
48
+ ```
49
+ with:
50
+
51
+ ```js
52
+ const httpdispatcher = require('httpdispatcher');
53
+ const dispatcher = new httpdispatcher();
54
+ ```
55
+
56
+
57
+ ## 0.6.0
58
+ - new way of registering component
59
+ ```jsx
60
+ import RWR from 'react-webpack-rails'
61
+ import FileInput from './components/FileInput';
62
+
63
+ RWR.run();
64
+ RWR.registerComponent({ FileInput });
65
+ ```
66
+ - new option to reg
67
+ ```jsx
68
+ import RWR from 'react-webpack-rails'
69
+ import FileInput from './components/FileInput';
70
+ import RangeInput from './components/RangeInput';
71
+ import NumberInput from './components/NumberInput';
72
+
73
+ RWR.run();
74
+ RWR.registerComponents({ FileInput, RangeInput, NumberInput });
75
+ ```
76
+ - add rwr-view_helpers to generators
77
+ - update node_server.js to modern one
78
+ - bump npm packages versions
79
+
1
80
  ## 0.5.0
2
- * fixed forever setup - solving problems with running node server,
3
- * renamed `react_element` -> `rwr_element`,
4
- * dropped deprecated react_router integration,
5
- * npm dependencies bump,
6
- * support Rails 5:
7
- * added Turbolinks 5 compatibility,
8
- * added Rails 5 dummy app for testing.
81
+ - fixed forever setup - solving problems with running node server,
82
+ - renamed `react_element` -> `rwr_element`,
83
+ - dropped deprecated react_router integration,
84
+ - npm dependencies bump,
85
+ - support Rails 5:
86
+ - added Turbolinks 5 compatibility,
87
+ - added Rails 5 dummy app for testing.
9
88
 
10
89
 
11
90
  #### migration 0.4.1 -> 0.5.0
@@ -8,7 +8,7 @@ Found a bug in React Webpack Rails? Open an issue on [GitHub Issues](https://git
8
8
 
9
9
  Interested in contributing to React Webpack Rails? That's great, and thank you for your interest!
10
10
 
11
- After checking out the repo, run `bundle exec rake setup:all` to install every environment dependencies.
11
+ After checking out the repo, switch to development branch & run `bundle exec rake setup:all` to install every environment dependencies.
12
12
 
13
13
  To get your contributions accepted, make sure:
14
14
 
data/README.md CHANGED
@@ -4,16 +4,12 @@
4
4
  #### Rails - Webpack setup with React integration.
5
5
  This gem provides easy and convenient way to build modern JavaScript stack on top of Rails applications using [Webpack](http://webpack.github.io/) and [React](https://facebook.github.io/react/).
6
6
 
7
- ### Development branch!
8
- See [0.4-stable](https://github.com/netguru/react_webpack_rails/tree/0.4-stable) for latest release.
9
-
10
7
  ## Features
11
8
  * [Install Generator](https://github.com/netguru/react_webpack_rails/blob/master/docs/install_generator.md) for quick [Webpack](http://webpack.github.io/) setup.
12
9
  * Integrated [react-hot-loader](https://github.com/gaearon/react-hot-loader)
13
10
  * ES6/7 support with [babeljs](https://babeljs.io/).
14
11
  * Node.js based [server-side JavaScript execution](https://github.com/netguru/react_webpack_rails/blob/master/docs/server_side_rendering.md).
15
12
  * [React](https://facebook.github.io/react/) integration with server prerender option.
16
- * [React-router](https://github.com/rackt/react-router) integration.
17
13
 
18
14
  ### Plugins:
19
15
  * [rwr-alt](https://github.com/netguru/rwr-alt) plugin that makes it possible to populate and share Alt stores between react component located in different parts of rails views.
@@ -9,11 +9,6 @@
9
9
  * [js: unmountComponent](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#unmountcomponent)
10
10
  * [ruby: react_component](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#react_component)
11
11
 
12
- 1.2 [ReactRouter](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#ReactRouter)
13
- * [js: getRouter](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#getrouter)
14
- * [js: renderRouter](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#renderrouter)
15
- * [ruby: react_router](https://github.com/netguru/react_webpack_rails/blob/master/docs/api.md#react_router)
16
-
17
12
  2. [Server-Side Rendering](https://github.com/netguru/react_webpack_rails/blob/master/docs/server_side_rendering.md)
18
13
 
19
14
  3. [Install Generator](https://github.com/netguru/react_webpack_rails/blob/master/docs/install_generator.md)
@@ -0,0 +1,43 @@
1
+ # Hot reloading
2
+
3
+ ## Migration to react-hot-loader v3
4
+
5
+ RWR is now using react-hot-loader v3 instead of v1 (https://github.com/netguru/react_webpack_rails/pull/143)
6
+
7
+ V3 is a complete overhaul which fixes many problems with previous version, i.e. reloading functional components.
8
+
9
+ The upgrade requires a few steps which can be applied automatically via our generator:
10
+
11
+ ```
12
+ bundle exec rails generate react_webpack_rails:install:hot_reload
13
+ ```
14
+
15
+
16
+ Detailed steps are outlined below:
17
+
18
+ 1. Bump `react-hot-loader` version in `package.json` file
19
+
20
+ ```
21
+ "react-hot-loader": "^3.0.0-beta.6"
22
+ ```
23
+
24
+ 2. Replace react-hot with `react-hot-loader/webpack` in `webpack/hot-dev.config.js` file
25
+
26
+ ```javascript
27
+ jsxLoader.loaders.unshift('react-hot-loader/webpack');
28
+ ```
29
+
30
+ 3. Add `react-hot-loader/patch` in `webpack/hot-dev.config.js` file
31
+
32
+ ```javascript
33
+ config.entry.main.unshift('react-hot-loader/patch')
34
+ ```
35
+
36
+ 4. Add following code at the bottom of your `app/react/index.js` file to enable hot-reloading:
37
+
38
+ ```javascript
39
+ if (module.hot) {
40
+ module.hot.accept();
41
+ RWR.reloadNodes();
42
+ }
43
+ ```
@@ -21,6 +21,7 @@ class RWR {
21
21
 
22
22
  this.mountNodes = nodes.mountNodes;
23
23
  this.unmountNodes = nodes.unmountNodes;
24
+ this.reloadNodes = nodes.reloadNodes;
24
25
  }
25
26
 
26
27
  run() {
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import ReactDOM from 'react-dom';
3
3
  import ReactDOMServer from 'react-dom/server';
4
+ import { AppContainer } from 'react-hot-loader';
4
5
 
5
6
  class ReactIntegration {
6
7
  constructor() {
@@ -33,11 +34,13 @@ class ReactIntegration {
33
34
 
34
35
  createComponent(name, props) {
35
36
  const constructor = this.getComponent(name);
36
- return React.createElement(constructor, props);
37
+ const element = React.createElement(constructor, props);
38
+ return React.createElement(AppContainer, null, element);
37
39
  }
38
40
 
39
41
  renderComponent(name, props, node) {
40
42
  const component = this.createComponent(name, props);
43
+ this._attachIntegrationData(node, name, props);
41
44
  ReactDOM.render(component, node);
42
45
  }
43
46
 
@@ -65,6 +68,15 @@ class ReactIntegration {
65
68
  }.bind(this),
66
69
  };
67
70
  }
71
+
72
+ _attachIntegrationData(node, name, props) {
73
+ const nativeNode = node.selector ? node[0] : node; // normalize jquery objects to native nodes
74
+ const dataset = nativeNode.dataset;
75
+ if (dataset.rwrElement) return;
76
+ dataset.rwrElement = 'true';
77
+ dataset.integrationName = 'react-component';
78
+ dataset.payload = JSON.stringify({ name, props });
79
+ };
68
80
  }
69
81
 
70
82
  export default new ReactIntegration;
@@ -34,18 +34,23 @@ function _unmountNode(node) {
34
34
  if (typeof(unmount) === 'function') { unmount(node, data.payload); }
35
35
  }
36
36
 
37
+ function mountNodes(searchSelector) {
38
+ const nodes = _findDOMNodes(searchSelector);
39
+ for (let i = 0; i < nodes.length; ++i) {
40
+ _mountNode(nodes[i]);
41
+ }
42
+ }
43
+
44
+ function unmountNodes(searchSelector) {
45
+ const nodes = _findDOMNodes(searchSelector);
46
+ for (let i = 0; i < nodes.length; ++i) {
47
+ _unmountNode(nodes[i]);
48
+ }
49
+ }
50
+
37
51
  export default {
38
- mountNodes: function _mountNodes(searchSelector) {
39
- const nodes = _findDOMNodes(searchSelector);
40
- for (let i = 0; i < nodes.length; ++i) {
41
- _mountNode(nodes[i]);
42
- }
43
- },
44
-
45
- unmountNodes: function _unmountNodes(searchSelector) {
46
- const nodes = _findDOMNodes(searchSelector);
47
- for (let i = 0; i < nodes.length; ++i) {
48
- _unmountNode(nodes[i]);
49
- }
50
- },
52
+ mountNodes,
53
+ unmountNodes,
54
+ // Used after hot module replacement
55
+ reloadNodes: mountNodes,
51
56
  };
@@ -1 +1 @@
1
- export default '0.6.0';
1
+ export default '0.7.0';
@@ -1,6 +1,7 @@
1
1
  import expect, { spyOn } from 'expect';
2
2
  import React, { PropTypes } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
+ import { AppContainer } from 'react-hot-loader';
4
5
  import subject from '../../src/integrations/react';
5
6
 
6
7
  class HelloComponent extends React.Component {
@@ -70,10 +71,13 @@ describe('ReactIntegration', function () {
70
71
  });
71
72
 
72
73
  describe('#createComponent', function () {
73
- it('creates component with given props', function () {
74
+ it('creates component with given props wrapped in AppContainer for hot-reloading', function () {
74
75
  subject.registerComponent('HelloWorld', HelloComponent);
75
- const component = subject.createComponent('HelloWorld', { username: 'testUser' });
76
+ const wrapper = subject.createComponent('HelloWorld', { username: 'testUser' });
76
77
 
78
+ expect(wrapper.type).toBe(AppContainer);
79
+
80
+ const component = wrapper.props.children;
77
81
  expect(component.props).toEqual({ username: 'testUser' });
78
82
  expect(component.type).toBe(HelloComponent);
79
83
  });
@@ -90,6 +94,18 @@ describe('ReactIntegration', function () {
90
94
  });
91
95
  });
92
96
 
97
+ describe('#renderComponent', function () {
98
+ it('attaches integration data to node', function () {
99
+ const node = { nodeType: 1, nodeName: 'DIV', dataset: {} };
100
+ const props = { key: 1 };
101
+ const reactSpy = spyOn(ReactDOM, 'render');
102
+ subject.renderComponent('componentName', props, node);
103
+ expect(node.dataset.rwrElement).toEqual('true');
104
+ expect(node.dataset.integrationName).toEqual('react-component');
105
+ expect(node.dataset.payload).toEqual('{"name":"componentName","props":{"key":1}}');
106
+ });
107
+ });
108
+
93
109
  describe('#integrationWrapper', function () {
94
110
  const node = { nodeType: 1, nodeName: 'DIV' };
95
111
 
@@ -2,7 +2,7 @@ import expect, { spyOn, createSpy } from 'expect';
2
2
  import Nodes from '../src/nodes';
3
3
  import IntegrationsManager from '../src/integrations-manager';
4
4
 
5
- const { mountNodes, unmountNodes } = Nodes;
5
+ const { mountNodes, unmountNodes, reloadNodes } = Nodes;
6
6
 
7
7
  const node = {
8
8
  nodeType: 1,
@@ -118,4 +118,10 @@ describe('Nodes', function () {
118
118
  });
119
119
  });
120
120
  });
121
+
122
+ describe('#reloadNodes', function () {
123
+ it('is equal to mountNodes', function () {
124
+ expect(reloadNodes).toEqual(mountNodes);
125
+ });
126
+ });
121
127
  });
@@ -12,6 +12,7 @@ module ReactWebpackRails
12
12
 
13
13
  def base
14
14
  copy_file '.babelrc', '.babelrc'
15
+ copy_file '.eslintrc', '.eslintrc'
15
16
  create_file 'app/assets/javascripts/react_bundle.js'
16
17
  require_bundles_in_application_js
17
18
  template 'react/index.js', 'app/react/index.js'
@@ -37,6 +37,17 @@ module ReactWebpackRails
37
37
  inject_into_file settings[:layout_file], settings[:parsed_command], after: "#{settings[:body_tag]}\n"
38
38
  end
39
39
 
40
+ def index
41
+ append_to_file 'app/react/index.js' do <<-'JS'.strip_heredoc
42
+
43
+ if (module.hot) {
44
+ module.hot.accept();
45
+ RWR.reloadNodes();
46
+ }
47
+ JS
48
+ end
49
+ end
50
+
40
51
  private
41
52
 
42
53
  def template_language_settings(command)
@@ -22,7 +22,7 @@ module ReactWebpackRails
22
22
  def add_rwr_view_helpers
23
23
  append_file 'Gemfile' do
24
24
  <<-'RB'.strip_heredoc
25
- gem 'rwr-view_helpers', '~> 0.1.1'
25
+ gem 'rwr-view_helpers'
26
26
  RB
27
27
  end
28
28
  end
@@ -73,7 +73,9 @@ module ReactWebpackRails
73
73
  end
74
74
 
75
75
  def install_gems
76
- run 'bundle install'
76
+ Bundler.with_clean_env do
77
+ run 'bundle install'
78
+ end
77
79
  end
78
80
 
79
81
  def install_packages
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "airbnb",
3
+ "env": {
4
+ "mocha": true
5
+ },
6
+ "rules": {
7
+ "import/no-extraneous-dependencies": [0]
8
+ }
9
+ }
@@ -3,5 +3,5 @@
3
3
  "append": true,
4
4
  "script": "node_server.js",
5
5
  "workingDir": "./",
6
- "sourceDir": "app/react",
6
+ "sourceDir": "app/react"
7
7
  }
@@ -16,12 +16,12 @@ module.exports = function (config) {
16
16
  {
17
17
  test: /\.jsx?$/,
18
18
  exclude: /node_modules/,
19
- loader: 'babel'
19
+ loader: 'babel-loader'
20
20
  }]
21
21
  },
22
22
  watch: true,
23
23
  resolve: {
24
- extensions: ["", ".js", ".jsx", ".js.jsx"]
24
+ extensions: [".js", ".jsx", ".js.jsx"]
25
25
  },
26
26
  devtool: 'inline-source-map',
27
27
  },
@@ -1,27 +1,30 @@
1
1
  {
2
2
  "private": true,
3
3
  "devDependencies": {
4
- "babel-eslint": "^6.1.0",
5
- "eslint": "^2.13.0",
6
- "eslint-plugin-react": "^5.2.0",
7
- "webpack-notifier": "^1.3.0"
4
+ "babel-eslint": "^7.2.0",
5
+ "eslint": "^3.18.0",
6
+ "eslint-config-airbnb": "^13.0.0",
7
+ "eslint-plugin-import": "^2.2.0",
8
+ "eslint-plugin-jsx-a11y": "^2.2.0",
9
+ "eslint-plugin-react": "^6.7.0",
10
+ "webpack-notifier": "^1.5.0"
8
11
  },
9
12
  "dependencies": {
10
- "babel-core": "^6.10.0",
11
- "babel-loader": "^6.2.0",
12
- "babel-preset-es2015": "^6.9.0",
13
- "babel-preset-react": "^6.11.0",
14
- "babel-preset-stage-1": "^6.5.0",
15
- "css-loader": "^0.23.0",
16
- "extract-text-webpack-plugin": "^1.0.0",
17
- "node-sass": "^3.8.0",
18
- "react": "^15.1.0",
19
- "react-addons-test-utils": "^15.1.0",
20
- "react-dom": "^15.1.0",
21
- "react-webpack-rails": "^0.5.0",
22
- "sass-loader": "^4.0.0",
23
- "style-loader": "^0.13.1",
24
- "webpack": "^1.13.0"
13
+ "babel-core": "^6.24.0",
14
+ "babel-loader": "^6.4.1",
15
+ "babel-preset-es2015": "^6.24.0",
16
+ "babel-preset-react": "^6.23.0",
17
+ "babel-preset-stage-1": "^6.22.0",
18
+ "css-loader": "^0.27.3",
19
+ "extract-text-webpack-plugin": "^2.1.0",
20
+ "node-sass": "^4.5.1",
21
+ "react": "^15.4.2",
22
+ "react-addons-test-utils": "^15.4.2",
23
+ "react-dom": "^15.4.2",
24
+ "react-webpack-rails": "^0.6.0",
25
+ "sass-loader": "^6.0.3",
26
+ "style-loader": "^0.15.0",
27
+ "webpack": "^2.3.0"
25
28
  },
26
29
  "scripts": {
27
30
  "start": "webpack -w --config webpack/dev.config.js",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "devDependencies": {
3
- "react-hot-loader": "^1.3.0",
4
- "webpack-dev-server": "^1.14.0"
3
+ "react-hot-loader": "^3.0.0-beta.6",
4
+ "webpack-dev-server": "^2.4.2"
5
5
  },
6
6
  "scripts": {
7
7
  "start-hot-dev": "webpack-dev-server --hot --inline --config webpack/hot-dev.config.js"
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "devDependencies": {
3
3
  "expect": "^1.20.0",
4
- "karma": "^1.1.0",
5
- "karma-chrome-launcher": "^1.0.0",
6
- "karma-mocha": "^1.1.0",
7
- "karma-sinon": "^1.0.0",
4
+ "karma": "^1.5.0",
5
+ "karma-chrome-launcher": "^2.0.0",
6
+ "karma-mocha": "^1.3.0",
7
+ "karma-sinon": "^1.0.5",
8
8
  "karma-sourcemap-loader": "^0.3.7",
9
- "karma-webpack": "^1.7.0",
10
- "mocha": "^2.5.0",
11
- "sinon": "^1.17.0"
9
+ "karma-webpack": "^2.0.3",
10
+ "mocha": "^3.2.0",
11
+ "sinon": "^2.1.0"
12
12
  },
13
13
  "scripts": {
14
14
  "test": "karma start"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
- "react-redux": "^4.4.0",
4
- "redux": "^3.5.0",
5
- "rwr-redux": "^0.4.0"
3
+ "react-redux": "^5.0.3",
4
+ "redux": "^3.6.0",
5
+ "rwr-redux": "^0.5.0"
6
6
  }
7
7
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "dependencies": {
3
- "forever": "^0.15.0",
3
+ "forever": "^0.15.3",
4
4
  "http": "*",
5
- "httpdispatcher": "^1.0.0"
5
+ "httpdispatcher": "^2.0.1"
6
6
  },
7
7
  "scripts": {
8
8
  "rwr-node-dev-server": "forever forever/development.json",
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "dependencies": {
3
- "rwr-view-helpers": "^0.1.1"
3
+ "rwr-view-helpers": "^0.2.0"
4
4
  }
5
5
  }
@@ -4,10 +4,11 @@ require('./index');
4
4
  const fs = require('fs');
5
5
  const path = require('path');
6
6
  const http = require('http');
7
- const dispatcher = require('httpdispatcher');
7
+ const httpdispatcher = require('httpdispatcher');
8
+ const dispatcher = new httpdispatcher();
8
9
  const { integrationsManager } = require('react-webpack-rails');
9
10
 
10
- const PORT = 8081;
11
+ const PORT = parseInt(process.env.PORT || 8081);
11
12
  const ASSETS_MAPPING_PATH = 'tmp/cache/assets-mapping.json';
12
13
 
13
14
  global.__RWR_ENV__ = {};
@@ -1,4 +1,5 @@
1
1
  var ExtractTextPlugin = require('extract-text-webpack-plugin');
2
+ var path = require('path');
2
3
 
3
4
  module.exports = {
4
5
  entry: {
@@ -11,24 +12,25 @@ module.exports = {
11
12
  module: {
12
13
  loaders: [
13
14
  {
14
- key: 'jsx',
15
15
  test: /\.jsx?$/,
16
16
  exclude: /(node_modules)/,
17
- loaders: ['babel']
17
+ loaders: ['babel-loader']
18
18
  },
19
19
  {
20
- key: 'style',
21
20
  test: /\.s?css$/,
22
21
  loader: ExtractTextPlugin.extract('css!sass')
23
22
  }
24
23
  ]
25
24
  },
26
25
  resolve: {
27
- extensions: ['', '.js', '.jsx', '.js.jsx']
26
+ alias: {
27
+ 'rwr-redux$': path.resolve(__dirname, '../../')
28
+ },
29
+ extensions: ['.js', '.jsx', '.js.jsx']
28
30
  },
29
31
  plugins: [
30
- new ExtractTextPlugin('../stylesheets/react_bundle.css', {
31
- allChunks: true
32
+ new ExtractTextPlugin({
33
+ filename: '../stylesheets/react_bundle.css', allChunks: true
32
34
  })
33
35
  ]
34
36
  };
@@ -1,7 +1,12 @@
1
+ const Webpack = require('webpack');
1
2
  const WebpackNotifierPlugin = require('webpack-notifier');
2
3
  const config = require('./../webpack.config');
3
4
 
4
5
  config.plugins.push(new WebpackNotifierPlugin());
5
6
  config.devtool = 'eval-source-map';
6
7
 
8
+ config.plugins.push(
9
+ new Webpack.DefinePlugin({'process.env': {'NODE_ENV': '"development"'}})
10
+ );
11
+
7
12
  module.exports = config;
@@ -1,9 +1,13 @@
1
1
  var config = require('./dev.config');
2
2
 
3
- var jsxLoader = config.module.loaders.filter(function(loader) { return loader.key == 'jsx' })[0]
4
- jsxLoader.loaders.unshift('react-hot');
3
+ var jsxLoader = config.module.loaders.filter(function(loader) {
4
+ return /jsx/.test(loader.test);
5
+ })[0];
6
+ jsxLoader.loaders.unshift('react-hot-loader/webpack');
5
7
 
6
- var scssLoader = config.module.loaders.filter(function(loader) { return loader.key == 'style' })[0]
8
+ var scssLoader = config.module.loaders.filter(function(loader) {
9
+ return /s?css/.test(loader.test);
10
+ })[0];
7
11
  scssLoader.loader = 'style!css!sass!';
8
12
 
9
13
  config.output.publicPath = 'http://localhost:8080/assets/'
@@ -13,4 +17,6 @@ config.entry.main.push(
13
17
  'webpack-dev-server/client?http://localhost:8080'
14
18
  )
15
19
 
20
+ config.entry.main.unshift('react-hot-loader/patch')
21
+
16
22
  module.exports = config;
@@ -1,3 +1,5 @@
1
+ require 'net/http'
2
+
1
3
  module ReactWebpackRails
2
4
  class NodeIntegrationRunner
3
5
  include NodeHelpers
@@ -1,3 +1,3 @@
1
1
  module ReactWebpackRails
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -14,7 +14,7 @@ module ReactWebpackRails
14
14
  end
15
15
 
16
16
  def react_element(integration_name, payload = {}, html_options = {}, &block)
17
- message = 'since v0.5.0: react_element is depricated. Use rwr_element instead'
17
+ message = 'since v0.5.0: react_element is deprecated. Use rwr_element instead'
18
18
  ActiveSupport::Deprecation.warn message
19
19
 
20
20
  rwr_element(integration_name, payload, html_options, &block)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-webpack-rails",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Js part of react_webpack_rails - webpack based React & Rails integration.",
5
5
  "main": "js/lib/index.js",
6
6
  "files": [
@@ -28,20 +28,23 @@
28
28
  },
29
29
  "homepage": "https://github.com/netguru/react_webpack_rails#readme",
30
30
  "dependencies": {
31
- "babel-polyfill": "^6.3.0",
32
- "react": "^15.0.0",
33
- "react-dom": "^15.0.0"
31
+ "babel-polyfill": "^6.23.0",
32
+ "react": "^15.4.2",
33
+ "react-dom": "^15.4.2",
34
+ "react-hot-loader": "^3.0.0-beta.6"
34
35
  },
35
36
  "devDependencies": {
36
- "babel-cli": "^6.10.0",
37
- "babel-core": "^6.10.0",
38
- "babel-preset-es2015": "^6.9.0",
39
- "babel-preset-react": "^6.11.0",
40
- "eslint": "^2.13.0",
41
- "eslint-config-airbnb": "^9.0.0",
42
- "eslint-plugin-react": "^5.2.0",
43
- "expect": "^1.20.0",
44
- "history": "^3.0.0",
45
- "mocha": "^2.5.0"
37
+ "babel-cli": "^6.24.0",
38
+ "babel-core": "^6.24.0",
39
+ "babel-preset-es2015": "^6.24.0",
40
+ "babel-preset-react": "^6.23.0",
41
+ "eslint": "^3.17.1",
42
+ "eslint-config-airbnb": "^14.1.0",
43
+ "eslint-plugin-import": "^2.2.0",
44
+ "eslint-plugin-jsx-a11y": "^4.0.0",
45
+ "eslint-plugin-react": "^6.10.0",
46
+ "expect": "^1.20.2",
47
+ "history": "^4.6.0",
48
+ "mocha": "^3.2.0"
46
49
  }
47
50
  }
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.10'
26
- spec.add_development_dependency 'rake', '~> 10.0'
27
- spec.add_development_dependency 'rspec', '~> 3.3'
25
+ spec.add_development_dependency 'bundler', '~> 1.14.6'
26
+ spec.add_development_dependency 'rake', '~> 12.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.5'
28
28
 
29
29
  spec.add_dependency 'rails', '>= 3.2'
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react_webpack_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafał Gawlik
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-08-19 00:00:00.000000000 Z
12
+ date: 2017-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -17,42 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.10'
20
+ version: 1.14.6
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.10'
27
+ version: 1.14.6
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: '12.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: '12.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3.3'
48
+ version: '3.5'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.3'
55
+ version: '3.5'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rails
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +91,7 @@ files:
91
91
  - docs/README.md
92
92
  - docs/api.md
93
93
  - docs/deployment.md
94
+ - docs/hot_reloading.md
94
95
  - docs/install_generator.md
95
96
  - docs/server_side_rendering.md
96
97
  - js/.eslintrc
@@ -116,6 +117,7 @@ files:
116
117
  - lib/generators/react_webpack_rails/merge_helpers.rb
117
118
  - lib/generators/react_webpack_rails/package_merge.rb
118
119
  - lib/generators/react_webpack_rails/templates/.babelrc
120
+ - lib/generators/react_webpack_rails/templates/.eslintrc
119
121
  - lib/generators/react_webpack_rails/templates/examples/component_view.html.erb
120
122
  - lib/generators/react_webpack_rails/templates/examples/react_examples_controller.rb
121
123
  - lib/generators/react_webpack_rails/templates/examples/ssr-component_view.html.erb
@@ -172,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
174
  version: '0'
173
175
  requirements: []
174
176
  rubyforge_project:
175
- rubygems_version: 2.4.5.1
177
+ rubygems_version: 2.6.10
176
178
  signing_key:
177
179
  specification_version: 4
178
180
  summary: React and Rails integration done with webpack