class BlueberryRails::AppBuilder

Public Instance Methods

add_ruby_version_file() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 229
def add_ruby_version_file
  current_version = RUBY_VERSION.split('.').map(&:to_i)
  version = if current_version[0] >= 2 && current_version[1] >= 0
              RUBY_VERSION
            else
              "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
            end
  add_file '.ruby-version', "#{version}\n", force: true
end
cache_and_compress() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 288
def cache_and_compress
  configure_environment 'production',
    "config.public_file_server.headers = {\n    'Cache-Control' => 'public, max-age=31536000'\n  }"
  configure_environment 'production',
    'config.middleware.insert_before ActionDispatch::Static, Rack::Deflater'
end
cocoon_config() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 25
def cocoon_config
  run 'yarn add https://github.com/1776/cocoon'
  inject_into_file 'app/javascript/packs/application.js',
                   "import 'cocoon';\n",
                   before: 'import { Application } from "stimulus"'
end
configure_bin_setup() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 332
def configure_bin_setup
  copy_file 'setup', 'bin/setup', force: true
end
configure_circle() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 224
def configure_circle
  empty_directory '.circleci'
  template 'circle.yml.erb', '.circleci/config.yml'
end
configure_generators() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 188
    def configure_generators
      config = <<-RUBY
    config.generators do |generate|
      generate.helper false
      generate.javascript_engine false
      generate.request_specs false
      generate.routing_specs false
      generate.stylesheets false
      generate.test_framework :rspec
      generate.view_specs false
    end

      RUBY

      inject_into_class 'config/application.rb', 'Application', config
    end
configure_i18n() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 205
def configure_i18n
  inject_into_file "config/application.rb",
                   "\n    config.i18n.load_path += Dir[Rails.root.join 'config/locales/**/*.{rb,yml}']",
                   before: "\n    # Settings"

  inject_into_file 'config/application.rb',
                   "\n    config.i18n.available_locales = [:cs, :en]\n    config.i18n.default_locale = :cs",
                   before: "\n    # Settings"

  remove_file 'config/locales/en.yml'
  directory 'locales', 'config/locales'
end
configure_i18n_logger() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 218
def configure_i18n_logger
  configure_environment 'development',
                        "# I18n debug\n  I18nLogger = ActiveSupport::" \
                        "Logger.new(Rails.root.join('log/i18n.log'))"
end
configure_mailcatcher() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 181
def configure_mailcatcher
  configure_environment 'development',
    'config.action_mailer.delivery_method = :smtp'
  configure_environment 'development',
    "config.action_mailer.smtp_settings = { address: 'localhost', port: 1025 }"
end
configure_rspec() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 152
def configure_rspec
  copy_file 'spec/spec_helper.rb', 'spec/spec_helper.rb', force: true
end
configure_simple_form() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 259
def configure_simple_form
  if options[:bootstrap]
    generate 'simple_form:install --bootstrap'

    replace_in_file 'config/initializers/simple_form.rb',
                    '# config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }',
                    'config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }'

  else
    generate 'simple_form:install'
  end
  rename_file 'config/locales/simple_form.en.yml',
              'config/locales/en/en.simple_form.yml'
end
copy_assets_directory() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 93
def copy_assets_directory
  remove_file 'app/assets/stylesheets', force: true
  remove_file 'app/assets/javascripts', force: true

  run 'mkdir app/javascript/stylesheets', force: true
  run 'touch app/javascript/packs/application.sass', force: true

  if options[:administration]
    run 'touch app/javascript/packs/admin.js', force: true
    run 'touch app/javascript/packs/admin.sass', force: true
  end
end
copy_custom_errors() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 317
    def copy_custom_errors
      copy_file 'controllers/errors_controller.rb', 'app/controllers/errors_controller.rb'

      config = <<-RUBY
    config.exceptions_app = self.routes

      RUBY

      inject_into_class 'config/application.rb', 'Application', config

      remove_file 'public/404.html', force: true
      remove_file 'public/422.html', force: true
      remove_file 'public/500.html', force: true
    end
copy_initializers() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 106
def copy_initializers
  if options[:translation_engine]
    copy_file 'config/initializers/translation_engine.rb',
              'config/initializers/translation_engine.rb'
  end
  if options[:bootstrap]
    copy_file 'config/initializers/simple_form_bootstrap.rb',
              'config/initializers/simple_form_bootstrap.rb', force: true
  end
  copy_file 'config/initializers/airbrake.rb',
            'config/initializers/airbrake.rb'

  copy_file 'config/initializers/plurals.rb',
            'config/initializers/plurals.rb'
end
copy_rake_tasks() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 313
def copy_rake_tasks
  copy_file 'tasks/images.rake', 'lib/tasks/images.rake'
end
create_application_layout() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 76
def create_application_layout
  remove_file 'app/views/layouts/application.html.erb'
  remove_file 'app/views/layouts/mailer.html.erb'
  remove_file 'app/views/layouts/mailer.text.erb'

  template 'views/layouts/application.html.slim.erb',
           'app/views/layouts/application.html.slim', force: true

  template 'views/layouts/mailer.html.slim.erb',
           'app/views/layouts/mailer.html.slim', force: true

  directory 'helpers', 'app/helpers', force: true

  remove_file 'public/favicon.ico'
  directory 'public/icons', 'public'
end
create_database() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 135
def create_database
  bundle_command 'exec rails db:create'
end
create_partials_directory() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 72
def create_partials_directory
  directory 'views/application', 'app/views/application', force: true
end
create_procfile() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 126
def create_procfile
  copy_file 'Procfile', 'Procfile'
end
create_pryrc() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 122
def create_pryrc
  copy_file 'pryrc.rb', '.pryrc'
