class PackGenerator

Public Instance Methods

create_component_base_files() click to toggle source
# File lib/generators/pack/pack_generator.rb, line 22
        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/pack/pack_generator.rb, line 43
        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/pack/pack_generator.rb, line 77
        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/pack/pack_generator.rb, line 10
        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/pack/pack_generator.rb, line 5
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/pack/pack_generator.rb, line 123
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