class WagonRails::AppBuilder

Public Instance Methods

add_host_to_application_yml() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 213
    def add_host_to_application_yml
      host = <<-EOF
production:
  HOST: https://#{heroku_app_name}.herokuapp.com
      EOF

      append_file "config/application.yml", host
    end
commit(message) click to toggle source
# File lib/wagon_rails/app_builder.rb, line 199
def commit(message)
  run "git add ."
  run "git commit -m '#{message}'"
end
configure_action_mailer() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 142
def configure_action_mailer
  action_mailer_host "development", %{"localhost:#{port}"}
  action_mailer_host "production", %{ENV.fetch("HOST")}
end
configure_generators() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 42
    def configure_generators
      config = <<-RUBY

    config.generators do |generate|
      generate.helper true
      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_high_voltage() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 273
def configure_high_voltage
  copy_file 'high_voltage.rb', 'config/initializers/high_voltage.rb'
end
configure_i18n_for_missing_translations() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 129
def configure_i18n_for_missing_translations
  raise_on_missing_translations_in("development")
  raise_on_missing_translations_in("test")
end
configure_puma() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 155
def configure_puma
  copy_file 'puma.rb', 'config/puma.rb'
end
configure_rack_timeout() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 134
def configure_rack_timeout
  copy_file 'rack_timeout.rb', 'config/initializers/rack_timeout.rb'
end
configure_simple_form() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 138
def configure_simple_form
  bundle_command "exec rails generate simple_form:install --bootstrap"
end
configure_smtp() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 60
    def configure_smtp
      copy_file 'smtp.rb', 'config/smtp.rb'

      prepend_file 'config/environments/production.rb',
        %{require Rails.root.join("config/smtp")\n}

      config = <<-RUBY

  config.action_mailer.delivery_method = :smtp
      RUBY

      inject_into_file 'config/environments/production.rb', config,
        :after => 'config.action_mailer.raise_delivery_errors = true'
    end
copy_application_yml() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 163
def copy_application_yml
  copy_file 'application.yml', 'config/application.yml'
end
copy_home() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 269
def copy_home
  copy_file 'wagon_rails_home.html.erb', 'app/views/pages/home.html.erb'
end
copy_miscellaneous_files() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 245
def copy_miscellaneous_files
  copy_file "errors.rb", "config/initializers/errors.rb"
  copy_file "json_encoding.rb", "config/initializers/json_encoding.rb"
end
create_application_layout() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 101
def create_application_layout
  template 'wagon_rails_layout.html.erb.erb',
    'app/views/layouts/application.html.erb',
    force: true
end
create_database() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 112
def create_database
  bundle_command 'exec rake db:create db:migrate'
end
create_github_repo() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 240
def create_github_repo
  path_addition = override_path_for_tests
  run "#{path_addition} hub create"
end
create_heroku_app() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 204
def create_heroku_app
  region = "eu"  # or 'us'
  run_heroku "create #{heroku_app_name} --region #{region}"
end
create_partials_directory() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 93
def create_partials_directory
  empty_directory 'app/views/shared'
end
create_shared_flashes() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 97
def create_shared_flashes
  copy_file '_flashes.html.erb', 'app/views/shared/_flashes.html.erb'
end
customize_error_pages() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 250
    def customize_error_pages
      meta_tags =<<-EOS
  <meta charset="utf-8" />
  <meta name="ROBOTS" content="NOODP" />
  <meta name="viewport" content="initial-scale=1" />
      EOS

      %w(500 404 422).each do |page|
        inject_into_file "public/#{page}.html", meta_tags, :after => "<head>\n"
        replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
      end
    end
disable_xml_params() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 277
def disable_xml_params
  copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
end
disallow_wrapping_parameters() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 89
def disallow_wrapping_parameters
  remove_file "config/initializers/wrap_parameters.rb"
end
enable_database_cleaner() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 125
def enable_database_cleaner
  copy_file 'database_cleaner_rspec.rb', 'spec/support/database_cleaner.rb'
end
enable_embed_authenticity_token_in_remote_forms() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 34
    def enable_embed_authenticity_token_in_remote_forms
      config = <<-RUBY
    config.embed_authenticity_token_in_remote_forms = true
      RUBY

      inject_into_class "config/application.rb", "Application", config
    end
enable_rack_deflater() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 75
    def enable_rack_deflater
      config = <<-RUBY

  # Enable deflate / gzip compression of controller-generated responses
  config.middleware.use Rack::Deflater
      RUBY

      inject_into_file(
        "config/environments/production.rb",
        config,
        after: serve_static_files_line
      )
    end
first_push() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 315
def first_push
  run "git push -u origin master"
end
fix_i18n_deprecation_warning() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 147
    def fix_i18n_deprecation_warning
      config = <<-RUBY
    config.i18n.enforce_available_locales = true
      RUBY

      inject_into_class 'config/application.rb', 'Application', config
    end
generate_annotate() click to toggle source

def generate_pundit

generate 'pundit:install'

end

# File lib/wagon_rails/app_builder.rb, line 293
def generate_annotate
  generate 'annotate:install'
end
generate_devise() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 281
def generate_devise
  generate 'devise:install'
end
generate_devise_views() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 302
def generate_devise_views
  generate 'devise:views:i18n_templates'
  remove_file 'app/views/devise/registrations/new.html.erb'
  copy_file 'devise_registrations_new.html.erb', 'app/views/devise/registrations/new.html.erb'
  remove_file 'app/views/devise/sessions/new.html.erb'
  copy_file 'devise_sessions_new.html.erb', 'app/views/devise/sessions/new.html.erb'
