class InitReact

Public Class Methods

new(app_name) click to toggle source
# File lib/generators/init_react.rb, line 4
def initialize app_name
  @app_name = app_name
  FileUtils::mkdir_p "#{@app_name}/app/jsx"
end

Public Instance Methods

add_gitignore() click to toggle source
# File lib/generators/init_react.rb, line 33
  def add_gitignore
    gitignore = <<-HEREDOC
node_modules
app/assets/javascripts/react-app.js
HEREDOC

    File.open("#{@app_name}/.gitignore", "a+") do |f|
      f.write(gitignore)
    end
  end
add_react_wrapper() click to toggle source
# File lib/generators/init_react.rb, line 62
def add_react_wrapper
  file_name = "#{@app_name}/app/views/layouts/application.html.erb"
  text = File.read(file_name)
  new_contents = text.gsub(/<%= yield %>/, '<div id="react-wrapper"></div>')
  File.open(file_name, "w") {|f| f.write(new_contents)}
end
add_to_routes() click to toggle source
# File lib/generators/init_react.rb, line 101
  def add_to_routes
    route = <<-HEREDOC
  root "react_app#home"
  get "*path", to: "react_app#home"
HEREDOC

    routes = File.readlines("#{@app_name}/config/routes.rb")
    i = routes.length
    while i > 1 do
      routes[i] = routes[i-1]
      i -= 1
    end
    routes[1] = route
    File.open("#{@app_name}/config/routes.rb", "w") do |f|
      f.write(routes.join)
    end
  end
create_app_jsx() click to toggle source
# File lib/generators/init_react.rb, line 44
def create_app_jsx
  file_path = File.join(File.dirname(__FILE__), "../templates/jsx/app.jsx")
  app_jsx = File.read(file_path)

  File.open("#{@app_name}/app/jsx/app.jsx", "w") do |f|
    f.write(app_jsx)
  end
end
create_babelrc() click to toggle source
# File lib/generators/init_react.rb, line 24
def create_babelrc
  file_path = File.join(File.dirname(__FILE__), "../templates/.babelrc")
  babelrc = File.read(file_path)

  File.open("#{@app_name}/.babelrc", "w") do |f|
    f.write(babelrc)
  end
end
create_bootstrap_jsx() click to toggle source
# File lib/generators/init_react.rb, line 53
def create_bootstrap_jsx
  file_path = File.join(File.dirname(__FILE__), "../templates/jsx/bootstrap.jsx")
  bootstrap_jsx = File.read(file_path)

  File.open("#{@app_name}/app/jsx/bootstrap.jsx", "w") do |f|
    f.write(bootstrap_jsx)
  end
end
create_package_json() click to toggle source
# File lib/generators/init_react.rb, line 69
def create_package_json
  file_path = File.join(File.dirname(__FILE__), "../templates/package.json")
  package_json = File.read(file_path)

  File.open("#{@app_name}/package.json", "w") do |f|
    f.write(package_json)
  end
end
create_react_controller() click to toggle source
# File lib/generators/init_react.rb, line 87
def create_react_controller
  file_path = File.join(File.dirname(__FILE__), "../templates/controllers/react_app_controller.rb")
  controller = File.read(file_path)

  File.open("#{@app_name}/app/controllers/react_app_controller.rb", "w") do |f|
    f.write(controller)
  end
end
create_react_view() click to toggle source
# File lib/generators/init_react.rb, line 96
def create_react_view
  FileUtils::mkdir_p "#{@app_name}/app/views/react_app"
  File.open("#{@app_name}/app/views/react_app/home.html.erb", "w")
end
create_webpack_config() click to toggle source
# File lib/generators/init_react.rb, line 78
def create_webpack_config
  file_path = File.join(File.dirname(__FILE__), "../templates/webpack.config.js")
  webpack_config = File.read(file_path)

  File.open("#{@app_name}/webpack.config.js", "w") do |f|
    f.write(webpack_config)
  end
end
init() click to toggle source
# File lib/generators/init_react.rb, line 9
def init
  create_babelrc
  add_gitignore
  create_app_jsx
  create_bootstrap_jsx
  add_react_wrapper
  create_package_json
  create_webpack_config

  create_react_controller
  create_react_view
  add_to_routes
  init_api
end
init_api() click to toggle source
# File lib/generators/init_react.rb, line 119
def init_api
  FileUtils::mkdir_p "#{@app_name}/app/jsx/CallAPI"

  base_api_path = File.join(File.dirname(__FILE__), "../templates/jsx/CallAPI/BaseAPI.js")
  base_api = File.read(base_api_path)
  File.open("#{@app_name}/app/jsx/CallAPI/BaseAPI.js", "w") do |f|
    f.write(base_api)
  end

  index_api_path = File.join(File.dirname(__FILE__), "../templates/jsx/CallAPI/index.jsx")
  index_api = File.read(index_api_path)
  File.open("#{@app_name}/app/jsx/CallAPI/index.jsx", "w") do |f|
    f.write(index_api)
  end
end