react_on_rails 10.0.2 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
 - data/.rubocop.yml +1 -1
 - data/CHANGELOG.md +13 -3
 - data/Dockerfile_tests +12 -0
 - data/Gemfile +1 -1
 - data/PROJECTS.md +2 -1
 - data/README.md +72 -10
 - data/app/helpers/react_on_rails_helper.rb +4 -7
 - data/docker-compose.yml +11 -0
 - data/docs/additional-reading/caching-and-performance.md +31 -0
 - data/docs/api/ruby-api.md +7 -2
 - data/docs/tutorial.md +7 -11
 - data/lib/generators/react_on_rails/base_generator.rb +4 -0
 - data/lib/generators/react_on_rails/react_with_redux_generator.rb +1 -1
 - data/lib/generators/react_on_rails/templates/base/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +1 -1
 - data/lib/react_on_rails/assets_precompile.rb +3 -3
 - data/lib/react_on_rails/configuration.rb +2 -5
 - data/lib/react_on_rails/prerender_error.rb +1 -1
 - data/lib/react_on_rails/server_rendering_pool.rb +1 -0
 - data/lib/react_on_rails/server_rendering_pool/exec.rb +2 -2
 - data/lib/react_on_rails/server_rendering_pool/node.rb +1 -3
 - data/lib/react_on_rails/utils.rb +29 -5
 - data/lib/react_on_rails/version.rb +1 -1
 - data/package.json +1 -1
 - data/rakelib/dummy_apps.rake +2 -1
 - data/rakelib/examples.rake +2 -1
 - data/rakelib/lint.rake +3 -2
 - data/rakelib/node_package.rake +2 -1
 - data/rakelib/release.rake +7 -3
 - data/rakelib/run_rspec.rake +3 -4
 - data/react_on_rails.gemspec +2 -1
 - metadata +7 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9cca491248aecfc5e1611843368b67c30116e92228eebd638ae6d0a9ecc26c79
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 54aed2d1114c1cd25ad4fc7efeaf1adce4f352d38e79f07a85594b359383ee0c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ec6eeca7c1606a9deb34daa5675aaf8df3756df75eaa8585d6667e2fd5ef56b546ce6fa2806f532dfad47823a4d681ad83c3767cf8a66e874e80ebbb5bb28cb2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 9133bfcc208013634808483c32805965caf1ca3ee2980d378f1070db60865aefdcf2b99ef09a9aae2797fb388769f3693e6c315eccc1d7d4039aa97a8ff79a6f
         
     | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -8,6 +8,15 @@ Changes since last non-beta release. 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            *Please add entries here for your pull requests that are not yet released.*
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            ### [10.1.0] - 2018-01-23
         
     | 
| 
      
 12 
     | 
    
         
            +
            #### Added
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Added 2 cache helpers: ReactOnRails::Utils.bundle_file_name(bundle_name) and ReactOnRails::Utils.server_bundle_file_name
         
     | 
