react_webpack_rails 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -0
  3. data/CHANGELOG.md +23 -1
  4. data/README.md +1 -1
  5. data/Rakefile +57 -12
  6. data/docs/api.md +0 -60
  7. data/docs/install_generator.md +0 -1
  8. data/js/src/index.js +0 -8
  9. data/js/src/integrations-manager.js +0 -2
  10. data/js/src/nodes.js +1 -1
  11. data/js/src/version.js +1 -1
  12. data/js/test/integrations-manager.spec.js +1 -5
  13. data/js/test/nodes.spec.js +4 -4
  14. data/lib/assets/javascripts/react_integration.js.erb +9 -47
  15. data/lib/generators/react_webpack_rails/install/server_side_generator.rb +1 -0
  16. data/lib/generators/react_webpack_rails/install_generator.rb +0 -10
  17. data/lib/generators/react_webpack_rails/templates/forever/development.json +7 -6
  18. data/lib/generators/react_webpack_rails/templates/forever/production.json +5 -4
  19. data/lib/generators/react_webpack_rails/templates/packages/core.json +18 -18
  20. data/lib/generators/react_webpack_rails/templates/packages/hot-reload.json +1 -1
  21. data/lib/generators/react_webpack_rails/templates/packages/js-specs.json +8 -8
  22. data/lib/generators/react_webpack_rails/templates/packages/redux.json +3 -3
  23. data/lib/generators/react_webpack_rails/templates/packages/server-side.json +1 -1
  24. data/lib/react_webpack_rails/version.rb +1 -1
  25. data/lib/react_webpack_rails/view_helpers.rb +12 -5
  26. data/package.json +11 -11
  27. metadata +2 -6
  28. data/js/src/integrations/react-router.js +0 -60
  29. data/js/test/integrations/react-router.spec.js +0 -133
  30. data/lib/generators/react_webpack_rails/install/react_router_generator.rb +0 -21
  31. data/lib/generators/react_webpack_rails/templates/packages/react-router.json +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4abcce90a9fd0f8ee452f26d43740e03dcb50cb6
4
- data.tar.gz: a8ce7c8838761c50eb669e6d9161171696581139
3
+ metadata.gz: 3dedadf24fa2870a3a88a55a64aa0eb3621da825
4
+ data.tar.gz: dbf9547a683c1796873a5fd36f5b6def0f04a537
5
5
  SHA512:
6
- metadata.gz: 358ab702580f5a5bc3db430ad47e33cb239e26362abd9ef89b4783e03fa6cb9e6d112c5faacc857081d9486ce67f4a8479483ce0fff153aacb9bb57f20682a68
7
- data.tar.gz: 6cda137ad21c6aaed000f946501a748b85ee06d58e03a36c77621964a1f554912eac9678324c066478d36ffdf6de25df45d86dcbc529925f843a6eef5f51d63f
6
+ metadata.gz: 52b54c004400fbfbc56901524e73e5dbc9bfecfad0fe436da5e7d8830f03b0bbdea2c53cf24c560866245704152449205c16bcd5d415f5b4b0c561be3cdb5a4c
7
+ data.tar.gz: 5fe97c37924eb22bbda98aef4603980658917fc10a0027f3a5554c5982c7448231a352b058ba135615aac290c04c0d3523d4f54376b86a166ab7fe280bdaf32d
data/.travis.yml CHANGED
@@ -2,17 +2,32 @@ branches:
2
2
  except:
3
3
  - docs
4
4
 
5
+ sudo: required
6
+ dist: trusty
5
7
  language: ruby
8
+ addons:
9
+ # From some tests it seems you can only have one firefox addon.
10
+ # Adding two results in the last one defined being the one installed.
11
+ apt:
12
+ sources:
13
+ - google-chrome
14
+ packages:
15
+ - google-chrome-stable
16
+ - google-chrome-beta
6
17
 
7
18
  cache:
8
19
  bundler: true
9
20
  directories:
10
21
  - spec/rails3_dummy_app/node_modules
11
22
  - spec/rails4_dummy_app/node_modules
23
+ - spec/rails5_dummy_app/node_modules
12
24
  - node_modules
13
25
 
14
26
  matrix:
15
27
  include:
28
+ - rvm: 2.2.4
29
+ gemfile: spec/rails5_dummy_app/Gemfile
30
+ env: TEST_SUITE=rails5
16
31
  - rvm: 2.2.4
17
32
  gemfile: spec/rails4_dummy_app/Gemfile
18
33
  env: TEST_SUITE=rails4
@@ -25,6 +40,9 @@ matrix:
25
40
  - rvm: 2.2.4
26
41
  env: TEST_SUITE=node
27
42
 
43
+ before_install:
44
+ - sudo apt-get update -qq
45
+
28
46
  before_script:
