react-rails 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcffb8326ddf9468f84991dc075b824339192aa6
4
- data.tar.gz: 732958fbaa2b917816cc4febcd340e4d439ac397
3
+ metadata.gz: f334d2c029d0618856f87380e5f383c41dd1de3d
4
+ data.tar.gz: a99014219803125228a7c01f7b4fce09beab20a7
5
5
  SHA512:
6
- metadata.gz: 03572f213be4ef8de3be2a513fe56b8fe825f456e704271a785e2f8f9afbe8c0f12670809e441b0da1d1968bce0676db5d993333879dd9b6b126c4f32cf67680
7
- data.tar.gz: 33c018c9e2dc905b5c3e505f75882344345e00ecfd8fb9a6aa4a8ee85468bd74a30fa44ca1b6a75105df06ae98c28c050f3b5c82d15d5aacd34a14b4c9c62640
6
+ metadata.gz: 179cef5ad9262a265d2c985a54c4f54e064b87aa7078382080fd18dab01dd243dc63257eefdc41d945d71f2ab5fd896fecfd07c55d03ce66c71a376e51ab438a
7
+ data.tar.gz: deb80234836320e2cf829ea0b1de79a22473598054d4356af10c0255a36b275e73f247a4d115ec484ec462809ba51f722507d423ca39971ed83abcb8f921bcc1
data/README.md CHANGED
@@ -34,7 +34,7 @@ rails g react:install
34
34
  ```
35
35
 
36
36
  This will:
37
- - create a `components.js` manifest file and a `app/assets/javascripts/components/` directory,
37
+ - create a `components.js` manifest file and a `app/assets/javascripts/components/` directory,
38
38
  where you will put your components
39
39
  - place the following in your `application.js`:
40
40
 
@@ -48,7 +48,7 @@ where you will put your components
48
48
 
49
49
  ### React.js builds
50
50
 
51
- You can pick which React.js build (development, production, with or without [add-ons]((http://facebook.github.io/react/docs/addons.html)))
51
+ You can pick which React.js build (development, production, with or without [add-ons]((http://facebook.github.io/react/docs/addons.html)))
52
52
  to serve in each environment by adding a config. Here are the defaults:
53
53
 
54
54
  ```ruby
@@ -71,10 +71,10 @@ MyApp::Application.configure do
71
71
  end
72
72
  ```
73
73
 
74
- After restarting your Rails server, `//= require react` will provide the build of React.js which
74
+ After restarting your Rails server, `//= require react` will provide the build of React.js which
75
75
  was specified by the configurations.
76
76
 
