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
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
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