29
47
  - npm install -g npm@^2.0
30
48
  - npm install -g webpack@^1.12.1
data/CHANGELOG.md CHANGED
@@ -1,8 +1,30 @@
1
+ ## 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.
9
+
10
+
11
+ #### migration 0.4.1 -> 0.5.0
12
+ in both: `forever/development.json` & `forever/production.json` replace
13
+ ```
14
+ "sourceDir": "./app/react",
15
+ ```
16
+ with:
17
+ ```
18
+ "workingDir": "./",
19
+ "sourceDir": "app/react",
20
+ ```
21
+
22
+
1
23
  ## 0.4.1
2
24
  * Update install generator - set NODE_ENV for production.
3
25
 
4
26
  #### migration 0.4.0 -> 0.4.1
5
- * replace `webpack/productino.config.js` with:
27
+ * replace `webpack/production.config.js` with:
6
28
 
7
29
  ```js
8
30
  const Webpack = require('webpack');
data/README.md CHANGED
@@ -5,7 +5,7 @@
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
7
  ### Development branch!
8
- See [0.3-stable](https://github.com/netguru/react_webpack_rails/tree/0.3-stable) for latest release.
8
+ See [0.4-stable](https://github.com/netguru/react_webpack_rails/tree/0.4-stable) for latest release.
9
9
 
10
10
  ## Features
11
11
  * [Install Generator](https://github.com/netguru/react_webpack_rails/blob/master/docs/install_generator.md) for quick [Webpack](http://webpack.github.io/) setup.
data/Rakefile CHANGED
@@ -1,33 +1,55 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  namespace :test do
5
5
  desc 'Run all tests'
6
- task all: [:node, :gem, :rails3, :rails4] do
6
+ task all: [:node, :gem, :rails3, :rails4, :rails5] do
7
7
  puts 'Finished all tests, yay!'
8
8
  end
9
9
 
10
10
  desc 'Run node package tests'
11
11
  task :node do
12
- sh %Q(npm test)
12
+ sh %(npm test)
13
13
  end
14
14
 
15
15
  desc 'Run gem tests'
16
16
  task :gem do
17
- sh %Q(bundle exec rspec spec/react_webpack_rails_spec.rb spec/react_webpack_rails)
17
+ sh %(bundle exec rspec spec/react_webpack_rails_spec.rb spec/react_webpack_rails)
18
18
  end
19
19
 
20
20
  desc 'Run rspec for rails3 application'
21
21
  task :rails3 do
22
22
  Bundler.with_clean_env do
23
- sh %Q(cd spec/rails3_dummy_app && npm run build && bundle exec rspec && npm test)
23
+ sh %(
24
+ cd spec/rails3_dummy_app &&
25
+ npm run build &&
26
+ bundle exec rspec &&
27
+ npm test
28
+ )
24
29
  end
25
30
  end
26
31
 
27
32
  desc 'Run rspec for rails4 application'
28
33
  task :rails4 do
29
34
  Bundler.with_clean_env do
30
- sh %Q(cd spec/rails4_dummy_app && npm run build && bundle exec rspec && npm test)
35
+ sh %(
36
+ cd spec/rails4_dummy_app &&
37
+ npm run build &&
38
+ bundle exec rspec &&
39
+ npm test
40
+ )
41
+ end
42
+ end
43
+
44
+ desc 'Run rspec for rails5 application'
45
+ task :rails5 do
46
+ Bundler.with_clean_env do
47
+ sh %(
48
+ cd spec/rails5_dummy_app &&
49
+ npm run build &&
50
+ bundle exec rspec &&
51
+ npm test
52
+ )
31
53
  end
32
54
  end
33
55
  end
@@ -36,27 +58,50 @@ task default: 'test:all'
36
58
 
37
59
  namespace :setup do
38
60
  desc 'Prepare every environment'
39
- task all: [:node, :gem, :rails3, :rails4] do
61
+ task all: [:node, :gem, :rails3, :rails4, :rails5] do
40
62
  puts 'Prepared all, yay!'
41
63
  end
42
64
 
43
65
  desc 'Prepare node module dependencies'
44
66
  task :node do
45
- sh %Q(npm install)
67
+ sh %(npm install)
46
68
  end
47
69
 
48
70
  desc 'Prepare gem dependencies'
49
71
  task :gem do
50
- sh %Q(bundle install)
72
+ sh %(bundle install)
51
73
  end
52
74
 
53
75
  desc 'Prepare rails3 test app dependencies'
54
76
  task :rails3 do
55
- sh %Q(npm install && cd spec/rails3_dummy_app && npm install && bundle install)
77
+ sh %(
78
+ npm install &&
79
+ cd spec/rails3_dummy_app &&
80
+ rm -rf node_modules/react-webpack-rails &&
81
+ npm install &&
82
+ bundle install
83
+ )
56
84
  end
57
85
 
58
86
  desc 'Prepare rails4 test app dependencies'
59
87
  task :rails4 do
60
- sh %Q(npm install && cd spec/rails4_dummy_app && npm install && bundle install)
88
+ sh %(
89
+ npm install &&
90
+ cd spec/rails4_dummy_app &&
91
+ rm -rf node_modules/react-webpack-rails &&
92
+ npm install &&
93
+ bundle install
94
+ )
95
+ end
96
+
97
+ desc 'Prepare rails5 test app dependencies'
98
+ task :rails5 do
99
+ sh %(
100
+ npm install &&
101
+ cd spec/rails5_dummy_app &&
102
+ rm -rf node_modules/react-webpack-rails &&
103
+ npm install &&
104
+ bundle install
105
+ )
61
106
  end
62
107
  end
data/docs/api.md CHANGED
@@ -108,63 +108,3 @@
108
108
  ```ruby
