class Replicator::AppBuilder

Public Instance Methods

configure_action_mailer() click to toggle source
# File lib/replicator/app_builder.rb, line 173
def configure_action_mailer
  action_mailer_host 'development', "#{app_name}.local"
  action_mailer_host 'test', 'www.example.com'
  action_mailer_host 'staging', "staging.#{app_name}.com"
  action_mailer_host 'production', "#{app_name}.com"
end
configure_background_jobs_for_rspec() click to toggle source
# File lib/replicator/app_builder.rb, line 151
def configure_background_jobs_for_rspec
  copy_file 'background_jobs_rspec.rb', 'spec/support/background_jobs.rb'
  run 'rails g delayed_job:active_record'
end
configure_generators() click to toggle source
# File lib/replicator/app_builder.rb, line 32
    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_rack_timeout() click to toggle source
# File lib/replicator/app_builder.rb, line 169
def configure_rack_timeout
  copy_file 'rack_timeout.rb', 'config/initializers/rack_timeout.rb'
end
configure_rspec() click to toggle source
# File lib/replicator/app_builder.rb, line 141
def configure_rspec
  remove_file 'spec/spec_helper.rb'
  copy_file 'spec_helper.rb', 'spec/spec_helper.rb'
end
configure_smtp() click to toggle source
# File lib/replicator/app_builder.rb, line 58
    def configure_smtp
      copy_file 'smtp.rb', 'config/initializers/smtp.rb'

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

      config = <<-RUBY

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = SMTP_SETTINGS
      RUBY

      inject_into_file 'config/environments/production.rb', config,
        :after => 'config.action_mailer.raise_delivery_errors = false'
    end
configure_time_formats() click to toggle source
# File lib/replicator/app_builder.rb, line 164
def configure_time_formats
  remove_file 'config/locales/en.yml'
  copy_file 'config_locales_en.yml', 'config/locales/en.yml'
end
configure_time_zone() click to toggle source
# File lib/replicator/app_builder.rb, line 156
    def configure_time_zone
      config = <<-RUBY
    config.active_record.default_timezone = :utc

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

def generate_clearance

generate 'clearance:install'

end

# File lib/replicator/app_builder.rb, line 188
def configure_unicorn
  copy_file 'unicorn.rb', 'config/unicorn.rb'
end
copy_miscellaneous_files() click to toggle source
# File lib/replicator/app_builder.rb, line 245
def copy_miscellaneous_files
  copy_file 'errors.rb', 'config/initializers/errors.rb'
end
create_application_layout() click to toggle source
# File lib/replicator/app_builder.rb, line 93
def create_application_layout
  remove_file 'app/views/layouts/application.html.erb'
  template 'application.html.slim.erb',
    'app/views/layouts/application.html.slim',
    force: true
end
create_common_javascripts() click to toggle source

def remove_turbolinks

replace_in_file 'app/assets/javascripts/application.js',
  /\/\/= require turbolinks\n/,
  ''

end

# File lib/replicator/app_builder.rb, line 106
def create_common_javascripts
  directory 'javascripts', 'app/assets/javascripts'
  template 'application.js', 
    'app/assets/javascripts/application.js',
    force: true
end
create_database() click to toggle source
# File lib/replicator/app_builder.rb, line 118
def create_database
  bundle_command 'exec rake db:create'
end
create_github_repo(repo_name) click to toggle source
# File lib/replicator/app_builder.rb, line 240
def create_github_repo(repo_name)
  path_addition = override_path_for_tests
  run "#{path_addition} hub create #{repo_name}"
end
create_heroku_apps() click to toggle source
# File lib/replicator/app_builder.rb, line 224
def create_heroku_apps
  path_addition = override_path_for_tests
  run "#{path_addition} heroku create #{app_name}-production --remote=production"
  run "#{path_addition} heroku create #{app_name}-staging --remote=staging"
  run "#{path_addition} heroku config:add RACK_ENV=staging RAILS_ENV=staging --remote=staging"
end
create_partials_directory() click to toggle source
# File lib/replicator/app_builder.rb, line 81
def create_partials_directory
  empty_directory 'app/views/application'
end
create_shared_flashes() click to toggle source
# File lib/replicator/app_builder.rb, line 85
def create_shared_flashes
  copy_file '_flashes.html.slim.erb', 'app/views/application/_flashes.html.slim'