end
create_puma_config() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 130
def create_puma_config
  remove_file 'config/puma.rb'
  copy_file 'puma.rb', 'config/puma.rb'
end
create_root_page() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 343
def create_root_page
  generate_root_controller_and_route
end
gemfile() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 13
def gemfile
  template 'Gemfile_custom.erb', 'Gemfile'
end
generate_root_controller_and_route() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 336
def generate_root_controller_and_route
  generate 'controller', 'root index'
  inject_into_file 'config/routes.rb',
                   "  root to: 'root#index'\n",
                   after: "Rails.application.routes.draw do\n"
end
generate_rspec() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 139
def generate_rspec
  generate 'rspec:install'

  copy_file 'spec/drivers.rb', 'spec/support/drivers.rb'

  inject_into_file 'spec/rails_helper.rb',
                   "\n# Screenshots\n" \
                   "require 'capybara-screenshot/rspec'\n" \
                   "Capybara::Screenshot.autosave_on_failure =\n" \
                   "  (ENV['SCR'] || ENV['AUTO_SCREENSHOT']) == '1'\n",
                   after: "Rails is not loaded until this point!\n"
end
gitignore() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 9
def gitignore
  template 'gitignore_custom.erb', '.gitignore'
end
hound_config() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 17
def hound_config
  copy_file '../.hound.yml', '.hound.yml'
  copy_file '../.eslintrc', '.eslintrc'
  copy_file '../.rubocop.yml', '.rubocop.yml'

  run 'yarn add -D eslint eslint-config-airbnb-base eslint-config-import'
end
init_git() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 309
def init_git
  run 'git init'
end
init_guard() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 166
def init_guard
  bundle_command 'exec guard init'
end
install_devise() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 239
def install_devise
  generate 'devise:install'
  generate_root_controller_and_route
  if options[:devise_model].present?
    generate 'devise', options[:devise_model]
  end

  if options[:administration]
    generate 'devise', 'administrator'
    replace_in_file 'app/models/administrator.rb',
                    ' :registerable,',
                    ''
  end

  copy_file 'locales/cs/cs.devise.yml', 'config/locales/cs/cs.devise.yml'

  rename_file 'config/locales/devise.en.yml',
              'config/locales/en/en.devise.yml'
end
raise_on_unpermitted_parameters() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 176
def raise_on_unpermitted_parameters
  configure_environment 'development',
    'config.action_controller.action_on_unpermitted_parameters = :raise'
end
readme() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 5
def readme
  template 'README.md.erb', 'README.md'
end
replace_root_controller_spec() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 283
def replace_root_controller_spec
  copy_file 'spec/controllers/root_controller_spec.rb',
            'spec/controllers/root_controller_spec.rb', force: true
end
replace_users_factory() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 274
def replace_users_factory
  copy_file 'spec/factories/users.rb',
            'spec/factories/users.rb', force: true
  if options[:administration]
    copy_file 'spec/factories/administrators.rb',
              'spec/factories/administrators.rb', force: true
  end
end
reviews_app() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 347
def reviews_app
  template 'app.json.erb', 'app.json'
end
setup_admin() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 58
def setup_admin
  directory 'admin_controllers', 'app/controllers/admin'
  directory 'admin_views', 'app/views/admin'

  template 'views/layouts/admin.html.slim.erb',
           'app/views/layouts/admin.html.slim'

  inject_into_file 'config/routes.rb',
                   "\n  namespace :admin do\n" \
                   "    root to: 'dashboard#show'\n" \
                   "  end\n\n",
                   before: '  root'
end
setup_gitignore() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 295
def setup_gitignore
  [
    'spec/lib',
    'spec/controllers',
    'spec/features',
    'spec/support/matchers',
    'spec/support/mixins',
    'spec/support/shared_examples'
  ].each do |dir|
    run "mkdir -p #{dir}"
    run "touch #{dir}/.keep"
  end
end
setup_guard() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 170
def setup_guard
  config = 'watch(%r{^spec/factories/(.+)\.rb$}) { |m| rspec.spec.call("models/factories") }'
  inject_into_file('Guardfile',
                   "\n\n  #{config}", before: "\nend")
end
setup_integration_environment() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 53
def setup_integration_environment
  copy_file 'config/environments/production.rb',
            'config/environments/integration.rb'
end
setup_mailer_hosts() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 32
def setup_mailer_hosts
  action_mailer_host 'development', "development.#{app_name}.com"
  action_mailer_host 'test', "test.#{app_name}.com"
  action_mailer_host 'staging', "staging.#{app_name}.com"
  action_mailer_host 'integration', "integration.#{app_name}.com"
  action_mailer_host 'production', "#{app_name}.com"
end
setup_rspec_support_files() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 160
def setup_rspec_support_files
  copy_file 'spec/factory_bot_syntax.rb', 'spec/support/factory_bot.rb'
  copy_file 'spec/database_cleaner_setup.rb', 'spec/support/database_cleaner.rb'
  copy_file 'spec/mail_body_helpers.rb', 'spec/support/mixins/mail_body_helpers.rb'
end
setup_staging_environment() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 45
def setup_staging_environment
  run 'cp config/environments/production.rb config/environments/staging.rb'

  replace_in_file 'config/environments/staging.rb',
                  'config.consider_all_requests_local       = false',
                  'config.consider_all_requests_local       = true'
end
test_factories_first() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 156
def test_factories_first
  copy_file 'spec/factories_spec.rb', 'spec/models/factories_spec.rb'
end
use_postgres_config_template() click to toggle source
# File lib/blueberry_rails/app_builder.rb, line 40
def use_postgres_config_template
  template 'database.yml.erb', 'config/database.yml', force: true
  template 'database.yml.erb', 'config/database.yml.sample'
end