end
generate_user() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 285
def generate_user
  generate 'devise User'
end
gitignore_files() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 184
def gitignore_files
  remove_file '.gitignore'
  copy_file 'wagon_rails_gitignore', '.gitignore'
  # [
  #   'app/views/shared'
  # ].each do |dir|
  #   run "mkdir #{dir}"
  #   run "touch #{dir}/.keep"
  # end
end
init_git() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 195
def init_git
  run 'git init'
end
install_navbar() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 297
def install_navbar
  run 'curl https://raw.githubusercontent.com/lewagon/awesome-navbars/master/templates/_navbar_wagon.html.erb > app/views/shared/_navbar.html.erb'
  run 'curl https://raw.githubusercontent.com/lewagon/ui-components/master/source/images/lewagon.png > app/assets/images/logo.png'
end
provide_deploy_script() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 226
    def provide_deploy_script
      copy_file "bin_deploy", "bin/deploy"

      instructions = <<-MARKDOWN

## Deploying

    $ bin/deploy
      MARKDOWN

      append_file "README.md", instructions
      run "chmod u+x bin/deploy"
    end
push_env_to_heroku() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 222
def push_env_to_heroku
  run "figaro heroku:set -e production"
end
raise_on_delivery_errors() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 9
def raise_on_delivery_errors
  %w(development production).each do |environment|
    replace_in_file "config/environments/#{environment}.rb",
      'raise_delivery_errors = false', 'raise_delivery_errors = true'
    config = "config.action_mailer.raise_delivery_errors = true"
    uncomment_lines("config/environments/#{environment}.rb", config)
  end
end
raise_on_unpermitted_parameters() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 26
    def raise_on_unpermitted_parameters
      config = <<-RUBY
    config.action_controller.action_on_unpermitted_parameters = :raise
      RUBY

      inject_into_class "config/application.rb", "Application", config
    end
readme() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 5
def readme
  template 'README.md.erb', 'README.md'
end
remove_routes_comment_lines() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 263
def remove_routes_comment_lines
  replace_in_file 'config/routes.rb',
    /Rails\.application\.routes\.draw do.*end/m,
    "Rails.application.routes.draw do\nend"
end
replace_gemfile() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 116
def replace_gemfile
  remove_file 'Gemfile'
  template 'Gemfile.erb', 'Gemfile'
end
set_development_delivery_method() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 18
def set_development_delivery_method
  inject_into_file(
    "config/environments/development.rb",
    "\n  config.action_mailer.delivery_method = :letter_opener",
    after: "config.action_mailer.raise_delivery_errors = true",
  )
end
set_heroku_remote() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 209
def set_heroku_remote
  run "git remote add heroku git@heroku.com:#{heroku_app_name}.git"
end
set_ruby_to_version_being_used() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 121
def set_ruby_to_version_being_used
  create_file '.ruby-version', "#{WagonRails::RUBY_VERSION}\n"
end
setup_application_controller() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 310
def setup_application_controller
  remove_file 'app/controllers/application_controller.rb'
  copy_file 'application_controller.rb', 'app/controllers/application_controller.rb'
end
setup_foreman() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 159
def setup_foreman
  copy_file 'Procfile', 'Procfile'
end
setup_javascripts() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 177
def setup_javascripts
  remove_file 'app/assets/javascripts/application.js'
  copy_file 'application.js', 'app/assets/javascripts/application.js'
  run 'mkdir app/assets/javascripts/app'
  run 'touch app/assets/javascripts/app/.keep'
end
setup_paperclip() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 167
def setup_paperclip
  copy_file 'paperclip.rb', 'config/initializers/paperclip.rb'
end
setup_stylesheets() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 171
def setup_stylesheets
  run 'rm -rf app/assets/stylesheets'
  run 'curl -L https://github.com/lewagon/rails-stylesheets/archive/master.zip > app/assets/stylesheets.zip'
  run 'cd app/assets &&  unzip stylesheets.zip && rm stylesheets.zip && mv rails-stylesheets-master stylesheets & cd ../..'
end
use_postgres_config_template() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 107
def use_postgres_config_template
  template 'postgresql_database.yml.erb', 'config/database.yml',
    force: true
end

Private Instance Methods

generate_secret() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 343
def generate_secret
  SecureRandom.hex(64)
end
heroku_app_name() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 339
def heroku_app_name
  "#{app_name}-production"
end
override_path_for_tests() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 327
def override_path_for_tests
  if ENV['TESTING']
    support_bin = File.expand_path(File.join('..', '..', 'spec', 'fakes', 'bin'))
    "PATH=#{support_bin}:$PATH"
  end
end
port() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 347
def port
  @port ||= 3000
end
raise_on_missing_translations_in(environment) click to toggle source
# File lib/wagon_rails/app_builder.rb, line 321
def raise_on_missing_translations_in(environment)
  config = 'config.action_view.raise_on_missing_translations = true'

  uncomment_lines("config/environments/#{environment}.rb", config)
end
run_heroku(command) click to toggle source
# File lib/wagon_rails/app_builder.rb, line 334
def run_heroku(command)
  path_addition = override_path_for_tests
  run "#{path_addition} heroku #{command}"
end
serve_static_files_line() click to toggle source
# File lib/wagon_rails/app_builder.rb, line 351
def serve_static_files_line
  "config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?\n"
end