class TractorBeam::AppBuilder

Public Instance Methods

add_scripts_to_package_json() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 101
    def add_scripts_to_package_json
      scripts = <<-SCRIPTS
  "scripts": {
    "lint-staged": "$(yarn bin)/lint-staged"
  },
  "lint-staged": {
    "config/webpack/**/*.js": [
      "prettier --write",
      "eslint",
      "git add"
    ],
    "frontend/**/*.js": [
      "prettier --write",
      "eslint",
      "git add"
    ],
    "frontend/**/*.css": [
      "prettier --write",
      "stylelint --fix",
      "git add"
    ]
  },
  "pre-commit": [
    "lint-staged"
  ],
      SCRIPTS

      insert_into_file "package.json",
                       scripts,
                       after: "},\n"
    end
boot_file() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 29
def boot_file
  template "boot_rb", "config/boot.rb", force: true
end
component_generator() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 152
def component_generator
  empty_directory "lib/generators"

  template "component_generator", "lib/generators/component_generator.rb"
end
configure_generators() click to toggle source

Generators

# File lib/tractor_beam/app_builder.rb, line 135
    def configure_generators
      config = <<-RUBY
    config.generators do |g|
      g.helper          false
      g.javascripts     false
      g.request_specs   false
      g.routing_specs   false
      g.stylesheets     false
      g.test_framework :rspec
      g.view_specs      false
      g.channel         assets: false
    end
      RUBY

      inject_into_class "config/application.rb", "Application", config
    end
create_application_layout() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 56
def create_application_layout
  template "tractor_beam_layout.html.erb.erb",
           "app/views/layouts/application.html.erb",
           force: true
end
customize_rakefile() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 78
def customize_rakefile
  insert_into_file "Rakefile",
                   %{\nRake::Task.define_task("assets:precompile" => ["yarn:install", "webpacker:compile"])\n},
                   after: "require_relative 'config/application'\n"
end
customize_webpacker_yml() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 66
def customize_webpacker_yml
  say "Customizing webpacker.yml"

  gsub_file "config/webpacker.yml", "source_path: app/javascript", "source_path: frontend"
end
gemfile() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 13
def gemfile
  template "Gemfile.erb", "Gemfile"
end
gitignore() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 9
def gitignore
  copy_file "tractor_beam_gitignore", ".gitignore"
end
prepend_view_path_to_application_controller() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 72
def prepend_view_path_to_application_controller
  insert_into_file "app/controllers/application_controller.rb",
                   "  prepend_view_path Rails.root.join(\"frontend\")\n",
                   after: "protect_from_forgery with: :exception\n"
end
procfile() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 25
def procfile
  template "Procfile", "Procfile"
end
procfile_dev() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 21
def procfile_dev
  template "Procfile.dev", "Procfile.dev"
end
provide_setup_script() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 33
def provide_setup_script
  template "bin_setup", "bin/setup", force: true
  run "chmod a+x bin/setup"
end
readme() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 5
def readme
  template "README.md.erb", "README.md"
end
remove_legacy_assets_folder() click to toggle source

Component Based frontend

# File lib/tractor_beam/app_builder.rb, line 40
def remove_legacy_assets_folder
  remove_dir "app/assets"
end
set_ruby_version() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 17
def set_ruby_version
  create_file ".ruby-version", "#{TractorBeam::RUBY_VERSION}\n", force: true
end
setup_actioncable() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 166
def setup_actioncable
  return if options[:skip_action_cable]
  say "Installing actioncable"

  run "yarn add actioncable"

  empty_directory "frontend/client"
  template "cable_js", "frontend/client/cable.js", force: true
end
setup_browserlist_rc() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 62
def setup_browserlist_rc
  template "browserlistrc", ".browserlistrc"
end
setup_js_linter() click to toggle source

Linting

# File lib/tractor_beam/app_builder.rb, line 86
def setup_js_linter
  run "yarn add --dev babel-eslint eslint eslint-config-airbnb-base " \
    "eslint-config-prettier eslint-import-resolver-webpack " \
    "eslint-plugin-import eslint-plugin-prettier " \
    "lint-staged pre-commit prettier"

  template "eslintrc", ".eslintrc"
end
setup_rails_ujs() click to toggle source

Default Rails Features

# File lib/tractor_beam/app_builder.rb, line 160
def setup_rails_ujs
  say "Installing rails-ujs"

  run "yarn add rails-ujs"
end
setup_root_frontend_folder() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 44
def setup_root_frontend_folder
  empty_directory "frontend"

  inside "frontend" do
    directory "packs"
    empty_directory "init"
  end

  template "frontend/init/index.css", "frontend/init/index.css", force: true
  template "frontend/init/index.js.erb", "frontend/init/index.js", force: true
end
setup_rspec() click to toggle source

Test environment

# File lib/tractor_beam/app_builder.rb, line 184
def setup_rspec
  run "bin/rails g rspec:install"

  template "rails_helper", "spec/rails_helper.rb", force: true
end
setup_style_linter() click to toggle source
# File lib/tractor_beam/app_builder.rb, line 95
def setup_style_linter
  run "yarn add --dev stylelint stylelint-config-standard"

  template "stylelintrc", ".stylelintrc"
end