| 
      
 14 
     | 
    
         
            +
            for easy access to the hashed filenames for use in cache keys by [justin808](https://github.com/justin808).
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            #### Fixed
         
     | 
| 
      
 17 
     | 
    
         
            +
            - Use redux component in generated redux Hello World example: [PR 1006](https://github.com/shakacode/react_on_rails/pull/1006) by [lewaabahmad](https://github.com/lewaabahmad).
         
     | 
| 
      
 18 
     | 
    
         
            +
            - Fixed `Utils.bundle_js_file_path` generating the incorrect path for `manifest.json` in webpacker projects: [Issue #1011](https://github.com/shakacode/react_on_rails/issues/1011) by [elstgav](https://github.com/elstgav)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       11 
20 
     | 
    
         
             
            ### [10.0.2] - 2017-11-10
         
     | 
| 
       12 
21 
     | 
    
         
             
            #### Fixed
         
     | 
| 
       13 
22 
     | 
    
         
             
            - Remove unnecessary dependencies from released NPM package: [PR 968](https://github.com/shakacode/react_on_rails/pull/968) by [tricknotes](https://github.com/tricknotes).
         
     | 
| 
         @@ -46,7 +55,7 @@ Updated React on Rails to depend on [rails/webpacker](https://github.com/rails/w 
     | 
|
| 
       46 
55 
     | 
    
         | 
| 
       47 
56 
     | 
    
         | 
| 
       48 
57 
     | 
    
         
             
            #### 9.0 from 8.x. Upgrade Instructions
         
     | 
| 
       49 
     | 
    
         
            -
            Moved to [our  
     | 
| 
      
 58 
     | 
    
         
            +
            Moved to [our documentation](docs/basics/upgrading-react-on-rails.md#upgrading-to-version-9).
         
     | 
| 
       50 
59 
     | 
    
         | 
| 
       51 
60 
     | 
    
         
             
            ### [8.0.7] - 2017-08-16
         
     | 
| 
       52 
61 
     | 
    
         
             
            #### Fixed
         
     | 
| 
         @@ -670,8 +679,9 @@ Best done with Object destructing: 
     | 
|
| 
       670 
679 
     | 
    
         
             
            ##### Fixed
         
     | 
| 
       671 
680 
     | 
    
         
             
            - Fix several generator related issues.
         
     | 
| 
       672 
681 
     | 
    
         | 
| 
       673 
     | 
    
         
            -
            [Unreleased]: https://github.com/shakacode/react_on_rails/compare/10.0 
     | 
| 
       674 
     | 
    
         
            -
            [10.0 
     | 
| 
      
 682 
     | 
    
         
            +
            [Unreleased]: https://github.com/shakacode/react_on_rails/compare/10.1.0...master
         
     | 
| 
      
 683 
     | 
    
         
            +
            [10.1.0]: https://github.com/shakacode/react_on_rails/compare/10.0.2...10.1.0
         
     | 
| 
      
 684 
     | 
    
         
            +
            [10.0.2]: https://github.com/shakacode/react_on_rails/compare/10.0.1...10.0.2
         
     | 
| 
       675 
685 
     | 
    
         
             
            [10.0.1]: https://github.com/shakacode/react_on_rails/compare/10.0.0...10.0.1
         
     | 
| 
       676 
686 
     | 
    
         
             
            [10.0.0]: https://github.com/shakacode/react_on_rails/compare/9.0.3...10.0.0
         
     | 
| 
       677 
687 
     | 
    
         
             
            [9.0.3]: https://github.com/shakacode/react_on_rails/compare/9.0.2...9.0.3
         
     | 
    
        data/Dockerfile_tests
    ADDED
    
    | 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            FROM dylangrafmyre/docker-ci
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            WORKDIR /app/
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            COPY ["/lib/react_on_rails/version.rb", "/app/lib/react_on_rails/"]
         
     | 
| 
      
 6 
     | 
    
         
            +
            COPY ["Gemfile", "Gemfile.lock", "react_on_rails.gemspec", "rakelib/", "/app/"]
         
     | 
| 
      
 7 
     | 
    
         
            +
            COPY ["/spec/dummy/Gemfile", "/spec/dummy/Gemfile.lock", "/app/spec/dummy/"]
         
     | 
| 
      
 8 
     | 
    
         
            +
            RUN  bundle install --gemfile=spec/dummy/Gemfile
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ENV DISPLAY :99
         
     | 
| 
      
 11 
     | 
    
         
            +
            ENTRYPOINT service xvfd start \
         
     | 
| 
      
 12 
     | 
    
         
            +
                       && rake
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/PROJECTS.md
    CHANGED
    
    | 
         @@ -5,9 +5,10 @@ 
     | 
|
| 
       5 
5 
     | 
    
         
             
            ## Commercial Products Live
         
     | 
| 
       6 
6 
     | 
    
         
             
            * **[Friends and Guests](https://www.friendsandguests.com/)**, the signature product of [ShakaCode](http://www.shakacode.com), which is a "Network Connecting Hosts and Guests".
         
     | 
| 
       7 
7 
     | 
    
         
             
            * **[KissKissBankBank](https://www.kisskissbankbank.com/)**, large French crowdfunding platform.
         
     | 
| 
       8 
     | 
    
         
            -
            * **[ 
     | 
| 
      
 8 
     | 
    
         
            +
            * **[HVMN](https://hvmn.com)**: Web ecommerce site for "biohacking" products.
         
     | 
| 
       9 
9 
     | 
    
         
             
            * **[GuavaPass](https://guavapass.com/)**: Coaching client of [ShakaCode](http://www.shakacode.com) and React on Rails fan!
         
     | 
| 
       10 
10 
     | 
    
         
             
            * **[Pivotal Tracker](http://www.pivotaltracker.com/)**: The first (and most-loved) agile project management tool built on Rails.  React on Rails has greatly simplified integration and workflow for our React components in Rails!
         
     | 
| 
      
 11 
     | 
    
         
            +
            * **[Estately](https://www.estately.com)**: Home search.
         
     | 
| 
       11 
12 
     | 
    
         
             
            * **[Blink Inc](https://www.blinkinc.com)**: Website and more built by [ShakaCode](http://www.shakacode.com).
         
     | 
| 
       12 
13 
     | 
    
         
             
            * **[Madrone Analytics](http://madroneco.com/)**: The original client of [ShakaCode](http://www.shakacode.com) that led to the development of React on Rails, as described in [Fast Rich Client Rails Development With Webpack and the ES6 Transpiler](http://www.railsonmaui.com/blog/2014/10/03/integrating-webpack-and-the-es6-transpiler-into-an-existing-rails-project/).
         
     | 
| 
       13 
14 
     | 
    
         
             
            * **[Deliveroo](https://deliveroo.co.uk/)**: The leading food delivery site in Europe has gone live with React on Rails, with multi-lingual JavaScript support!
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            *If this projects helps you, please give us a star!*
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            [ShakaCode  
     | 
| 
      
 5 
     | 
    
         
            +
            [The ShakaCode team has availability to help your project](http://www.shakacode.com/work). If your team might need my help, please [email me](mailto:justin@shakacode.com) for a free half-hour project consultation, on anything from React on Rails to any aspect of web or mobile application development for both consumer and enterprise products.
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            # React on Rails v10 is based on Webpacker 3.0!
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -23,14 +23,14 @@ Given that Webpacker already provides React integration, why would you add React 
     | 
|
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            ----
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
            ## Steps to a New App with rails/webpacker v3 plus React on Rails 
     | 
| 
      
 26 
     | 
    
         
            +
            ## Steps to a New App with rails/webpacker v3 plus latest React on Rails:
         
     | 
| 
       27 
27 
     | 
    
         
             
            First be sure to run `rails -v` and check that you are using Rails 5.1.3 or above. If you are using an older version of Rails, you'll need to install webpacker with React per the instructions [here](https://github.com/rails/webpacker).
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            ### Basic installation for a new Rails App
         
     | 
| 
       30 
30 
     | 
    
         
             
            *See below for steps on an existing Rails app*
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
            1. New Rails app: `rails new my-app --webpack=react`. `cd` into the directory.
         
     | 
| 
       33 
     | 
    
         
            -
            2. Add gem version: `gem 'react_on_rails', ' 
     | 
| 
      
 33 
     | 
    
         
            +
            2. Add gem version: `gem 'react_on_rails', '10.0.2' # prefer exact gem version to match npm version`
         
     | 
| 
       34 
34 
     | 
    
         
             
            3. Run the generator: `rails generate react_on_rails:install`
         
     | 
| 
       35 
35 
     | 
    
         
             
            4. Start the app: `rails s`
         
     | 
| 
       36 
36 
     | 
    
         
             
            5. Visit http://localhost:3000/hello_world
         
     | 
| 
         @@ -59,7 +59,7 @@ Thank you for considering using [React on Rails](https://github.com/shakacode/re 
     | 
|
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
            We at [ShakaCode](http://www.shakacode.com) are a small, boutique, remote-first application development company. We fund this project by:
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            * Providing priority support and training for anything related to React + Webpack + Rails in our [ 
     | 
| 
      
 62 
     | 
    
         
            +
            * Providing priority support and training for anything related to React + Webpack + Rails in our [Pro Support program](http://www.shakacode.com/work/shakacode-pro-support.pdf).
         
     | 
| 
       63 
63 
     | 
    
         
             
            * Building custom web and mobile (React Native) applications. We typically work with a technical founder or CTO and instantly provide a full development team including designers.
         
     | 
| 
       64 
64 
     | 
    
         
             
            * Migrating **Angular** + Rails to React + Rails. You can see an example of React on Rails and our work converting Angular to React on Rails at [egghead.io](https://egghead.io/browse/frameworks).
         
     | 
| 
       65 
65 
     | 
    
         
             
            * Augmenting your team to get your product completed more efficiently and quickly.
         
     | 
| 
         @@ -68,7 +68,7 @@ My article "[Why Hire ShakaCode?](https://blog.shakacode.com/can-shakacode-help- 
     | 
|
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
            If any of this resonates with you, please email me, [justin@shakacode.com](mailto:justin@shakacode.com). I offer a free half-hour project consultation, on anything from React on Rails to any aspect of web or mobile application development for both consumer and enterprise products.
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
            We are **[currently looking to hire](http://www.shakacode.com/about/#work-with-us)** like-minded developers that wish to work on our projects, including [ 
     | 
| 
      
 71 
     | 
    
         
            +
            We are **[currently looking to hire](http://www.shakacode.com/about/#work-with-us)** like-minded developers that wish to work on our projects, including [Hawaii Chee](https://www.hawaiichee.com).
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
            I appreciate your attention and sharing of these offerings with anybody that we can help. Your support allows me to bring you and your team [front-end happiness in the Rails world](https://www.youtube.com/watch?v=SGkTvKRPYrk).
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
         @@ -138,11 +138,15 @@ React on Rails integrates Facebook's [React](https://github.com/facebook/react) 
     | 
|
| 
       138 
138 
     | 
    
         | 
| 
       139 
139 
     | 
    
         
             
            + [Features](#features)
         
     | 
| 
       140 
140 
     | 
    
         
             
            + [Why Webpack?](#why-webpack)
         
     | 
| 
      
 141 
     | 
    
         
            +
            + [rails/webpacker or custom setup for Webpack?](#webpack-configuration-custom-setup-for-webpack-or-railswebpacker)
         
     | 
| 
       141 
142 
     | 
    
         
             
            + [Getting Started with an existing Rails app](#getting-started-with-an-existing-rails-app)
         
     | 
| 
       142 
143 
     | 
    
         
             
                - [Installation Overview](#installation-overview)
         
     | 
| 
       143 
144 
     | 
    
         
             
                - [Initializer Configuration: config/initializers/react_on_rails.rb](#initializer-configuration)
         
     | 
| 
       144 
145 
     | 
    
         
             
                - [Including your React Component in your Rails Views](#including-your-react-component-in-your-rails-views)
         
     | 
| 
       145 
146 
     | 
    
         
             
                - [I18n](#i18n)
         
     | 
| 
      
 147 
     | 
    
         
            +
                - [Convert rails-5 API only app to rails app](#convert-rails-5-api-only-app-to-rails-app)
         
     | 
| 
      
 148 
     | 
    
         
            +
                - [NPM](#npm)
         
     | 
| 
      
 149 
     | 
    
         
            +
                - [Webpacker Configuration](#webpacker-configuration)
         
     | 
| 
       146 
150 
     | 
    
         
             
            + [How it Works](#how-it-works)
         
     | 
| 
       147 
151 
     | 
    
         
             
                - [Client-Side Rendering vs. Server-Side Rendering](#client-side-rendering-vs-server-side-rendering)
         
     | 
| 
       148 
152 
     | 
    
         
             
                - [Building the Bundles](#building-the-bundles)
         
     | 
| 
         @@ -179,6 +183,38 @@ This usage of webpack fits neatly and simply into existing Rails apps. You can i 
     | 
|
| 
       179 
183 
     | 
    
         
             
            Compare this to some alternative approaches for SPAs (Single Page Apps) that utilize Webpack and Rails. They will use a separate node server to distribute web pages, JavaScript assets, CSS, etc., and will still use Rails as an API server. A good example of this is our ShakaCode team member Alex's article [
         
     | 
| 
       180 
184 
     | 
    
         
             
            Universal React with Rails: Part I](https://medium.com/@alexfedoseev/isomorphic-react-with-rails-part-i-440754e82a59).
         
     | 
| 
       181 
185 
     | 
    
         | 
| 
      
 186 
     | 
    
         
            +
            ## Webpack Configuration: custom setup for Webpack or rails/webpacker?
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
            Version 9 of React on Rails added support for the rails/webpacker view helpers so that Webpack produced assets would no longer pass through the Rails asset pipeline. As part of this change, React on Rails added a configuration option to support customization of the node_modules directory. This allowed React on Rails to support the rails/webpacker configuration of the Webpack configuration.
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
            A key decision in your use React on Rails is whether you go with the rails/webpacker default setup or the traditional React on Rails setup of putting all your client side files under the `/client` directory. While there are technically 2 independent choices involved, the directory structure and the mechanism of Webpack configuration, for simplicity sake we'll assume that these choices go together.
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
            ### Traditional React on Rails using the /client directory
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            Until version 9, all React on Rails apps used the `/client` directory for configuring React on Rails in terms of the configuration of Webpack and location of your JavaScript and Webpack files, including the node_modules directory. Version 9 changed the default to `/` for the `node_modules` location using this value in `config/initializers/react_on_rails.rb`: `config.node_modules_location`. 
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
            The [ShakaCode Team](http://www.shakacode.com) _recommends_ this approach for projects beyond the simplest cases as it provides the greatest transparency in your webpack and overall client-side setup. The *big advantage* to this is that almost everything within the `/client` directory will apply if you wish to convert your client-side code to a pure Single Page Application that runs without Rails. This allows you to google for how to do something with Webpack configuration and what applies to a non-Rails app will apply just as well to a React on Rails app.
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            The two best examples of this patten are the [react-webpack-rails-tutorial](https://github.com/shakacode/react-webpack-rails-tutorial) and the integration test example in [spec/dummy](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy).
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
            In this case, you don't need to understand the nuances of customization of your Wepback config via the [Webpacker mechanism](https://github.com/rails/webpacker/blob/master/docs/webpack.md).
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
            ### rails/webpacker Setup
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
            Typical rails/webpacker apps have a standard directory structure as documented [here](https://github.com/rails/webpacker/blob/master/docs/folder-structure.md). If you follow the steps in the the [basic tutorial](https://github.com/shakacode/react_on_rails/blob/master/docs/tutorial.md), you will see this pattern in action. In order to customize the Webpack configuration, you need to consult with the [rails/webpacker Webpack configuration](https://github.com/rails/webpacker/blob/master/docs/webpack.md). 
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            Version 9 made this the default for generated apps for 2 reasons:
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
            1. It's less code to generate and thus less to explain.
         
     | 
| 
      
 210 
     | 
    
         
            +
            2. `rails/webpacker` might be viewed as a convention in the Rails community.
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
            The *advantage* of this is that there is very little code needed to get started and you don't need to understand really anything about Webpack customization. The *big disadvantage* to this is that you will need to learn the ins and outs of the [rails/webpacker way to customize Webpack]([Webpacker mechanism](https://github.com/rails/webpacker/blob/master/docs/webpack.md)) (not the plain [Webpack way](https://webpack.js.org/)) if you wish to beyond the basic setup, and this sort of knowledge is not going to be particularly applicable if you eventually want to convert your client-side app to a pure Single Page Application that runs without rails.
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
            Overall, consider carefully if you prefer the `rails/webpacker` directory structure and Webpack configuration, over the placement of all client side files within the `/client` directory along with conventional Webpack configuration.
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            See [Issue 982: Tutorial Generating Correct Project Structure?](https://github.com/shakacode/react_on_rails/issues/982) to discuss this issue.
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
       182 
218 
     | 
    
         
             
            ## Upgrade
         
     | 
| 
       183 
219 
     | 
    
         | 
| 
       184 
220 
     | 
    
         
             
            To upgrade existing apps to React on Rails 8 see the [Installation Overview](docs/basics/installation-overview.md)
         
     | 
| 
         @@ -187,6 +223,7 @@ To upgrade existing apps to React on Rails 8 see the [Installation Overview](doc 
     | 
|
| 
       187 
223 
     | 
    
         | 
| 
       188 
224 
     | 
    
         
             
            **For more detailed instructions on a fresh Rails app**, see the [React on Rails Basic Tutorial](docs/tutorial.md).
         
     | 
| 
       189 
225 
     | 
    
         | 
| 
      
 226 
     | 
    
         
            +
            **If you have rails-5 API only project**, Then [convert rails-5 API only app to rails app](#convert-rails-5-api-only-app-to-rails-app) before [getting started](#getting-started-with-an-existing-rails-app).
         
     | 
| 
       190 
227 
     | 
    
         
             
            1. Add the following to your Gemfile and `bundle install`. We recommend fixing the version of React on Rails, as you will need to keep the exact version in sync with the version in your `client/package.json` file.
         
     | 
| 
       191 
228 
     | 
    
         | 
| 
       192 
229 
     | 
    
         
             
              ```ruby
         
     | 
| 
         @@ -276,7 +313,28 @@ React on Rails provides an option for automatic conversions of Rails `*.yml` loc 
     | 
|
| 
       276 
313 
     | 
    
         | 
| 
       277 
314 
     | 
    
         
             
            See the [How to add I18n](docs/basics/i18n.md) for a summary of adding I18n.
         
     | 
| 
       278 
315 
     | 
    
         | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
      
 316 
     | 
    
         
            +
            ### Convert rails-5 API only app to rails app
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
      
 318 
     | 
    
         
            +
            1. Go to the directory where you created your app
         
     | 
| 
      
 319 
     | 
    
         
            +
             
     | 
| 
      
 320 
     | 
    
         
            +
            ```
         
     | 
| 
      
 321 
     | 
    
         
            +
            rails new your-current-app-name
         
     | 
| 
      
 322 
     | 
    
         
            +
            ```
         
     | 
| 
      
 323 
     | 
    
         
            +
             
     | 
| 
      
 324 
     | 
    
         
            +
            Rails will start creating the app and will skip the files you have already created. If there is some conflict then it will stop and you need to resolve it manually. be careful at this step as it might replace you current code in conflicted files.
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
      
 326 
     | 
    
         
            +
            2. Resolve conflicts
         
     | 
| 
      
 327 
     | 
    
         
            +
             
     | 
| 
      
 328 
     | 
    
         
            +
            ```
         
     | 
| 
      
 329 
     | 
    
         
            +
            1. Press "d" to see the difference
         
     | 
| 
      
 330 
     | 
    
         
            +
            2. If it is only adding lines then press "y" to continue
         
     | 
| 
      
 331 
     | 
    
         
            +
            3. If it is removeing some of your code then press "n" and add all additions manually
         
     | 
| 
      
 332 
     | 
    
         
            +
            ```
         
     | 
| 
      
 333 
     | 
    
         
            +
             
     | 
| 
      
 334 
     | 
    
         
            +
            3. Run `bundle install` and follow [Getting started](#getting-started-with-an-existing-rails-app)
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
      
 336 
     | 
    
         
            +
             
     | 
| 
      
 337 
     | 
    
         
            +
            ### NPM
         
     | 
| 
       280 
338 
     | 
    
         
             
            All JavaScript in React On Rails is loaded from npm: [react-on-rails](https://www.npmjs.com/package/react-on-rails). To manually install this (you did not use the generator), assuming you have a standard configuration, run this command (assuming you are in the directory where you have your `node_modules`):
         
     | 
| 
       281 
339 
     | 
    
         | 
| 
       282 
340 
     | 
    
         
             
            ```bash
         
     | 
| 
         @@ -285,7 +343,7 @@ yarn add react-on-rails 
     | 
|
| 
       285 
343 
     | 
    
         | 
| 
       286 
344 
     | 
    
         
             
            That will install the latest version and update your package.json.
         
     | 
| 
       287 
345 
     | 
    
         | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
      
 346 
     | 
    
         
            +
            ### Webpacker Configuration
         
     | 
| 
       289 
347 
     | 
    
         | 
| 
       290 
348 
     | 
    
         
             
            React on Rails users should set configuration value `compile` to false, as React on Rails handles compilation for test and production environments.
         
     | 
| 
       291 
349 
     | 
    
         | 
| 
         @@ -621,8 +679,11 @@ If you are using [jquery-ujs](https://github.com/rails/jquery-ujs) for AJAX call 
     | 
|
| 
       621 
679 
     | 
    
         
             
            1. Examples in [spec/dummy/app/views/react_router](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/app/views/react_router) and follow to the JavaScript code in the [spec/dummy/client/app/startup/ServerRouterApp.jsx](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/client/app/startup/ServerRouterApp.jsx).
         
     | 
| 
       622 
680 
     | 
    
         
             
            1. [Code Splitting docs](./docs/additional-reading/code-splitting.md) for information about how to set up code splitting for server rendered routes.
         
     | 
| 
       623 
681 
     | 
    
         | 
| 
      
 682 
     | 
    
         
            +
            ## Caching and Performance
         
     | 
| 
      
 683 
     | 
    
         
            +
            Consider fragment and http caching of pages that contain React on Rails components. See [Caching and Performance](./docs/additional-reading/caching-and-performance.md) for more details.
         
     | 
| 
      
 684 
     | 
    
         
            +
             
     | 
| 
       624 
685 
     | 
    
         
             
            ## Deployment
         
     | 
| 
       625 
     | 
    
         
            -
            *  
     | 
| 
      
 686 
     | 
    
         
            +
            * React on Rails puts the necessary precompile steps automatically in the rake precompile step. You can, however, disable this by setting certain values to nil in the [config/initializers/react_on_rails.rb](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/config/initializers/react_on_rails.rb).
         
     | 
| 
       626 
687 
     | 
    
         
             
              * `config.symlink_non_digested_assets_regex`: Set to nil to turn off the setup of non-js assets.
         
     | 
| 
       627 
688 
     | 
    
         
             
              * `build_production_command`: Set to nil to turn off the precompilation of the js assets.
         
     | 
| 
       628 
689 
     | 
    
         
             
            * See the [Heroku Deployment](./docs/additional-reading/heroku-deployment.md) doc for specifics regarding Heroku. The information here should apply to other deployments.
         
     | 
| 
         @@ -666,6 +727,7 @@ If you want to use a node server for server rendering, [get in touch](mailto:jus 
     | 
|
| 
       666 
727 
     | 
    
         
             
              + [Hot Reloading of Assets For Rails Development](./docs/additional-reading/hot-reloading-rails-development.md)
         
     | 
| 
       667 
728 
     | 
    
         
             
              + [Heroku Deployment](./docs/additional-reading/heroku-deployment.md)
         
     | 
| 
       668 
729 
     | 
    
         
             
              + [Updating Dependencies](./docs/additional-reading/updating-dependencies.md)
         
     | 
| 
      
 730 
     | 
    
         
            +
              + [Caching and Performance](./docs/additional-reading/caching-and-performance.md)
         
     | 
| 
       669 
731 
     | 
    
         | 
| 
       670 
732 
     | 
    
         
             
            + **API**
         
     | 
| 
       671 
733 
     | 
    
         
             
              + [JavaScript API](./docs/api/javascript-api.md)
         
     | 
| 
         @@ -747,7 +809,7 @@ Thank you for considering using [React on Rails](https://github.com/shakacode/re 
     | 
|
| 
       747 
809 
     | 
    
         | 
| 
       748 
810 
     | 
    
         
             
            We at [ShakaCode](http://www.shakacode.com) are a small, boutique, remote-first application development company. We fund this project by:
         
     | 
| 
       749 
811 
     | 
    
         | 
| 
       750 
     | 
    
         
            -
            * Providing priority support and training for anything related to React + Webpack + Rails in our [ 
     | 
| 
      
 812 
     | 
    
         
            +
            * Providing priority support and training for anything related to React + Webpack + Rails in our [Pro Support program](http://www.shakacode.com/work/shakacode-pro-support.pdf).
         
     | 
| 
       751 
813 
     | 
    
         
             
            * Building custom web and mobile (React Native) applications. We typically work with a technical founder or CTO and instantly provide a full development team including designers.
         
     | 
| 
       752 
814 
     | 
    
         
             
            * Migrating **Angular** + Rails to React + Rails. You can see an example of React on Rails and our work converting Angular to React on Rails at [egghead.io](https://egghead.io/browse/frameworks).
         
     | 
| 
       753 
815 
     | 
    
         
             
            * Augmenting your team to get your product completed more efficiently and quickly.
         
     | 
| 
         @@ -756,7 +818,7 @@ My article "[Why Hire ShakaCode?](https://blog.shakacode.com/can-shakacode-help- 
     | 
|
| 
       756 
818 
     | 
    
         | 
| 
       757 
819 
     | 
    
         
             
            If any of this resonates with you, please email me, [justin@shakacode.com](mailto:justin@shakacode.com). I offer a free half-hour project consultation, on anything from React on Rails to any aspect of web or mobile application development for both consumer and enterprise products.
         
     | 
| 
       758 
820 
     | 
    
         | 
| 
       759 
     | 
    
         
            -
            We are **[currently looking to hire](http://www.shakacode.com/about/#work-with-us)** like-minded developers that wish to work on our projects, including [ 
     | 
| 
      
 821 
     | 
    
         
            +
            We are **[currently looking to hire](http://www.shakacode.com/about/#work-with-us)** like-minded developers that wish to work on our projects, including [Hawaii Chee](https://www.hawaiichee.com).
         
     | 
| 
       760 
822 
     | 
    
         | 
| 
       761 
823 
     | 
    
         
             
            I appreciate your attention and sharing of these offerings with anybody that we can help. Your support allows me to bring you and your team [front-end happiness in the Rails world](https://www.youtube.com/watch?v=SGkTvKRPYrk).
         
     | 
| 
       762 
824 
     | 
    
         | 
| 
         @@ -13,7 +13,7 @@ require "react_on_rails/json_output" 
     | 
|
| 
       13 
13 
     | 
    
         
             
            module ReactOnRailsHelper
         
     | 
| 
       14 
14 
     | 
    
         
             
              include ReactOnRails::Utils::Required
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
              COMPONENT_HTML_KEY = "componentHtml"
         
     | 
| 
      
 16 
     | 
    
         
            +
              COMPONENT_HTML_KEY = "componentHtml".freeze
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              # The env_javascript_include_tag and env_stylesheet_link_tag support the usage of a webpack
         
     | 
| 
       19 
19 
     | 
    
         
             
              # dev server for providing the JS and CSS assets during development mode. See
         
     | 
| 
         @@ -178,9 +178,7 @@ module ReactOnRailsHelper 
     | 
|
| 
       178 
178 
     | 
    
         
             
              # that contains a data props.
         
     | 
| 
       179 
179 
     | 
    
         
             
              def redux_store_hydration_data
         
     | 
| 
       180 
180 
     | 
    
         
             
                return if @registered_stores_defer_render.blank?
         
     | 
| 
       181 
     | 
    
         
            -
                # rubocop:disable Performance/UnfreezeString
         
     | 
| 
       182 
181 
     | 
    
         
             
                @registered_stores_defer_render.reduce("".dup) do |accum, redux_store_data|
         
     | 
| 
       183 
     | 
    
         
            -
                  # rubocop:enable Performance/UnfreezeString
         
     | 
| 
       184 
182 
     | 
    
         
             
                  accum << render_redux_store_data(redux_store_data)
         
     | 
| 
       185 
183 
     | 
    
         
             
                end.html_safe
         
     | 
| 
       186 
184 
     | 
    
         
             
              end
         
     | 
| 
         @@ -447,15 +445,12 @@ module ReactOnRailsHelper 
     | 
|
| 
       447 
445 
     | 
    
         | 
| 
       448 
446 
     | 
    
         
             
              def initialize_redux_stores
         
     | 
| 
       449 
447 
     | 
    
         
             
                return "" unless @registered_stores.present? || @registered_stores_defer_render.present?
         
     | 
| 
       450 
     | 
    
         
            -
                declarations = "var reduxProps, store, storeGenerator;\n".dup 
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
      
 448 
     | 
    
         
            +
                declarations = "var reduxProps, store, storeGenerator;\n".dup
         
     | 
| 
       452 
449 
     | 
    
         
             
                all_stores = (@registered_stores || []) + (@registered_stores_defer_render || [])
         
     | 
| 
       453 
450 
     | 
    
         | 
| 
       454 
     | 
    
         
            -
                # rubocop:disable Performance/UnfreezeString
         
     | 
| 
       455 
451 
     | 
    
         
             
                result = <<-JS.dup
         
     | 
| 
       456 
452 
     | 
    
         
             
                  ReactOnRails.clearHydratedStores();
         
     | 
| 
       457 
453 
     | 
    
         
             
                JS
         
     | 
| 
       458 
     | 
    
         
            -
                # rubocop:enable Performance/UnfreezeString
         
     | 
| 
       459 
454 
     | 
    
         | 
| 
       460 
455 
     | 
    
         
             
                result << all_stores.each_with_object(declarations) do |redux_store_data, memo|
         
     | 
| 
       461 
456 
     | 
    
         
             
                  store_name = redux_store_data[:store_name]
         
     | 
| 
         @@ -516,6 +511,7 @@ module ReactOnRailsHelper 
     | 
|
| 
       516 
511 
     | 
    
         | 
| 
       517 
512 
     | 
    
         
             
                @rails_context.merge(serverSide: server_side)
         
     | 
| 
       518 
513 
     | 
    
         
             
              end
         
     | 
| 
      
 514 
     | 
    
         
            +
              # rubocop:enable Metrics/AbcSize
         
     | 
| 
       519 
515 
     | 
    
         | 
| 
       520 
516 
     | 
    
         
             
              def replay_console_option(val)
         
     | 
| 
       521 
517 
     | 
    
         
             
                val.nil? ? ReactOnRails.configuration.replay_console : val
         
     | 
| 
         @@ -539,3 +535,4 @@ module ReactOnRailsHelper 
     | 
|
| 
       539 
535 
     | 
    
         
             
                controller.is_a?(ActionMailer::Base)
         
     | 
| 
       540 
536 
     | 
    
         
             
              end
         
     | 
| 
       541 
537 
     | 
    
         
             
            end
         
     | 
| 
      
 538 
     | 
    
         
            +
            # rubocop:enable Metrics/ModuleLength
         
     | 
    
        data/docker-compose.yml
    ADDED
    
    
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Caching and Performance
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ## Caching
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ### Fragment Caching
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            If you wish to do fragment caching that includes React on Rails rendered components, be sure to
         
     | 
| 
      
 9 
     | 
    
         
            +
            include the bundle name of your server rendering bundle in your cache key. This is analogous to 
         
     | 
| 
      
 10 
     | 
    
         
            +
            how Rails puts an MD5 hash of your views in the cache key so that if the views change, then your 
         
     | 
| 
      
 11 
     | 
    
         
            +
            cache is busted. In the case of React code, if your React code changes, then your bundle name will
         
     | 
| 
      
 12 
     | 
    
         
            +
            change due to the typical inclusion of a hash in the name.
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Call this method to get the server bundle file name:
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 17 
     | 
    
         
            +
            # Returns the hashed file name of the server bundle when using webpacker.
         
     | 
| 
      
 18 
     | 
    
         
            +
            # Nececessary fragment-caching keys.
         
     | 
| 
      
 19 
     | 
    
         
            +
            ReactOnRails::Utils.server_bundle_file_name
         
     | 
| 
      
 20 
     | 
    
         
            +
            ```
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ### HTTP Caching
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            When creating a HTTP cache, you want the cache key to include your client bundle files.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Call this method to get the client bundle file name. Note, you have to pass which bundle name.
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 29 
     | 
    
         
            +
            # Returns the hashed file name when using webpacker. Useful for creating cache keys.
         
     | 
| 
      
 30 
     | 
    
         
            +
            ReactOnRails::Utils..bundle_file_name(bundle_name)
         
     | 
| 
      
 31 
     | 
    
         
            +
            ```
         
     | 
    
        data/docs/api/ruby-api.md
    CHANGED
    
    | 
         @@ -1,3 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            # View Helpers
         
     | 
| 
      
 2 
     | 
    
         
            +
            See the [app/helpers/react_on_rails_helper.rb](../../app/helpers/react_on_rails_helper.rb) source.
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            # Controller Helpers
         
     | 
| 
      
 5 
     | 
    
         
            +
            See the [lib/react_on_rails/controller.rb](../../lib/react_on_rails/controller.rb) source.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # Utility Methods
         
     | 
| 
      
 8 
     | 
    
         
            +
            See the [lib/react_on_rails/utils.rb](../../lib/react_on_rails/utils.rb) source.
         
     | 
    
        data/docs/tutorial.md
    CHANGED
    
    | 
         @@ -1,9 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # React on Rails Basic Tutorial
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            This tutorial setups up a new Rails app with **React on Rails**, demonstrating Rails + React + Redux + Server Rendering. It is updated to 9.0.0.
         
     | 
| 
      
 3 
     | 
    
         
            +
            This tutorial guides you through setting up a new or existing Rails app with **React on Rails**, demonstrating Rails + React + Redux + Server Rendering. It is updated to 10.0.2.
         
     | 
| 
       7 
4 
     | 
    
         | 
| 
       8 
5 
     | 
    
         
             
            After finishing this tutorial you will get an application that can do the following (live on Heroku):
         
     | 
| 
       9 
6 
     | 
    
         | 
| 
         @@ -39,7 +36,7 @@ gem install rails               # download and install latest stable Rails 
     | 
|
| 
       39 
36 
     | 
    
         
             
            gem install foreman             # download and install Foreman
         
     | 
| 
       40 
37 
     | 
    
         
             
            ```
         
     | 
| 
       41 
38 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
            Then we need to create a fresh Rails application with webpacker react support as following. 
     | 
| 
      
 39 
     | 
    
         
            +
            Then we need to create a fresh Rails application with webpacker react support as following.
         
     | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
41 
     | 
    
         
             
            First be sure to run `rails -v` and check you are using Rails 5.1.3 or above. If you are using an older version of Rails, you'll need to install webpacker with react per the instructions [here](https://github.com/rails/webpacker).
         
     | 
| 
       45 
42 
     | 
    
         | 
| 
         @@ -52,23 +49,22 @@ rails new test-react-on-rails --webpack=react 
     | 
|
| 
       52 
49 
     | 
    
         
             
            cd test-react-on-rails
         
     | 
| 
       53 
50 
     | 
    
         
             
            ```
         
     | 
| 
       54 
51 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
            Note: you  
     | 
| 
      
 52 
     | 
    
         
            +
            Note: if you are installing React On Rails in an existing app or an app that uses Rails pre 5.1.3, you will need to run these two commands as well:
         
     | 
| 
       56 
53 
     | 
    
         | 
| 
       57 
54 
     | 
    
         
             
            ```
         
     | 
| 
       58 
55 
     | 
    
         
             
            bundle exec rails webpacker:install
         
     | 
| 
       59 
56 
     | 
    
         
             
            bundle exec rails webpacker:install:react
         
     | 
| 
       60 
57 
     | 
    
         
             
            ```
         
     | 
| 
       61 
58 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
59 
     | 
    
         
             
            Add the **React On Rails** gem to your Gemfile:
         
     | 
| 
       65 
60 
     | 
    
         | 
| 
       66 
61 
     | 
    
         
             
            ```
         
     | 
| 
       67 
     | 
    
         
            -
            gem 'react_on_rails', ' 
     | 
| 
      
 62 
     | 
    
         
            +
            gem 'react_on_rails', '10.0.2'         # prefer exact gem version to match npm version
         
     | 
| 
       68 
63 
     | 
    
         
             
            ```
         
     | 
| 
       69 
64 
     | 
    
         | 
| 
      
 65 
     | 
    
         
            +
            Note: Latest released React On Rails version is considered stable. Please use the latest version to ensure you get all the security patches and the best support.
         
     | 
| 
       70 
66 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
      
 67 
     | 
    
         
            +
            Run `bundle` and commit the git repository (or `rails generate` will not work properly)
         
     | 
| 
       72 
68 
     | 
    
         | 
| 
       73 
69 
     | 
    
         | 
| 
       74 
70 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -80,7 +76,7 @@ git add -A 
     | 
|
| 
       80 
76 
     | 
    
         
             
            git commit -m "Initial commit"
         
     | 
| 
       81 
77 
     | 
    
         
             
            ```
         
     | 
| 
       82 
78 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
            Install React on Rails: `rails  
     | 
| 
      
 79 
     | 
    
         
            +
            Install React on Rails: `rails generate react_on_rails:install` or `rails generate react_on_rails:install --redux`. You need to first git commit your files before running the generator, or else it will generate an error.
         
     | 
| 
       84 
80 
     | 
    
         | 
| 
       85 
81 
     | 
    
         
             
            ```
         
     | 
| 
       86 
82 
     | 
    
         
             
            rails generate react_on_rails:install
         
     | 
| 
         @@ -55,6 +55,8 @@ module ReactOnRails 
     | 
|
| 
       55 
55 
     | 
    
         
             
                      if File.exist?(spec_helper)
         
     | 
| 
       56 
56 
     | 
    
         
             
                        add_configure_rspec_to_compile_assets(spec_helper)
         
     | 
| 
       57 
57 
     | 
    
         
             
                      else
         
     | 
| 
      
 58 
     | 
    
         
            +
                        # rubocop:disable Lint/UnneededDisable
         
     | 
| 
      
 59 
     | 
    
         
            +
                        # rubocop:disable Layout/EmptyLinesAroundArguments
         
     | 
| 
       58 
60 
     | 
    
         
             
                        GeneratorMessages.add_info(
         
     | 
| 
       59 
61 
     | 
    
         
             
                          <<-MSG.strip_heredoc
         
     | 
| 
       60 
62 
     | 
    
         | 
| 
         @@ -67,6 +69,8 @@ module ReactOnRails 
     | 
|
| 
       67 
69 
     | 
    
         
             
                          ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
         
     | 
| 
       68 
70 
     | 
    
         
             
                          MSG
         
     | 
| 
       69 
71 
     | 
    
         
             
                        )
         
     | 
| 
      
 72 
     | 
    
         
            +
                        # rubocop:enable Layout/EmptyLinesAroundArguments
         
     | 
| 
      
 73 
     | 
    
         
            +
                        # rubocop:enable Lint/UnneededDisable
         
     | 
| 
       70 
74 
     | 
    
         
             
                      end
         
     | 
| 
       71 
75 
     | 
    
         
             
                    end
         
     | 
| 
       72 
76 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -14,7 +14,7 @@ module ReactOnRails 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                  def copy_base_files
         
     | 
| 
       17 
     | 
    
         
            -
                    base_js_path = " 
     | 
| 
      
 17 
     | 
    
         
            +
                    base_js_path = "redux/base"
         
     | 
| 
       18 
18 
     | 
    
         
             
                    base_files = %w[app/javascript/bundles/HelloWorld/components/HelloWorld.jsx]
         
     | 
| 
       19 
19 
     | 
    
         
             
                    base_files.each { |file| copy_file("#{base_js_path}/#{file}", file) }
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -13,7 +13,7 @@ export default class HelloWorld extends React.Component { 
     | 
|
| 
       13 
13 
     | 
    
         
             
                super(props);
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                // How to set initial state in ES6 class syntax
         
     | 
| 
       16 
     | 
    
         
            -
                // https:// 
     | 
| 
      
 16 
     | 
    
         
            +
                // https://reactjs.org/docs/state-and-lifecycle.html#adding-local-state-to-a-class
         
     | 
| 
       17 
17 
     | 
    
         
             
                this.state = { name: this.props.name };
         
     | 
| 
       18 
18 
     | 
    
         
             
              }
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -102,8 +102,8 @@ module ReactOnRails 
     | 
|
| 
       102 
102 
     | 
    
         
             
                    next unless File.lstat(filename).symlink?
         
     | 
| 
       103 
103 
     | 
    
         
             
                    begin
         
     | 
| 
       104 
104 
     | 
    
         
             
                      target = File.readlink(filename)
         
     | 
| 
       105 
     | 
    
         
            -
                    rescue  
     | 
| 
       106 
     | 
    
         
            -
                      puts "React on Rails: Warning: your platform doesn't support File::readlink method."  
     | 
| 
      
 105 
     | 
    
         
            +
                    rescue StandardError
         
     | 
| 
      
 106 
     | 
    
         
            +
                      puts "React on Rails: Warning: your platform doesn't support File::readlink method." \
         
     | 
| 
       107 
107 
     | 
    
         
             
                           "Skipping broken link check."
         
     | 
| 
       108 
108 
     | 
    
         
             
                      break
         
     | 
| 
       109 
109 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -139,7 +139,7 @@ module ReactOnRails 
     | 
|
| 
       139 
139 
     | 
    
         
             
                  # pointing to. We can't use File.exist?, as that would check the file pointed at by the symlink.
         
     | 
| 
       140 
140 
     | 
    
         
             
                  File.lstat(path)
         
     | 
| 
       141 
141 
     | 
    
         
             
                  true
         
     | 
| 
       142 
     | 
    
         
            -
                rescue  
     | 
| 
      
 142 
     | 
    
         
            +
                rescue StandardError
         
     | 
| 
       143 
143 
     | 
    
         
             
                  false
         
     | 
| 
       144 
144 
     | 
    
         
             
                end
         
     | 
| 
       145 
145 
     | 
    
         
             
              end
         
     | 
| 
         @@ -62,9 +62,8 @@ module ReactOnRails 
     | 
|
| 
       62 
62 
     | 
    
         
             
                return unless @configuration.webpack_generated_files.empty?
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
                files = ["hello-world-bundle.js"]
         
     | 
| 
       65 
     | 
    
         
            -
                if @configuration.server_bundle_js_file.present?
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
                files << @configuration.server_bundle_js_file if @configuration.server_bundle_js_file.present?
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       68 
67 
     | 
    
         
             
                @configuration.webpack_generated_files = files
         
     | 
| 
       69 
68 
     | 
    
         
             
              end
         
     | 
| 
       70 
69 
     | 
    
         | 
| 
         @@ -85,7 +84,6 @@ module ReactOnRails 
     | 
|
| 
       85 
84 
     | 
    
         
             
                @configuration ||= Configuration.new(
         
     | 
| 
       86 
85 
     | 
    
         
             
                  node_modules_location: nil,
         
     | 
| 
       87 
86 
     | 
    
         
             
                  generated_assets_dirs: nil,
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
87 
     | 
    
         
             
                  # generated_assets_dirs is deprecated
         
     | 
| 
       90 
88 
     | 
    
         
             
                  generated_assets_dir: "",
         
     | 
| 
       91 
89 
     | 
    
         
             
                  server_bundle_js_file: "",
         
     | 
| 
         @@ -98,7 +96,6 @@ module ReactOnRails 
     | 
|
| 
       98 
96 
     | 
    
         
             
                  server_renderer_pool_size: 1,
         
     | 
| 
       99 
97 
     | 
    
         
             
                  server_renderer_timeout: 20,
         
     | 
| 
       100 
98 
     | 
    
         
             
                  skip_display_none: nil,
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
99 
     | 
    
         
             
                  # skip_display_none is deprecated
         
     | 
| 
       103 
100 
     | 
    
         
             
                  webpack_generated_files: %w[manifest.json],
         
     | 
| 
       104 
101 
     | 
    
         
             
                  rendering_extension: nil,
         
     | 
| 
         @@ -6,7 +6,7 @@ module ReactOnRails 
     | 
|
| 
       6 
6 
     | 
    
         
             
                # err might be nil if JS caught the error
         
     | 
| 
       7 
7 
     | 
    
         
             
                def initialize(component_name: nil, err: nil, props: nil,
         
     | 
| 
       8 
8 
     | 
    
         
             
                               js_code: nil, console_messages: nil)
         
     | 
| 
       9 
     | 
    
         
            -
                  message = "ERROR in SERVER PRERENDERING\n".dup 
     | 
| 
      
 9 
     | 
    
         
            +
                  message = "ERROR in SERVER PRERENDERING\n".dup
         
     | 
| 
       10 
10 
     | 
    
         
             
                  if err
         
     | 
| 
       11 
11 
     | 
    
         
             
                    # rubocop:disable Layout/IndentHeredoc
         
     | 
| 
       12 
12 
     | 
    
         
             
                    message << <<-MSG
         
     | 
| 
         @@ -98,7 +98,7 @@ module ReactOnRails 
     | 
|
| 
       98 
98 
     | 
    
         
             
                      # bundle_js_code = File.read(server_js_file)
         
     | 
| 
       99 
99 
     | 
    
         
             
                      begin
         
     | 
| 
       100 
100 
     | 
    
         
             
                        bundle_js_code = open(server_js_file, &:read)
         
     | 
| 
       101 
     | 
    
         
            -
                      rescue  
     | 
| 
      
 101 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
       102 
102 
     | 
    
         
             
                        msg = "You specified server rendering JS file: #{server_js_file}, but it cannot be "\
         
     | 
| 
       103 
103 
     | 
    
         
             
                            "read. You may set the server_bundle_js_file in your configuration to be \"\" to "\
         
     | 
| 
       104 
104 
     | 
    
         
             
                            "avoid this warning.\nError is: #{e}"
         
     | 
| 
         @@ -115,7 +115,7 @@ module ReactOnRails 
     | 
|
| 
       115 
115 
     | 
    
         
             
                      begin
         
     | 
| 
       116 
116 
     | 
    
         
             
                        trace_messsage(base_js_code, file_name)
         
     | 
| 
       117 
117 
     | 
    
         
             
                        ExecJS.compile(base_js_code)
         
     | 
| 
       118 
     | 
    
         
            -
                      rescue  
     | 
| 
      
 118 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
       119 
119 
     | 
    
         
             
                        msg = "ERROR when compiling base_js_code! "\
         
     | 
| 
       120 
120 
     | 
    
         
             
                          "See file #{file_name} to "\
         
     | 
| 
       121 
121 
     | 
    
         
             
                          "correlate line numbers of error. Error is\n\n#{e.message}"\
         
     | 
| 
         @@ -58,9 +58,7 @@ module ReactOnRails 
     | 
|
| 
       58 
58 
     | 
    
         
             
                      @js_context_pool.with do |js_context|
         
     | 
| 
       59 
59 
     | 
    
         
             
                        js_context.send(js_code + eof_symbol, 0)
         
     | 
| 
       60 
60 
     | 
    
         
             
                        result = ""
         
     | 
| 
       61 
     | 
    
         
            -
                         
     | 
| 
       62 
     | 
    
         
            -
                          result += js_context.recv(max_int)
         
     | 
| 
       63 
     | 
    
         
            -
                        end
         
     | 
| 
      
 61 
     | 
    
         
            +
                        result[-eof_symbol.length..-1] != eof_symbol while result += js_context.recv(max_int)
         
     | 
| 
       64 
62 
     | 
    
         
             
                        result[0..-eof_symbol.length]
         
     | 
| 
       65 
63 
     | 
    
         
             
                      end
         
     | 
| 
       66 
64 
     | 
    
         
             
                    end
         
     | 
    
        data/lib/react_on_rails/utils.rb
    CHANGED
    
    | 
         @@ -8,6 +8,33 @@ require "active_support/core_ext/string" 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            module ReactOnRails
         
     | 
| 
       10 
10 
     | 
    
         
             
              module Utils
         
     | 
| 
      
 11 
     | 
    
         
            +
                ###########################################################
         
     | 
| 
      
 12 
     | 
    
         
            +
                # PUBLIC API
         
     | 
| 
      
 13 
     | 
    
         
            +
                ###########################################################
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                # Returns the hashed file name when using webpacker. Useful for creating cache keys.
         
     | 
| 
      
 16 
     | 
    
         
            +
                def self.bundle_file_name(bundle_name)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  raise "Only call bundle_file_name if using webpacker" unless using_webpacker?
         
     | 
| 
      
 18 
     | 
    
         
            +
                  full_path = bundle_js_file_path_from_webpacker(bundle_name)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  pathname = Pathname.new(full_path)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  pathname.basename.to_s
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                # Returns the hashed file name of the server bundle when using webpacker.
         
     | 
| 
      
 24 
     | 
    
         
            +
                # Nececessary fragment-caching keys.
         
     | 
| 
      
 25 
     | 
    
         
            +
                def self.server_bundle_file_name
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return @server_bundle_hash if @server_bundle_hash && !Rails.env.development?
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  @server_bundle_hash = begin
         
     | 
| 
      
 29 
     | 
    
         
            +
                    server_bundle_name = ReactOnRails.configuration.server_bundle_js_file
         
     | 
| 
      
 30 
     | 
    
         
            +
                    bundle_file_name(server_bundle_name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                ###########################################################
         
     | 
| 
      
 35 
     | 
    
         
            +
                # PRIVATE API -- Subject to change
         
     | 
| 
      
 36 
     | 
    
         
            +
                ###########################################################
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
       11 
38 
     | 
    
         
             
                # https://forum.shakacode.com/t/yak-of-the-week-ruby-2-4-pathname-empty-changed-to-look-at-file-size/901
         
     | 
| 
       12 
39 
     | 
    
         
             
                # return object if truthy, else return nil
         
     | 
| 
       13 
40 
     | 
    
         
             
                def self.truthy_presence(obj)
         
     | 
| 
         @@ -85,8 +112,7 @@ exitstatus: #{status.exitstatus}#{stdout_msg}#{stderr_msg} 
     | 
|
| 
       85 
112 
     | 
    
         
             
                end
         
     | 
| 
       86 
113 
     | 
    
         | 
| 
       87 
114 
     | 
    
         
             
                def self.bundle_js_file_path(bundle_name)
         
     | 
| 
       88 
     | 
    
         
            -
                  if using_webpacker?
         
     | 
| 
       89 
     | 
    
         
            -
                    return bundle_name if bundle_name == "manifest.json"
         
     | 
| 
      
 115 
     | 
    
         
            +
                  if using_webpacker? && bundle_name != "manifest.json"
         
     | 
| 
       90 
116 
     | 
    
         
             
                    bundle_js_file_path_from_webpacker(bundle_name)
         
     | 
| 
       91 
117 
     | 
    
         
             
                  else
         
     | 
| 
       92 
118 
     | 
    
         
             
                    # Default to the non-hashed name in the specified output directory, which, for legacy
         
     | 
| 
         @@ -102,9 +128,7 @@ exitstatus: #{status.exitstatus}#{stdout_msg}#{stderr_msg} 
     | 
|
| 
       102 
128 
     | 
    
         
             
                def self.rails_version_less_than(version)
         
     | 
| 
       103 
129 
     | 
    
         
             
                  @rails_version_less_than ||= {}
         
     | 
| 
       104 
130 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                  if @rails_version_less_than.key?(version)
         
     | 
| 
       106 
     | 
    
         
            -
                    return @rails_version_less_than[version]
         
     | 
| 
       107 
     | 
    
         
            -
                  end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  return @rails_version_less_than[version] if @rails_version_less_than.key?(version)
         
     | 
| 
       108 
132 
     | 
    
         | 
| 
       109 
133 
     | 
    
         
             
                  @rails_version_less_than[version] = begin
         
     | 
| 
       110 
134 
     | 
    
         
             
                    Gem::Version.new(Rails.version) < Gem::Version.new(version)
         
     | 
    
        data/package.json
    CHANGED
    
    
    
        data/rakelib/dummy_apps.rake
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       4 
     | 
    
         
            -
            include ReactOnRails::TaskHelpers
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            namespace :dummy_apps do
         
     | 
| 
      
 6 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       7 
8 
     | 
    
         
             
              task :yarn_install do
         
     | 
| 
       8 
9 
     | 
    
         
             
                yarn_install_cmd = "yarn install --mutex network"
         
     | 
| 
       9 
10 
     | 
    
         
             
                sh_in_dir(dummy_app_dir, yarn_install_cmd)
         
     | 
    
        data/rakelib/examples.rake
    CHANGED
    
    | 
         @@ -8,8 +8,9 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            require "yaml"
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_relative "example_type"
         
     | 
| 
       10 
10 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       12 
12 
     | 
    
         
             
            namespace :examples do # rubocop:disable Metrics/BlockLength
         
     | 
| 
      
 13 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
       13 
14 
     | 
    
         
             
              # Loads data from examples_config.yml and instantiates corresponding ExampleType objects
         
     | 
| 
       14 
15 
     | 
    
         
             
              examples_config_file = File.expand_path("../examples_config.yml", __FILE__)
         
     | 
| 
       15 
16 
     | 
    
         
             
              examples_config = symbolize_keys(YAML.safe_load(File.read(examples_config_file)))
         
     | 
    
        data/rakelib/lint.rake
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       4 
     | 
    
         
            -
            include ReactOnRails::TaskHelpers
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            namespace :lint do
         
     | 
| 
      
 5 
     | 
    
         
            +
            namespace :lint do # rubocop:disable Metrics/BlockLength
         
     | 
| 
      
 6 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       7 
8 
     | 
    
         
             
              desc "Run Rubocop as shell"
         
     | 
| 
       8 
9 
     | 
    
         
             
              task :rubocop do
         
     | 
| 
       9 
10 
     | 
    
         
             
                sh_in_dir(gem_root, "bundle exec rubocop .")
         
     | 
    
        data/rakelib/node_package.rake
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       4 
     | 
    
         
            -
            include ReactOnRails::TaskHelpers
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            namespace :node_package do
         
     | 
| 
      
 6 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       7 
8 
     | 
    
         
             
              task :build do
         
     | 
| 
       8 
9 
     | 
    
         
             
                puts "Building Node Package and running 'yarn link'"
         
     | 
| 
       9 
10 
     | 
    
         
             
                sh "yarn run build && yarn link"
         
     | 
    
        data/rakelib/release.rake
    CHANGED
    
    | 
         @@ -1,11 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       4 
     | 
    
         
            -
            include ReactOnRails::TaskHelpers
         
     | 
| 
       5 
4 
     | 
    
         
             
            require_relative File.join(gem_root, "lib", "react_on_rails", "version_syntax_converter")
         
     | 
| 
       6 
5 
     | 
    
         
             
            require_relative File.join(gem_root, "lib", "react_on_rails", "git_utils")
         
     | 
| 
       7 
6 
     | 
    
         
             
            require_relative File.join(gem_root, "lib", "react_on_rails", "utils")
         
     | 
| 
       8 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
            # rubocop:disable Lint/UnneededDisable
         
     | 
| 
      
 9 
     | 
    
         
            +
            # rubocop:disable Layout/EmptyLinesAroundArguments
         
     | 
| 
       9 
10 
     | 
    
         
             
            desc("Releases both the gem and node package using the given version.
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            IMPORTANT: the gem version must be in valid rubygem format (no dashes).
         
     | 
| 
         @@ -21,9 +22,13 @@ which are installed via `bundle install` and `yarn` 
     | 
|
| 
       21 
22 
     | 
    
         
             
            2nd argument: Perform a dry run by passing 'true' as a second argument.
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
            Example: `rake release[2.1.0,false]`")
         
     | 
| 
      
 25 
     | 
    
         
            +
            # rubocop:enable Layout/EmptyLinesAroundArguments
         
     | 
| 
      
 26 
     | 
    
         
            +
            # rubocop:enable Lint/UnneededDisable
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
       25 
28 
     | 
    
         
             
            # rubocop:disable Metrics/BlockLength
         
     | 
| 
       26 
29 
     | 
    
         
             
            task :release, %i[gem_version dry_run tools_install] do |_t, args|
         
     | 
| 
      
 30 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       27 
32 
     | 
    
         
             
              class MessageHandler
         
     | 
| 
       28 
33 
     | 
    
         
             
                def add_error(error)
         
     | 
| 
       29 
34 
     | 
    
         
             
                  raise error
         
     | 
| 
         @@ -60,9 +65,7 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args| 
     | 
|
| 
       60 
65 
     | 
    
         
             
              sh_in_dir(gem_root, "git add .")
         
     | 
| 
       61 
66 
     | 
    
         | 
| 
       62 
67 
     | 
    
         
             
              # Will bump the yarn version, commit, tag the commit, push to repo, and release on yarn
         
     | 
| 
       63 
     | 
    
         
            -
              # rubocop:disable Performance/UnfreezeString
         
     | 
| 
       64 
68 
     | 
    
         
             
              release_it_command = "$(yarn bin)/release-it --non-interactive --npm.publish".dup
         
     | 
| 
       65 
     | 
    
         
            -
              # rubocop:enable Performance/UnfreezeString
         
     | 
| 
       66 
69 
     | 
    
         
             
              release_it_command << " --dry-run --verbose" if is_dry_run
         
     | 
| 
       67 
70 
     | 
    
         
             
              release_it_command << " #{npm_version}" unless npm_version.strip.empty?
         
     | 
| 
       68 
71 
     | 
    
         
             
              sh_in_dir(gem_root, release_it_command)
         
     | 
| 
         @@ -77,3 +80,4 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args| 
     | 
|
| 
       77 
80 
     | 
    
         
             
                sh_in_dir(gem_root, "git push")
         
     | 
| 
       78 
81 
     | 
    
         
             
              end
         
     | 
| 
       79 
82 
     | 
    
         
             
            end
         
     | 
| 
      
 83 
     | 
    
         
            +
            # rubocop:enable Metrics/BlockLength
         
     | 
    
        data/rakelib/run_rspec.rake
    CHANGED
    
    | 
         @@ -7,10 +7,10 @@ require "pathname" 
     | 
|
| 
       7 
7 
     | 
    
         
             
            require_relative "task_helpers"
         
     | 
| 
       8 
8 
     | 
    
         
             
            require_relative "example_type"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            include ReactOnRails::TaskHelpers
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
10 
     | 
    
         
             
            # rubocop:disable Metrics/BlockLength
         
     | 
| 
       13 
11 
     | 
    
         
             
            namespace :run_rspec do
         
     | 
| 
      
 12 
     | 
    
         
            +
              include ReactOnRails::TaskHelpers
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       14 
14 
     | 
    
         
             
              spec_dummy_dir = File.join("spec", "dummy")
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              desc "Run RSpec for top level only"
         
     | 
| 
         @@ -82,6 +82,7 @@ namespace :run_rspec do 
     | 
|
| 
       82 
82 
     | 
    
         
             
                puts "Completed all RSpec tests"
         
     | 
| 
       83 
83 
     | 
    
         
             
              end
         
     | 
| 
       84 
84 
     | 
    
         
             
            end
         
     | 
| 
      
 85 
     | 
    
         
            +
            # rubocop:enable Metrics/BlockLength
         
     | 
| 
       85 
86 
     | 
    
         | 
| 
       86 
87 
     | 
    
         
             
            desc "js tests (same as 'yarn run test')"
         
     | 
| 
       87 
88 
     | 
    
         
             
            task :js_tests do
         
     | 
| 
         @@ -119,9 +120,7 @@ def run_tests_in(dir, options = {}) 
     | 
|
| 
       119 
120 
     | 
    
         | 
| 
       120 
121 
     | 
    
         
             
              command_name = options.fetch(:command_name, path.basename)
         
     | 
| 
       121 
122 
     | 
    
         
             
              rspec_args = options.fetch(:rspec_args, "")
         
     | 
| 
       122 
     | 
    
         
            -
              # rubocop:disable Performance/UnfreezeString
         
     | 
| 
       123 
123 
     | 
    
         
             
              env_vars = "#{options.fetch(:env_vars, '')} TEST_ENV_COMMAND_NAME=\"#{command_name}\"".dup
         
     | 
| 
       124 
     | 
    
         
            -
              # rubocop:enable Performance/UnfreezeString
         
     | 
| 
       125 
124 
     | 
    
         
             
              env_vars << "COVERAGE=true" if ENV["USE_COVERALLS"]
         
     | 
| 
       126 
125 
     | 
    
         
             
              sh_in_dir(path.realpath, "#{env_vars} bundle exec rspec #{rspec_args}")
         
     | 
| 
       127 
126 
     | 
    
         
             
            end
         
     | 
    
        data/react_on_rails.gemspec
    CHANGED
    
    | 
         @@ -23,7 +23,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       23 
23 
     | 
    
         
             
              s.executables   = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       24 
24 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
              s.required_ruby_version = ">= 2. 
     | 
| 
      
 26 
     | 
    
         
            +
              s.required_ruby_version = ">= 2.1.0"
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
              s.add_dependency "addressable"
         
     | 
| 
       29 
29 
     | 
    
         
             
              s.add_dependency "connection_pool"
         
     | 
| 
         @@ -48,3 +48,4 @@ Gem::Specification.new do |s| 
     | 
|
| 
       48 
48 
     | 
    
         
             
              s.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
       49 
49 
     | 
    
         
             
              s.add_development_dependency "rspec"
         
     | 
| 
       50 
50 
     | 
    
         
             
            end
         
     | 
| 
      
 51 
     | 
    
         
            +
            # rubocop:enable Metrics/BlockLength
         
     | 
    
        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: 10.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 10.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Justin Gordon
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-01-24 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: addressable
         
     | 
| 
         @@ -324,6 +324,7 @@ files: 
     | 
|
| 
       324 
324 
     | 
    
         
             
            - ".travis.yml"
         
     | 
| 
       325 
325 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       326 
326 
     | 
    
         
             
            - CONTRIBUTING.md
         
     | 
| 
      
 327 
     | 
    
         
            +
            - Dockerfile_tests
         
     | 
| 
       327 
328 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       328 
329 
     | 
    
         
             
            - Gemfile.rails32
         
     | 
| 
       329 
330 
     | 
    
         
             
            - KUDOS.md
         
     | 
| 
         @@ -334,10 +335,12 @@ files: 
     | 
|
| 
       334 
335 
     | 
    
         
             
            - SUMMARY.md
         
     | 
| 
       335 
336 
     | 
    
         
             
            - app/helpers/react_on_rails_helper.rb
         
     | 
| 
       336 
337 
     | 
    
         
             
            - book.json
         
     | 
| 
      
 338 
     | 
    
         
            +
            - docker-compose.yml
         
     | 
| 
       337 
339 
     | 
    
         
             
            - docs/LICENSE.md
         
     | 
| 
       338 
340 
     | 
    
         
             
            - docs/additional-reading/angular-js-integration-migration.md
         
     | 
| 
       339 
341 
     | 
    
         
             
            - docs/additional-reading/asset-pipeline.md
         
     | 
| 
       340 
342 
     | 
    
         
             
            - docs/additional-reading/babel.md
         
     | 
| 
      
 343 
     | 
    
         
            +
            - docs/additional-reading/caching-and-performance.md
         
     | 
| 
       341 
344 
     | 
    
         
             
            - docs/additional-reading/code-splitting.md
         
     | 
| 
       342 
345 
     | 
    
         
             
            - docs/additional-reading/elastic-beanstalk.md
         
     | 
| 
       343 
346 
     | 
    
         
             
            - docs/additional-reading/foreman-issues.md
         
     | 
| 
         @@ -464,7 +467,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       464 
467 
     | 
    
         
             
              requirements:
         
     | 
| 
       465 
468 
     | 
    
         
             
              - - ">="
         
     | 
| 
       466 
469 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       467 
     | 
    
         
            -
                  version: 2. 
     | 
| 
      
 470 
     | 
    
         
            +
                  version: 2.1.0
         
     | 
| 
       468 
471 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       469 
472 
     | 
    
         
             
              requirements:
         
     | 
| 
       470 
473 
     | 
    
         
             
              - - ">="
         
     | 
| 
         @@ -472,7 +475,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       472 
475 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       473 
476 
     | 
    
         
             
            requirements: []
         
     | 
| 
       474 
477 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       475 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 478 
     | 
    
         
            +
            rubygems_version: 2.7.2
         
     | 
| 
       476 
479 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       477 
480 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       478 
481 
     | 
    
         
             
            summary: Rails with react server rendering with webpack.
         
     |