end
create_shared_javascripts() click to toggle source
# File lib/replicator/app_builder.rb, line 89
def create_shared_javascripts
  copy_file '_javascript.html.slim.erb', 'app/views/application/_javascript.html.slim'
end
customize_error_pages() click to toggle source
# File lib/replicator/app_builder.rb, line 249
    def customize_error_pages
      meta_tags =<<-EOS
  <meta charset='utf-8' />
  <meta name='ROBOTS' content='NOODP' />
      EOS
      style_tags =<<-EOS
<link href='/assets/application.css' media='all' rel='stylesheet' type='text/css' />
      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", /<style.+>.+<\/style>/mi, style_tags.strip
        replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
      end
    end
disable_xml_params() click to toggle source
# File lib/replicator/app_builder.rb, line 296
def disable_xml_params
  copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
end
enable_database_cleaner() click to toggle source
# File lib/replicator/app_builder.rb, line 137
def enable_database_cleaner
  copy_file 'database_cleaner_rspec.rb', 'spec/support/database_cleaner.rb'
end
enable_factory_girl_syntax() click to toggle source
# File lib/replicator/app_builder.rb, line 49
def enable_factory_girl_syntax
  copy_file 'factory_girl_syntax_rspec.rb', 'spec/support/factory_girl.rb'
end
generate_pages_controller() click to toggle source
# File lib/replicator/app_builder.rb, line 277
def generate_pages_controller
  generate 'controller pages index'
end
generate_rspec() click to toggle source
# File lib/replicator/app_builder.rb, line 180
def generate_rspec
  generate 'rspec:install'
end
gitignore_files() click to toggle source
# File lib/replicator/app_builder.rb, line 204
def gitignore_files
  remove_file '.gitignore'
  copy_file 'gitignore', '.gitignore'
  [
    'spec/lib',
    'spec/controllers',
    'spec/helpers',
    'spec/support/matchers',
    'spec/support/mixins',
    # 'spec/support/shared_examples'
  ].each do |dir|
    run "mkdir #{dir}"
    run "touch #{dir}/.keep"
  end
end
init_git() click to toggle source
# File lib/replicator/app_builder.rb, line 220
def init_git
  run 'git init'
end
migrate_database() click to toggle source
# File lib/replicator/app_builder.rb, line 320
def migrate_database
  run 'rake db:migrate'
  run 'rake db:test:prepare'
end
provide_setup_script() click to toggle source
# File lib/replicator/app_builder.rb, line 27
def provide_setup_script
  copy_file 'bin_setup', 'bin/setup'
  run 'chmod a+x bin/setup'
end
raise_on_delivery_errors() click to toggle source
# File lib/replicator/app_builder.rb, line 17
def raise_on_delivery_errors
  replace_in_file 'config/environments/development.rb',
    'raise_delivery_errors = false', 'raise_delivery_errors = true'
end
raise_on_unpermitted_parameters() click to toggle source
# File lib/replicator/app_builder.rb, line 22
def raise_on_unpermitted_parameters
  configure_environment 'development',
    'config.action_controller.action_on_unpermitted_parameters = :raise'
end
readme() click to toggle source
# File lib/replicator/app_builder.rb, line 5
def readme
  template 'README.md.erb', 'README.md'
end
remove_public_index() click to toggle source
# File lib/replicator/app_builder.rb, line 9
def remove_public_index
  remove_file 'public/index.html'
end
remove_rails_logo_image() click to toggle source
# File lib/replicator/app_builder.rb, line 13
def remove_rails_logo_image
  remove_file 'app/assets/images/rails.png'
end
replace_gemfile() click to toggle source
# File lib/replicator/app_builder.rb, line 122
def replace_gemfile
  remove_file 'Gemfile'
  template 'Gemfile_clean.erb', 'Gemfile',
    force: true
end
set_heroku_remotes() click to toggle source
# File lib/replicator/app_builder.rb, line 231
def set_heroku_remotes
  concat_file(
    'templates/bin_setup',
    "# Set up staging and production git remotes\r
    git remote add staging git@heroku.com: #{app_name}-staging.git\r
    git remote add production git@heroku.com: #{app_name}-production.git"
  )