109
109
  render react_component: 'MyComponentName', props: MySerializer.new(my_data), tag: :ul, server_side: true
110
110
  ```
111
-
112
-
113
- ## ReactRouter
114
- * #### registerRouter [js]
115
- ```js
116
- registerRouter(String routerName, class|function component)
117
- ```
118
-
119
- Register router so it's globally accessible.
120
-
121
- ##### example:
122
-
123
- ```js
124
- import MyComponent from 'my-component';
125
-
126
- registerComponent('MyComponentName', MyComponent);
127
- ```
128
-
129
- **note:** Registered components are accessible in globally exposed `RWR.reactRouter` under `routers` property.
130
-
131
- * #### getRouter [js]
132
-
133
- ```js
134
- getRouter(String routerName)
135
- ```
136
-
137
- Shortcut for accessing registered router.
138
-
139
- ##### example:
140
-
141
- ```js
142
- getRouter('MyRouterName');
143
- ```
144
-
145
- * #### renderRouter [js]
146
-
147
- ```js
148
- renderRouter(String routerName, DOMElement container)
149
- ```
150
-
151
- Wrapper over `React.render`. Search and render given router into specified DOM element.
152
-
153
- ##### example:
154
-
155
- ```js
156
- var element = document.getElementById('my-element');
157
- renderRouter('MyRouterName', element);
158
- ```
159
-
160
- * #### react_router [ruby]
161
-
162
- ```ruby
163
- react_router(String router_name)
164
- ```
165
-
166
- ##### example:
167
-
168
- ```ruby
169
- <%= react_router('MyRouterName') %>
170
- ```
@@ -50,7 +50,6 @@ And modify:
50
50
  * `--no-hot-reload` - skip hot_reload generator
51
51
  * `--no-server-side` - skip server_side generator
52
52
  * `--no-karma-setup` - skip karma_setup generator
53
- * `--react-router` - run react_rotuer generator [DEPRECIATED since v0.3.0 - use [rwr-react_router](https://github.com/netguru/rwr-react_router) instead]
54
53
  * `--redux` - install and setup [`rwr-redux`](https://github.com/netguru/rwr-redux) gem
55
54
 
56
55
  *Detailed description of generators coming soon...*
data/js/src/index.js CHANGED
@@ -2,15 +2,12 @@ import env from './env';
2
2
  import nodes from './nodes';
3
3
  import integrationsManager from './integrations-manager';
4
4
  import react from './integrations/react';
5
- import reactRouter from './integrations/react-router';
6
5
  import version from './version';
7
6
 
8
7
  export { react as react };
9
8
  export { nodes as nodes };
10
9
  export { integrationsManager as integrationsManager };
11
10
  export { env as env };
12
- export { reactRouter as reactRouter };
13
-
14
11
 
15
12
  class RWR {
16
13
  constructor() {
@@ -22,11 +19,6 @@ class RWR {
22
19
  this.renderComponent = react.renderComponent;
23
20
  this.unmountComponent = react.unmountComponent;
24
21
 
25
- this.renderRouter = reactRouter.renderRouter;
26
- this.registerRouter = reactRouter.registerRouter;
27
- this.unmountRouter = reactRouter.unmountRouter;
28
- this.getRouter = reactRouter.getRouter;
29
-
30
22
  this.mountNodes = nodes.mountNodes;
31
23
  this.unmountNodes = nodes.unmountNodes;
32
24
  }
@@ -1,11 +1,9 @@
1
1
  import reactIntegration from './integrations/react';
2
- import reactRouterIntegration from './integrations/react-router';
3
2
 
4
3
  class IntegrationsManager {
5
4
  constructor() {
6
5
  this.integrations = {
7
6
  'react-component': reactIntegration.integrationWrapper,
8
- 'react-router': reactRouterIntegration.integrationWrapper,
9
7
  };
10
8
  }
11
9
 
data/js/src/nodes.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import IntegrationsManager from './integrations-manager';
2
2
 
3
- const ELEMENT_ATTR = 'data-react-element';
3
+ const ELEMENT_ATTR = 'data-rwr-element';
4
4
  const PAYLOAD_ATTR = 'data-payload';
5
5
  const INTEGRATION_NAME_ATTR = 'data-integration-name';
6
6
  const OPTIONS_ATTR = 'data-options';
data/js/src/version.js CHANGED
@@ -1 +1 @@
1
- export default '0.4.1';
1
+ export default '0.5.0';
@@ -1,6 +1,5 @@
1
1
  import expect from 'expect';
2
2
  import reactIntegration from '../src/integrations/react';
3
- import reactRouterIntegration from '../src/integrations/react-router';
4
3
  import subject from '../src/integrations-manager';
5
4
 
6
5
  describe('IntegrationsManager', function () {
@@ -9,10 +8,7 @@ describe('IntegrationsManager', function () {
9
8
  expect(subject.integrations['react-component']).toEqual(
10
9
  reactIntegration.integrationWrapper
11
10
  );
12
- expect(subject.integrations['react-router']).toEqual(
13
- reactRouterIntegration.integrationWrapper
14
- );
15
- expect(Object.keys(subject.integrations).length).toEqual(2);
11
+ expect(Object.keys(subject.integrations).length).toEqual(1);
16
12
  });
17
13
  });
18
14
 
@@ -56,12 +56,12 @@ describe('Nodes', function () {
56
56
  };
57
57
  });
58
58
 
59
- it('uses "data-react-element" as default selector', function () {
59
+ it('uses "data-rwr-element" as default selector', function () {
60
60
  const documentSpy = spyOn(document, 'querySelectorAll');
61
61
  mountNodes();
62
62
 
63
63
  expect(documentSpy.calls.length).toEqual(1);
64
- expect(documentSpy).toHaveBeenCalledWith('[data-react-element]');
64
+ expect(documentSpy).toHaveBeenCalledWith('[data-rwr-element]');
65
65
  });
66
66
 
67
67
  it('mounts nodes', function () {
@@ -99,12 +99,12 @@ describe('Nodes', function () {
99
99
  };
100
100
  });
101
101
 
102
- it('uses "data-react-element" as default selector', function () {
102
+ it('uses "data-rwr-element" as default selector', function () {
103
103
  const documentSpy = spyOn(document, 'querySelectorAll');
104
104
  unmountNodes();
105
105
 
106
106
  expect(documentSpy.calls.length).toEqual(1);
107
- expect(documentSpy).toHaveBeenCalledWith('[data-react-element]');
107
+ expect(documentSpy).toHaveBeenCalledWith('[data-rwr-element]');
108
108
  });
109
109
 
110
110
  it('unmounts nodes', function () {
@@ -3,51 +3,6 @@ var __RWR_ENV__ = {
3
3
  config: <%=JSON(Rails.application.config.react.shared)%>
4
4
  };
5
5
 
6
- function deprecatedError(helperName) {
7
- var lines = [
8
- helperName + ' was removed.',
9
- 'use RWR.' + helperName + ' instead.',
10
- 'check react_webpack_rails changelog for details.'
11
- ]
12
- console.error(lines.join("\n"));
13
- }
14
-
15
- function registerComponent() {
16
- deprecatedError('registerComponent');
17
- }
18
-
19
- function getComponent() {
20
- deprecatedError('getComponent');
21
- }
22
-
23
- function createComponent() {
24
- deprecatedError('createComponent');
25
- }
26
-
27
- function renderComponent() {
28
- deprecatedError('renderComponent');
29
- }
30
-
31
- function unmountComponent() {
32
- deprecatedError('unmountComponent');
33
- }
34
-
35
- function renderRouter() {
36
- deprecatedError('renderRouter');
37
- }
38
-
39
- function registerRouter() {
40
- deprecatedError('registerRouter');
41
- }
42
-
43
- function unmountRouter() {
44
- deprecatedError('unmountRouter');
45
- }
46
-
47
- function getRouter() {
48
- deprecatedError('getRouter');
49
- }
50
-
51
6
  var RWRhandlers = {
52
7
  _mountNodes: function _mountNodes() {
53
8
  RWR.mountNodes();
@@ -63,14 +18,21 @@ var RWRhandlers = {
63
18
 
64
19
  handleTurbolinksEvents: function handleTurbolinksEvents() {
65
20
  var unmountEvent;
21
+ var mountEvent;
66
22
 
67
23
  if (Turbolinks.EVENTS) {
24
+ mountEvent = Turbolinks.EVENTS.CHANGE;
68
25
  unmountEvent = Turbolinks.EVENTS.BEFORE_UNLOAD;
69
- } else {
26
+ } else if (typeof Turbolinks.controller !== "undefined") {
27
+ mountEvent = 'turbolinks:load';
28
+ unmountEvent = 'turbolinks:before-cache';
29
+ }
30
+ else {
31
+ mountEvent = 'page:change';
70
32
  unmountEvent = 'page:receive';
71
33
  Turbolinks.pagesCached(0);
72
34
  }
73
- RWRhandlers._handleEvent('page:change', RWRhandlers._mountNodes);
35
+ RWRhandlers._handleEvent(mountEvent, RWRhandlers._mountNodes);
74
36
  RWRhandlers._handleEvent(unmountEvent, RWRhandlers._unmountNodes);
75
37
  },
76
38
 
@@ -20,6 +20,7 @@ module ReactWebpackRails
20
20
  def forever
21
21
  copy_file 'forever/development.json', 'forever/development.json'
22
22
  copy_file 'forever/production.json', 'forever/production.json'
23
+ create_file 'app/react/.foreverignore'
23
24
  end
24
25
 
25
26
  def node_server
@@ -19,10 +19,6 @@ module ReactWebpackRails
19
19
  type: :boolean,
20
20
  default: true,
21
21
  desc: 'Run karma_setup generator'
22
- class_option :react_router,
23
- type: :boolean,
24
- default: false,
25
- desc: 'Run react_router generator'
26
22
  class_option :redux,
27
23
  type: :boolean,
28
24
  default: false,
@@ -54,12 +50,6 @@ module ReactWebpackRails
54
50
  generate example_generator
55
51
  end
56
52
 
57
- def generate_react_router
58
- return unless options.react_router
59
- deprecation_warning
60
- generate 'react_webpack_rails:install:react_router --tmp_package'
61
- end
62
-
63
53
  def generate_redux
64
54
  return unless options.redux
65
55
  generate 'react_webpack_rails:install:redux --tmp_package'
@@ -1,8 +1,9 @@
1
1
  {
2
- "uid": "rwr-node-server",
3
- "append": true,
4
- "script": "node_server.js",
5
- "sourceDir": "./app/react",
6
- "watch": true,
7
- "watchDirectory": "./app/react"
2
+ "uid": "rwr-node-server",
3
+ "append": true,
4
+ "script": "node_server.js",
5
+ "workingDir": "./",
6
+ "sourceDir": "app/react",
7
+ "watch": true,
8
+ "watchDirectory": "app/react"
8
9
  }
@@ -1,6 +1,7 @@
1
1
  {
2
- "uid": "rwr-node-server",
3
- "append": true,
4
- "script": "node_server.js",
5
- "sourceDir": "./app/react"
2
+ "uid": "rwr-node-server",
3
+ "append": true,
4
+ "script": "node_server.js",
5
+ "workingDir": "./",
6
+ "sourceDir": "app/react",
6
7
  }
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "private": true,
3
3
  "devDependencies": {
4
- "babel-eslint": "^5.0.0-beta6",
5
- "eslint": "^1.7.3",
6
- "eslint-plugin-react": "^3.6.3",
7
- "webpack-notifier": "^1.2.1"
4
+ "babel-eslint": "^6.1.0",
5
+ "eslint": "^2.13.0",
6
+ "eslint-plugin-react": "^5.2.0",
7
+ "webpack-notifier": "^1.3.0"
8
8
  },
9
9
  "dependencies": {
10
- "babel-core": "^6.4.0",
11
- "babel-loader": "^6.2.1",
12
- "babel-preset-es2015": "^6.3.13",
13
- "babel-preset-react": "^6.3.13",
14
- "babel-preset-stage-1": "^6.3.13",
15
- "css-loader": "^0.23.1",
16
- "extract-text-webpack-plugin": "^0.8.2",
17
- "node-sass": "^3.3.3",
18
- "react": "^15.0.1",
19
- "react-addons-test-utils": "^15.0.1",
20
- "react-dom": "^15.0.1",
21
- "react-webpack-rails": "^0.4.0",
22
- "sass-loader": "^3.0.0",
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
23
  "style-loader": "^0.13.1",
24
- "webpack": "^1.12.1"
24
+ "webpack": "^1.13.0"
25
25
  },
26
26
  "scripts": {
27
27
  "start": "webpack -w --config webpack/dev.config.js",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "devDependencies": {
3
3
  "react-hot-loader": "^1.3.0",
4
- "webpack-dev-server": "^1.12.1"
4
+ "webpack-dev-server": "^1.14.0"
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
- "expect": "^1.12.2",
4
- "karma": "^0.13.13",
5
- "karma-chrome-launcher": "^0.2.1",
6
- "karma-mocha": "^0.2.0",
7
- "karma-sinon": "^1.0.4",
8
- "karma-sourcemap-loader": "^0.3.6",
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",
8
+ "karma-sourcemap-loader": "^0.3.7",
9
9
  "karma-webpack": "^1.7.0",
10
- "mocha": "^2.3.4",
11
- "sinon": "^1.17.2"
10
+ "mocha": "^2.5.0",
11
+ "sinon": "^1.17.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.4",
4
- "redux": "^3.4.0",
5
- "rwr-redux": "^0.2.0"
3
+ "react-redux": "^4.4.0",
4
+ "redux": "^3.5.0",
5
+ "rwr-redux": "^0.4.0"
6
6
  }
7
7
  }
@@ -2,7 +2,7 @@
2
2
  "dependencies": {
3
3
  "forever": "^0.15.0",
4
4
  "http": "*",
5
- "httpdispatcher": "^0.4.0"
5
+ "httpdispatcher": "^1.0.0"
6
6
  },
7
7
  "scripts": {
8
8
  "rwr-node-dev-server": "forever forever/development.json",
@@ -1,3 +1,3 @@
1
1
  module ReactWebpackRails
2
- VERSION = '0.4.1'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -2,33 +2,40 @@ require_relative 'services/camelize_keys'
2
2
 
3
3
  module ReactWebpackRails
4
4
  module ViewHelpers
5
- def react_element(integration_name, payload = {}, html_options = {}, &block)
5
+ def rwr_element(integration_name, payload = {}, html_options = {}, &block)
6
6
  data = {
7
7
  integration_name: integration_name,
8
8
  payload: payload,
9
- react_element: true
9
+ rwr_element: true
10
10
  }
11
11
  html_options = html_options.merge(data: data)
12
12
  html_tag = html_options.delete(:tag) || :div
13
13
  content_tag(html_tag, '', html_options, &block)
14
14
  end
15
15
 
16
+ def react_element(integration_name, payload = {}, html_options = {}, &block)
17
+ message = 'since v0.5.0: react_element is depricated. Use rwr_element instead'
18
+ ActiveSupport::Deprecation.warn message
19
+
20
+ rwr_element(integration_name, payload, html_options, &block)
21
+ end
22
+
16
23
  def react_component(name, raw_props = {}, options = {})
17
24
  props = raw_props.as_json
18
25
  props = Services::CamelizeKeys.call(props) if Rails.application.config.react.camelize_props
19
26
  if server_side(options.delete(:server_side))
20
27
  result = NodeIntegrationRunner.new('react-component', props: props, name: name).run
21
- react_element('react-component', { props: props, name: name }, options) do
28
+ rwr_element('react-component', { props: props, name: name }, options) do
22
29
  result.html_safe
23
30
  end
24
31
  else
25
- react_element('react-component', { props: props, name: name }, options)
32
+ rwr_element('react-component', { props: props, name: name }, options)
26
33
  end
27
34
  end
28
35
 
29
36
  def react_router(name)
30
37
  deprecation_warning
31
- react_element('react-router', name: name)
38
+ rwr_element('react-router', name: name)
32
39
  end
33
40
 
34
41
  private
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-webpack-rails",
3
- "version": "0.4.1",
3
+ "version": "0.5.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": [
@@ -37,15 +37,15 @@
37
37
  "react-dom": "^15.0.1"
38
38
  },
39
39
  "devDependencies": {
40
- "babel-cli": "^6.4.0",
41
- "babel-core": "^6.4.0",
42
- "babel-preset-es2015": "^6.3.0",
43
- "babel-preset-react": "^6.3.0",
44
- "eslint": "^1.10.3",
45
- "eslint-config-airbnb": "^3.1.0",
46
- "eslint-plugin-react": "^3.15.0",
47
- "expect": "^1.13.4",
48
- "history": "^1.17.0",
49
- "mocha": "^2.3.4"
40
+ "babel-cli": "^6.10.0",
41
+ "babel-core": "^6.10.0",
42
+ "babel-preset-es2015": "^6.9.0",
43
+ "babel-preset-react": "^6.11.0",
44
+ "eslint": "^2.13.0",
45
+ "eslint-config-airbnb": "^9.0.0",
46
+ "eslint-plugin-react": "^5.2.0",
47
+ "expect": "^1.20.0",
48
+ "history": "^3.0.0",
49
+ "mocha": "^2.5.0"
50
50
  }
51
51
  }
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.4.1
4
+ version: 0.5.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-04-23 00:00:00.000000000 Z
12
+ date: 2016-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -97,13 +97,11 @@ files:
97
97
  - js/src/env.js
98
98
  - js/src/index.js
99
99
  - js/src/integrations-manager.js
100
- - js/src/integrations/react-router.js
101
100
  - js/src/integrations/react.js
102
101
  - js/src/nodes.js
103
102
  - js/src/version.js
104
103
  - js/test/env.spec.js
105
104
  - js/test/integrations-manager.spec.js
106
- - js/test/integrations/react-router.spec.js
107
105
  - js/test/integrations/react.spec.js
108
106
  - js/test/nodes.spec.js
109
107
  - lib/assets/javascripts/react_integration.js.erb
@@ -111,7 +109,6 @@ files:
111
109
  - lib/generators/react_webpack_rails/install/example_generator.rb
112
110
  - lib/generators/react_webpack_rails/install/hot_reload_generator.rb
113
111
  - lib/generators/react_webpack_rails/install/karma_setup_generator.rb
114
- - lib/generators/react_webpack_rails/install/react_router_generator.rb
115
112
  - lib/generators/react_webpack_rails/install/redux_generator.rb
116
113
  - lib/generators/react_webpack_rails/install/server_side_generator.rb
117
114
  - lib/generators/react_webpack_rails/install_generator.rb
@@ -127,7 +124,6 @@ files:
127
124
  - lib/generators/react_webpack_rails/templates/packages/core.json
128
125
  - lib/generators/react_webpack_rails/templates/packages/hot-reload.json
129
126
  - lib/generators/react_webpack_rails/templates/packages/js-specs.json
130
- - lib/generators/react_webpack_rails/templates/packages/react-router.json
131
127
  - lib/generators/react_webpack_rails/templates/packages/redux.json
132
128
  - lib/generators/react_webpack_rails/templates/packages/server-side.json
133
129
  - lib/generators/react_webpack_rails/templates/partial/_react_hot_assets.html.erb
@@ -1,60 +0,0 @@
1
- import ReactDOM from 'react-dom';
2
-
3
- function deprecationWarning() {
4
- if (typeof console !== 'undefined' && console.warn) {
5
- const msg = [
6
- 'Deprecation warning - since v0.3.0: current integration with react-router was extracted and moved to external plugin.',
7
- 'Use https://github.com/netguru/rwr-react_router instead.',
8
- ];
9
-
10
- console.warn(msg.join('\n'));
11
- }
12
- }
13
-
14
- class ReactRouterIntegration {
15
- constructor() {
16
- this.routers = {};
17
- this.enabled = false;
18
- this.registerRouter = this.registerRouter.bind(this);
19
- this.getRouter = this.getRouter.bind(this);
20
- this.renderRouter = this.renderRouter.bind(this);
21
- }
22
-
23
- registerRouter(name, route) {
24
- deprecationWarning();
25
- this.routers[name] = route;
26
- }
27
-
28
- getRouter(name) {
29
- return this.routers[name];
30
- }
31
-
32
- renderRouter(name, node) {
33
- if (this.enabled === true) {
34
- throw new Error(
35
- `Error when rendering ${name}\n\trenderRouter: can't render more than one router.`
36
- );
37
- }
38
- this.enabled = true;
39
- ReactDOM.render(this.getRouter(name), node);
40
- }
41
-
42
- unmountRouter(node) {
43
- ReactDOM.unmountComponentAtNode(node);
44
- this.enabled = false;
45
- }
46
-
47
- get integrationWrapper() {
48
- return {
49
- mount: function _mount(node, payload) {
50
- this.renderRouter(payload.name, node);
51
- }.bind(this),
52
-
53
- unmount: function _unmount(node) {
54
- this.unmountRouter(node);
55
- }.bind(this),
56
- };
57
- }
58
- }
59
-
60
- export default new ReactRouterIntegration;
@@ -1,133 +0,0 @@
1
- import expect, { spyOn } from 'expect';
2
- import ReactDOM from 'react-dom';
3
- import subject from '../../src/integrations/react-router';
4
-
5
- const HelloRouter = {};
6
-
7
- describe('ReactIntegration', function () {
8
- afterEach(function () {
9
- subject.routers = {};
10
- subject.enabled = false;
11
- });
12
-
13
- describe('.constructor', function () {
14
- it('intializes empty components dictionary', function () {
15
- expect(subject.routers).toEqual({});
16
- });
17
-
18
- it('by default sets router presence flag to false', function () {
19
- expect(subject.enabled).toBe(false);
20
- });
21
- });
22
-
23
- describe('#registerRouter', function () {
24
- it('adds router to the routers storage', function () {
25
- subject.registerRouter('HelloRouter', HelloRouter);
26
- expect(subject.routers.HelloRouter).toBe(HelloRouter);
27
- });
28
- });
29
-
30
- describe('#getRouter', function () {
31
- it('returns route by name', function () {
32
- subject.registerRouter('HelloRouter', HelloRouter);
33
- expect(subject.getRouter('HelloRouter')).toBe(HelloRouter);
34
- });
35
-
36
- it('returns undefined if route is not found', function () {
37
- expect(subject.getRouter('HelloRouter')).toBe(undefined);
38
- });
39
- });
40
-
41
- describe('#renderRouter', function () {
42
- beforeEach(function () {
43
- subject.registerRouter('HelloRouter', HelloRouter);
44
- });
45
-
46
- context('when router is present', function () {
47
- it('throws an error', function () {
48
- expect(function () {
49
- subject.renderRouter('HelloRouter', { node: 'someNode' });
50
- })
51
- .withContext(subject.enabled = true)
52
- .toThrow(/Error when rendering HelloRouter/);
53
- });
54
- });
55
-
56
- context('when router does not exist', function () {
57
- let ReactDOMSpy;
58
- const node = { nodeType: 1, nodeName: 'DIV' };
59
- beforeEach(function () {
60
- ReactDOMSpy = spyOn(ReactDOM, 'render');
61
- });
62
-
63
- afterEach(function () {
64
- expect.restoreSpies();
65
- });
66
-
67
- it('sets router presence flag to true', function () {
68
- subject.renderRouter('HelloRouter', node);
69
-
70
- expect(subject.enabled).toBe(true);
71
- });
72
-
73
- it('calls ReactDOM renderer once', function () {
74
- subject.renderRouter('HelloRouter', { nodeType: 1, nodeName: 'DIV' });
75
-
76
- expect(ReactDOMSpy.calls.length).toEqual(1);
77
- expect(ReactDOMSpy).toHaveBeenCalledWith(HelloRouter, { nodeType: 1, nodeName: 'DIV' });
78
- });
79
- });
80
- });
81
-
82
- describe('#unmountRouter', function () {
83
- let ReactDOMSpy;
84
- beforeEach(function () {
85
- ReactDOMSpy = spyOn(ReactDOM, 'unmountComponentAtNode');
86
- });
87
-
88
- afterEach(function () {
89
- expect.restoreSpies();
90
- });
91
-
92
- it('unmounts router component at specified node', function () {
93
- subject.unmountRouter({ node: 'someNode' });
94
-
95
- expect(ReactDOMSpy.calls.length).toEqual(1);
96
- expect(ReactDOMSpy).toHaveBeenCalledWith({ node: 'someNode' });
97
- });
98
-
99
- it('allows to add new router', function () {
100
- subject.unmountRouter({ node: 'someNode' });
101
- expect(subject.enabled).toBe(false);
102
- });
103
- });
104
-
105
- describe('#integrationWrapper', function () {
106
- const node = { nodeType: 1, nodeName: 'DIV' };
107
-
108
- describe('function mount', function () {
109
- it('calls renderComponent', function () {
110
- const mountSpy = spyOn(subject, 'renderRouter');
111
-
112
- const payload = { name: 'routerName' };
113
- subject.integrationWrapper.mount(node, payload);
114
-
115
- expect(mountSpy.calls.length).toEqual(1);
116
- expect(mountSpy).toHaveBeenCalledWith(
117
- 'routerName',
118
- { nodeType: 1, nodeName: 'DIV' }
119
- );
120
- });
121
- });
122
-
123
- describe('function unmount', function () {
124
- it('calls unmountComponent', function () {
125
- const unmountSpy = spyOn(subject, 'unmountRouter');
126
- subject.integrationWrapper.unmount(node);
127
-
128
- expect(unmountSpy.calls.length).toEqual(1);
129
- expect(unmountSpy).toHaveBeenCalledWith({ nodeType: 1, nodeName: 'DIV' });
130
- });
131
- });
132
- });
133
- });
@@ -1,21 +0,0 @@
1
- module ReactWebpackRails
2
- module Install
3
- require 'generators/react_webpack_rails/merge_helpers'
4
-
5
- class ReactRouterGenerator < Rails::Generators::Base
6
- include MergeHelpers
7
- desc 'Add react-router setup'
8
- source_root File.expand_path('../../templates', __FILE__)
9
-
10
- class_option :tmp_package,
11
- type: :boolean,
12
- default: false,
13
- desc: 'Force update tmp/package.json instead package.json'
14
-
15
- def package
16
- merge_options = options.tmp_package ? { package_file: 'tmp/package.json', force: true } : {}
17
- merge_into_package 'packages/react-router.json', merge_options
18
- end
19
- end
20
- end
21
- end
@@ -1,5 +0,0 @@
1
- {
2
- "dependencies": {
3
- "react-router": "^1.0.0"
4
- }
5
- }