class ReduxRails::InstallGenerator

Public Instance Methods

add_packages() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 7
def add_packages
        system("yarn add react-redux redux redux-devtools-extension react-router-dom react-router-redux history")
end
create_component_base_files() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 28
                def create_component_base_files
                        empty_directory("app/javascript/src/#{name}/components")
                        empty_directory("app/javascript/src/#{name}/components/#{name}")
                        create_file "app/javascript/src/#{name}/components/#{name}/#{name}.js",
"import React from 'react';
import './#{name}.scss';

const #{name} = () => (
      <div className='#{name}'>
        <h1>#{name} component!</h1>
            <p>find me in app/javascript/src/#{name}/components/#{name}/#{name}.js</p>
      </div>
)

export default #{name};"
                        create_file "app/javascript/src/#{name}/components/#{name}/#{name}.scss",
".#{name} {

}"
                end
create_container_base_files() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 49
                def create_container_base_files
                        empty_directory("app/javascript/src/#{name}/containers")
                        empty_directory("app/javascript/src/#{name}/containers/#{name}")
                        create_file "app/javascript/src/#{name}/containers/#{name}/#{name}.js",
"import * as actions from './actions';
import * as constants from './constants';
import #{name}Reducer from './#{name}Reducer';

export default { actions, constants, #{name}Reducer };"
                        create_file "app/javascript/src/#{name}/containers/#{name}/actions.js",
"// import {} from './constants';
//import * as t from './actionTypes';

//export const someAction = (text) => ({
//      type: t.SOME_ACTION,
//      payload: { text }
//});"
                        create_file "app/javascript/src/#{name}/containers/#{name}/actionTypes.js",
"//export const SOME_ACTION = '#{name}/SOME_ACTION';"

                        create_file "app/javascript/src/#{name}/containers/#{name}/constants.js",
"// export const SOME_CONST = 'SOME_CONST';"

                        create_file "app/javascript/src/#{name}/containers/#{name}/#{name}Reducer.js",
"const #{name}Reducer = (state = {}, action) => {
  switch (action.type) {
    default:
      return state;
  }
};

export default #{name}Reducer;"
                end
create_pack() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 83
                def create_pack
                        create_file "app/javascript/packs/#{name}.jsx",
"// add <%= javascript_pack_tag '#{name}' %> and <%= stylesheet_pack_tag '#{name}' %> to the html.erb file you would like your React App to be rendered.

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { createStore, combineReducers, applyMiddleware } from 'redux'

//this allows you to use the redux devtool in chrome
import { devToolsEnhancer } from 'redux-devtools-extension'

import { BrowserRouter as Router, Route, Link } from 'react-router-dom'

import #{name} from '../src/#{name}/components/#{name}/#{name}.js'

import rootReducer from '../src/#{name}/reducer'

//this is for devToolsEnhancer otherwise would be 'let store = createStore(rootReducer)'
let store = createStore(rootReducer, /* preloadedState, */ devToolsEnhancer(
  // Specify name here, actionsBlacklist, actionsCreators and other options if needed
));
console.log(store.getState())

// Note that subscribe() returns a function for unregistering the listener
let unsubscribe = store.subscribe(() =>
  console.log(store.getState())
)

// Stop listening to state updates
unsubscribe()

document.addEventListener('DOMContentLoaded', () => {
  render(
    <Provider store={store}>
      <Router>
        <div>
          <Route path=\"/\" component={#{name}} />
        </div>
      </Router>
    </Provider>,
    document.body.appendChild(document.createElement('div')),
  )
})"
                end
create_reducer_base_file() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 16
                def create_reducer_base_file
                        create_file "app/javascript/src/#{name}/reducer.js",
"import { combineReducers } from 'redux'
import #{name}Reducer from './containers/#{name}/#{name}Reducer.js'

const rootReducer = combineReducers({
  #{name}Reducer
})

export default rootReducer"
                end
create_src_directory() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 11
def create_src_directory
  empty_directory("app/javascript/src")
  empty_directory("app/javascript/src/#{name}")
end
insert_into_manifest() click to toggle source
# File lib/generators/redux_rails/install_generator.rb, line 129
def insert_into_manifest
  inject_into_file "public/packs/manifest.json", "    \"#{name}.js\" : \"http://0.0.0.0:8080/packs/#{name}.js\",\n", :after => "{\n"

  inject_into_file "public/packs/manifest.json",  "  \"#{name}.css\" : \"http://0.0.0.0:8080/packs/#{name}.css\",\n", :after =>  "\"#{name}.js\" : \"http://0.0.0.0:8080/packs/#{name}.js\",\n"
end