end
set_ruby_to_version_being_used() click to toggle source
# File lib/replicator/app_builder.rb, line 128
def set_ruby_to_version_being_used
  inject_into_file 'Gemfile', "\n\nruby '#{RUBY_VERSION}'",
    after: /source 'https:\/\/rubygems.org'/
end
setup_ability_file() click to toggle source
# File lib/replicator/app_builder.rb, line 291
def setup_ability_file
  template 'ability.rb',
    'app/models/ability.rb'
end
setup_admin_section() click to toggle source
# File lib/replicator/app_builder.rb, line 281
def setup_admin_section
  run 'mkdir app/controllers/admin'
  template 'admin_base_controller.rb', 
    'app/controllers/admin/base_controller.rb'
  template 'admin_dashboard_controller.rb', 
    'app/controllers/admin/dashboard_controller.rb'
  run 'mkdir app/views/admin'
  run 'touch app/views/admin/dashboard.html.slim'
end
setup_application_helper() click to toggle source
# File lib/replicator/app_builder.rb, line 265
def setup_application_helper
  template 'application_helper.rb',
    'app/helpers/application_helper.rb',
    force: true
end
setup_default_rake_task() click to toggle source
# File lib/replicator/app_builder.rb, line 314
def setup_default_rake_task
  append_file 'Rakefile' do
    "task(:default).clear\ntask :default => [:spec]\n"
  end
end
setup_devise_and_cancan() click to toggle source
# File lib/replicator/app_builder.rb, line 304
def setup_devise_and_cancan
  # setup devise/cancan/rolify
  generate 'devise:install'
  generate 'devise user'
  directory 'devise', 'app/views/devise'

  # TODO: convert devise views to slim/bootstrap
  generate 'rolify:role'
end
setup_foreman() click to toggle source
# File lib/replicator/app_builder.rb, line 192
def setup_foreman
  copy_file 'sample.env', '.sample.env'
  copy_file 'Procfile', 'Procfile'
end
setup_guard() click to toggle source
# File lib/replicator/app_builder.rb, line 300
def setup_guard
  run 'bundle exec guard init'
end
setup_rvmrc() click to toggle source
# File lib/replicator/app_builder.rb, line 133
def setup_rvmrc
  run "rvm use ruby-#{RUBY_VERSION}@#{app_name} --ruby-version --create"
end
setup_staging_environment() click to toggle source
# File lib/replicator/app_builder.rb, line 74
def setup_staging_environment
  run 'cp config/environments/production.rb config/environments/staging.rb'

  prepend_file 'config/environments/staging.rb',
    "Mail.register_interceptor RecipientInterceptor.new(ENV['EMAIL_RECIPIENTS'])\n"
end
setup_stylesheets() click to toggle source
# File lib/replicator/app_builder.rb, line 197
def setup_stylesheets
  remove_file 'app/assets/stylesheets/application.css'
  copy_file 'application.css.sass',
    'app/assets/stylesheets/application.css.sass'
  directory 'stylesheets', 'app/assets/stylesheets'
end
test_factories_first() click to toggle source
# File lib/replicator/app_builder.rb, line 53
def test_factories_first
  copy_file 'factories_spec.rb', 'spec/models/factories_spec.rb'
  append_file 'Rakefile', factories_spec_rake_task
end
update_routes() click to toggle source
# File lib/replicator/app_builder.rb, line 271
def update_routes
  template 'routes.rb.erb', 
    'config/routes.rb',
    force: true
end
use_postgres_config_template() click to toggle source
# File lib/replicator/app_builder.rb, line 113
def use_postgres_config_template
  template 'database.yml.erb', 'config/database.yml',
    force: true
end
use_rspec_binstub() click to toggle source
# File lib/replicator/app_builder.rb, line 146
def use_rspec_binstub
  run 'bundle binstub rspec-core'
  run 'rm bin/autospec'
end

Private Instance Methods

factories_spec_rake_task() click to toggle source
# File lib/replicator/app_builder.rb, line 334
def factories_spec_rake_task
  IO.read find_in_source_paths('factories_spec_rake_task.rb')
end
override_path_for_tests() click to toggle source
# File lib/replicator/app_builder.rb, line 327
def override_path_for_tests
  if ENV['TESTING']
    support_bin = File.expand_path(File.join('..', '..', '..', 'features', 'support', 'bin'))
    "PATH=#{support_bin}:$PATH"
  end
end