77
- `react-rails` offers a few other options for versions & builds of React.js.
77
+ `react-rails` offers a few other options for versions & builds of React.js.
78
78
  See [VERSIONS.md](https://github.com/reactjs/react-rails/blob/master/VERSIONS.md) for more info about
79
79
  using the `react-source` gem or dropping in your own copies of React.js.
80
80
 
@@ -121,7 +121,7 @@ config.react.jsx_transform_options = {
121
121
 
122
122
  ### Rendering & mounting
123
123
 
124
- `react-rails` includes a view helper (`react_component`) and an unobtrusive JavaScript driver (`react_ujs`)
124
+ `react-rails` includes a view helper (`react_component`) and an unobtrusive JavaScript driver (`react_ujs`)
125
125
  which work together to put React components on the page. You should require the UJS driver
126
126
  in your manifest after `react` (and after `turbolinks` if you use [Turbolinks](https://github.com/rails/turbolinks)).
127
127
 
@@ -133,7 +133,7 @@ The __view helper__ puts a `div` on the page with the requested component class
133
133
  <div data-react-class="HelloMessage" data-react-props="{&quot;name&quot;:&quot;John&quot;}"></div>
134
134
  ```
135
135
 
136
- On page load, the __`react_ujs` driver__ will scan the page and mount components using `data-react-class`
136
+ On page load, the __`react_ujs` driver__ will scan the page and mount components using `data-react-class`
137
137
  and `data-react-props`.
138
138
 
139
139
  If Turbolinks is present components are mounted on the `page:change` event, and unmounted on `page:before-unload`.
@@ -169,9 +169,9 @@ _(It will be also be mounted by the UJS on page load.)_
169
169
 
170
170
  There are some requirements for this to work:
171
171
 
172
- - `react-rails` must load your code. By convention it uses `components.js`, which was created
172
+ - `react-rails` must load your code. By convention it uses `components.js`, which was created
173
173
  by the install task. This file must include your components _and_ their dependencies (eg, Underscore.js).
174
- - Your components must be accessible in the global scope.
174
+ - Your components must be accessible in the global scope.
175
175
  If you are using `.js.jsx.coffee` files then the wrapper function needs to be taken into account:
176
176
 
177
177
  ```coffee
@@ -180,7 +180,7 @@ If you are using `.js.jsx.coffee` files then the wrapper function needs to be ta
180
180
  render: ->
181
181
  `<ExampleComponent videos={this.props.videos} />`
182
182
  ```
183
- - Your code can't reference `document`. Prerender processes don't have access to `document`,
183
+ - Your code can't reference `document`. Prerender processes don't have access to `document`,
184
184
  so jQuery and some other libs won't work in this environment :(
185
185
 
186
186
  You can configure your pool of JS virtual machines and specify where it should load code:
@@ -222,10 +222,10 @@ By default, your current layout will be used and the component, rather than a vi
222
222
 
223
223
  ### Component generator
224
224
 
225
- `react-rails` ships with a Rails generator to help you get started with a simple component scaffold.
226
- You can run it using `rails generate react:component ComponentName (--es6)`.
227
- The generator takes an optional list of arguments for default propTypes,
228
- which follow the conventions set in the [Reusable Components](http://facebook.github.io/react/docs/reusable-components.html)
225
+ `react-rails` ships with a Rails generator to help you get started with a simple component scaffold.
226
+ You can run it using `rails generate react:component ComponentName (--es6)`.
227
+ The generator takes an optional list of arguments for default propTypes,
228
+ which follow the conventions set in the [Reusable Components](http://facebook.github.io/react/docs/reusable-components.html)
229
229
  section of the React documentation.
230
230
 
231
231
  For example:
@@ -294,7 +294,7 @@ Note that the arguments for `oneOf` and `oneOfType` must be enclosed in single q
294
294
 
295
295
  ### Jbuilder & react-rails
296
296
 
297
- If you use Jbuilder to pass a JSON string to `react_component`, make sure your JSON is a stringified hash,
297
+ If you use Jbuilder to pass a JSON string to `react_component`, make sure your JSON is a stringified hash,
298
298
  not an array. This is not the Rails default -- you should add the root node yourself. For example:
299
299
 
300
300
  ```ruby
@@ -313,7 +313,7 @@ end
313
313
 
314
314
  ## CoffeeScript
315
315
 
316
- It is possible to use JSX with CoffeeScript. To use CoffeeScript, create files with an extension `.js.jsx.coffee`.
316
+ It is possible to use JSX with CoffeeScript. To use CoffeeScript, create files with an extension `.js.jsx.coffee`.
317
317
  We also need to embed JSX code inside backticks so that CoffeeScript ignores the syntax it doesn't understand.
318
318
  Here's an example:
319
319
 
@@ -348,8 +348,8 @@ Any subclass of `ExecJSRenderer` may use those hooks (for example, `SprocketsRen
348
348
  `react-rails` uses a "helper implementation" class to generate the output of the `react_component` helper. The helper is initialized once per request and used for each `react_component` call during that request. You can provide a custom helper class to `config.react.view_helper_implementation`. The class must implement:
349
349
 
350
350
  - `#react_component(name, props = {}, options = {}, &block)` to return a string to inject into the Rails view
351
- - `#setup(rack_env)`, called when the helper is initialized at the start of the request
352
- - `#teardown(rack_env)`, called at the end of the request
351
+ - `#setup(controller_instance)`, called when the helper is initialized at the start of the request
352
+ - `#teardown(controller_instance)`, called at the end of the request
353
353
 
354
354
  `react-rails` provides one implementation, `React::Rails::ComponentMount`.
355
355
 
@@ -1,7 +1,7 @@
1
1
  require 'react/rails/asset_variant'
2
2
  require 'react/rails/engine'
3
3
  require 'react/rails/railtie'
4
- require 'react/rails/render_middleware'
4
+ require 'react/rails/controller_lifecycle'
5
5
  require 'react/rails/version'
6
6
  require 'react/rails/component_mount'
7
7
  require 'react/rails/view_helper'
@@ -10,7 +10,7 @@ module React
10
10
  include ActionView::Helpers::TextHelper
11
11
  attr_accessor :output_buffer
12
12
 
13
- # RenderMiddleware calls these hooks
13
+ # ControllerLifecycle calls these hooks
14
14
  # You can use them in custom helper implementations
15
15
  def setup(env)
16
16
  end
@@ -0,0 +1,24 @@
1
+ module React
2
+ module Rails
3
+ module ControllerLifecycle
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # use old names to support Rails 3
8
+ before_filter :setup_react_component_helper
9
+ after_filter :teardown_react_component_helper
10
+ attr_reader :__react_component_helper
11
+ end
12
+
13
+ def setup_react_component_helper
14
+ new_helper = React::Rails::ViewHelper.helper_implementation_class.new
15
+ new_helper.setup(self)
16
+ @__react_component_helper = new_helper
17
+ end
18
+
19
+ def teardown_react_component_helper
20
+ @__react_component_helper.teardown(self)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -5,9 +5,9 @@ class React::Rails::ControllerRenderer
5
5
 
6
6
  attr_accessor :output_buffer
7
7
 
8
- attr_reader :request
9
8
  def initialize(options={})
10
- @request = options[:request]
9
+ controller = options[:controller]
10
+ @__react_component_helper = controller.__react_component_helper
11
11
  end
12
12
 
13
13
  def call(name, options, &block)
@@ -24,13 +24,18 @@ module React
24
24
 
25
25
  # Include the react-rails view helper lazily
26
26
  initializer "react_rails.setup_view_helpers", group: :all do |app|
27
- app.config.middleware.use(::React::Rails::RenderMiddleware)
27
+
28
28
  app.config.react.jsx_transformer_class ||= React::JSX::DEFAULT_TRANSFORMER
29
29
  React::JSX.transformer_class = app.config.react.jsx_transformer_class
30
30
  React::JSX.transform_options = app.config.react.jsx_transform_options
31
31
 
32
32
  app.config.react.view_helper_implementation ||= React::Rails::ComponentMount
33
33
  React::Rails::ViewHelper.helper_implementation_class = app.config.react.view_helper_implementation
34
+
35
+ ActiveSupport.on_load(:action_controller) do
36
+ include ::React::Rails::ControllerLifecycle
37
+ end
38
+
34
39
  ActiveSupport.on_load(:action_view) do
35
40
  include ::React::Rails::ViewHelper
36
41
  end
@@ -38,7 +43,7 @@ module React
38
43
 
39
44
  initializer "react_rails.add_component_renderer", group: :all do |app|
40
45
  ActionController::Renderers.add :component do |component_name, options|
41
- renderer = ::React::Rails::ControllerRenderer.new(request: request)
46
+ renderer = ::React::Rails::ControllerRenderer.new(controller: self)
42
47
  html = renderer.call(component_name, options)
43
48
  render_options = options.merge(inline: html)
44
49
  render(render_options)
@@ -1,6 +1,6 @@
1
1
  module React
2
2
  module Rails
3
3
  # If you change this, make sure to update VERSIONS.md
4
- VERSION = '1.3.0'
4
+ VERSION = '1.3.1'
5
5
  end
6
6
  end
@@ -3,15 +3,14 @@ module React
3
3
  module ViewHelper
4
4
  # This class will be used for inserting tags into HTML.
5
5
  # It should implement:
6
- # - #setup(env)
7
- # - #teardown(env)
6
+ # - #setup(controller_instance)
7
+ # - #teardown(controller_instance)
8
8
  # - #react_component(name, props, options &block)
9
9
  # The default is {React::Rails::ComponentMount}
10
10
  mattr_accessor :helper_implementation_class
11
11
 
12
12
  def react_component(*args, &block)
13
- impl_key = React::Rails::RenderMiddleware::HELPER_IMPLEMENTATION_KEY
14
- helper_obj = request.env[impl_key]
13
+ helper_obj = @__react_component_helper
15
14
  helper_obj.react_component(*args, &block)
16
15
  end
17
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul O’Shannessy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal
@@ -271,10 +271,10 @@ files:
271
271
  - lib/react/jsx.rb
272
272
  - lib/react/rails/asset_variant.rb
273
273
  - lib/react/rails/component_mount.rb
274
+ - lib/react/rails/controller_lifecycle.rb
274
275
  - lib/react/rails/controller_renderer.rb
275
276
  - lib/react/rails/engine.rb
276
277
  - lib/react/rails/railtie.rb
277
- - lib/react/rails/render_middleware.rb
278
278
  - lib/react/rails/version.rb
279
279
  - lib/react/rails/view_helper.rb
280
280
  - lib/react/rails.rb
@@ -1,19 +0,0 @@
1
- module React
2
- module Rails
3
- class RenderMiddleware
4
- HELPER_IMPLEMENTATION_KEY = "react_rails.view_helper_implementation"
5
- def initialize(app)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- new_helper = React::Rails::ViewHelper.helper_implementation_class.new
11
- new_helper.setup(env)
12
- env[HELPER_IMPLEMENTATION_KEY] = new_helper
13
- response = @app.call(env)
14
- new_helper.teardown(env)
15
- response
16
- end
17
- end
18
- end
19
- end