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