Class: Katapult::Generators::BasicsGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- Katapult::Generators::BasicsGenerator
- Includes:
- Katapult::GeneratorGoodies
- Defined in:
- lib/generators/katapult/basics/basics_generator.rb
Constant Summary collapse
- WEBPACK_DIR =
'app/webpack'- YARN_PACKAGES =
%w[ autoprefixer autosize bootstrap-sass jquery jquery-ujs unpoly ]
Instance Method Summary collapse
- #add_basic_files ⇒ Object
- #add_modularity_load_paths ⇒ Object
- #bundle_install ⇒ Object
- #configure_action_mailer ⇒ Object
- #configure_autoprefixer ⇒ Object
- #configure_system_email ⇒ Object
- #configure_test_environment ⇒ Object
- #copy_templates ⇒ Object
- #create_databases ⇒ Object
-
#disable_asset_debugging ⇒ Object
Faster.
- #disable_migration_errors ⇒ Object
-
#enhance_gemfile ⇒ Object
Gems ###################################################################.
-
#install_application_layout ⇒ Object
Configure Rails ########################################################.
- #install_capistrano ⇒ Object
- #install_cucumber ⇒ Object
- #install_errors_controller ⇒ Object
- #install_ext ⇒ Object
- #install_helpers ⇒ Object
- #install_initializers ⇒ Object
- #install_rspec ⇒ Object
- #prepare_application_record ⇒ Object
-
#remove_asset_pipeline_traces ⇒ Object
We’re using Webpacker.
- #set_timezone ⇒ Object
- #setup_guard ⇒ Object
-
#setup_spring ⇒ Object
Configure 3rd party ####################################################.
- #setup_staging ⇒ Object
- #setup_webpacker ⇒ Object
-
#write_database_ymls ⇒ Object
Database ###############################################################.
Methods included from Katapult::GeneratorGoodies
Instance Method Details
#add_basic_files ⇒ Object
29 30 31 32 33 34 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 29 def add_basic_files template '.ruby-version' template '.gitignore', force: true template 'public/robots.txt', force: true template 'README.md', force: true end |
#add_modularity_load_paths ⇒ Object
223 224 225 226 227 228 229 230 231 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 223 def add_modularity_load_paths # This results in correct indentation :) application <<-'LOAD_PATHS' config.autoload_paths << "#{Rails.root}/app/controllers/shared" config.autoload_paths << "#{Rails.root}/app/models/shared" config.autoload_paths << "#{Rails.root}/app/util" config.autoload_paths << "#{Rails.root}/app/util/shared" LOAD_PATHS end |
#bundle_install ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 46 def bundle_install run 'bundle install --quiet' # Fix Bundler for parallel_tests run 'bundle config --local disable_exec_load true' # This is relevant for the server, so it may happen after bundling here. # By having Nokogiri use system libraries, it will get automatic updates # of the frequently broken libxml (i.e. when the system libxml updates). run 'bundle config --local build.nokogiri --use-system-libraries' end |
#configure_action_mailer ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 124 def configure_action_mailer app_con = 'app/controllers/application_controller.rb' inject_into_file app_con, <<-CONFIG, before: /end\n\z/ before_action :make_action_mailer_use_request_host_and_protocol private def make_action_mailer_use_request_host_and_protocol ActionMailer::Base.default_url_options[:protocol] = request.protocol ActionMailer::Base.default_url_options[:host] = request.host_with_port end CONFIG gsub_file 'app/mailers/application_mailer.rb', /(^\s+default from:).*$/, '\1 Rails.configuration.system_email' end |
#configure_autoprefixer ⇒ Object
304 305 306 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 304 def configure_autoprefixer template '.browserslistrc' end |
#configure_system_email ⇒ Object
153 154 155 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 153 def configure_system_email application "config.system_email = 'system@#{app_name}.com'\n" end |
#configure_test_environment ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 108 def configure_test_environment test_env = 'config/environments/test.rb' gsub_file test_env, /# Do not eager load code on boot.*config\.eager_load = false/m, 'config.eager_load = true' gsub_file test_env, / # Show full error.*\n config\.consider_all_requests_local\s.*$/, ' config.consider_all_requests_local = false' gsub_file test_env, / # Disable request forgery protection.*\n config\.action_controller\.allow_forgery_protection\s.*$\n/, '' gsub_file test_env, /config\.action_controller\.perform_caching\s.*$/, 'config.action_controller.perform_caching = true' end |
#copy_templates ⇒ Object
184 185 186 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 184 def copy_templates invoke 'katapult:templates' end |
#create_databases ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 69 def create_databases # Need to unset RAILS_ENV variable for this sub command because # parallel_tests defaults to "test" only if the variable is not set (<-> # empty string value). However, because this is run from a Rails # generator, the variable is already set to "development". Cannot set to # "test" either because parallel_tests is only loaded in development. run 'unset RAILS_ENV; bundle exec rake db:drop db:create parallel:drop parallel:create' end |
#disable_asset_debugging ⇒ Object
Faster
157 158 159 160 161 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 157 def disable_asset_debugging # Faster gsub_file 'config/environments/development.rb', /config\.assets\.debug =.*$/, 'config.assets.debug = false' end |
#disable_migration_errors ⇒ Object
91 92 93 94 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 91 def disable_migration_errors development = 'config/environments/development.rb' gsub_file development, /(migration_error =) :page_load/, '\1 false' end |
#enhance_gemfile ⇒ Object
Gems ###################################################################
38 39 40 41 42 43 44 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 38 def enhance_gemfile # Need to transfer the katapult line, because in tests, katapult is # installed with a custom :path option @katapult = File.readlines('Gemfile').find{ |line| line =~ /^gem 'katapult'/ } template 'Gemfile', force: true template 'Gemfile.lock', force: true end |
#install_application_layout ⇒ Object
Configure Rails ########################################################
81 82 83 84 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 81 def install_application_layout remove_file 'app/views/layouts/application.html.erb' directory 'app/views/layouts' end |
#install_capistrano ⇒ Object
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 266 def install_capistrano # Create Capfile *before* installing Capistrano to prevent annoying # Harrow.io ad template 'Capfile', force: true run 'cap install' deploy_rb = File.read('config/deploy.rb') @version = deploy_rb[/^lock.*?([\d\.]+)/, 1] template 'config/deploy.rb', force: true template 'config/deploy/staging.rb', force: true template 'config/deploy/production.rb', force: true directory 'lib/capistrano/tasks' template 'lib/tasks/pending_migrations.rake' # Whenever needs this file for deployment create_file 'config/schedule.rb' end |
#install_cucumber ⇒ Object
233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 233 def install_cucumber run 'spring stop' # Spring constantly causes trouble here generate 'cucumber:install' directory 'features/support' template 'config/cucumber.yml', force: true # Remove cucumber section from database.yml. Don't need this. gsub_file 'config/database.yml', /^cucumber.*\z/m, '' environment <<~ACTIVE_JOB, env: 'test' config.active_job.queue_adapter = :inline ACTIVE_JOB end |
#install_errors_controller ⇒ Object
171 172 173 174 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 171 def install_errors_controller template 'app/controllers/errors_controller.rb' route 'resources :errors, only: :new' end |
#install_ext ⇒ Object
180 181 182 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 180 def install_ext directory 'lib/ext' end |
#install_helpers ⇒ Object
163 164 165 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 163 def install_helpers directory 'app/helpers' end |
#install_initializers ⇒ Object
176 177 178 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 176 def install_initializers directory 'config/initializers' end |
#install_rspec ⇒ Object
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 248 def install_rspec generate 'rspec:install' directory 'spec' gsub_file '.rspec', "--warnings\n", '' # Don't show Ruby warnings template '.rspec_parallel' merge_rails_helper_into_spec_helper uncomment_lines 'spec/spec_helper.rb', /Dir.Rails.root.join.+spec.support/ gsub_file 'spec/spec_helper.rb', /^ config\.use_transactional_fixtures = true/, <<-CONTENT # RSpec's transaction logic needs to be disabled for DatabaseCleaner to work config.use_transactional_fixtures = false CONTENT end |
#prepare_application_record ⇒ Object
167 168 169 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 167 def prepare_application_record template 'app/models/application_record.rb', force: true end |
#remove_asset_pipeline_traces ⇒ Object
We’re using Webpacker
87 88 89 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 87 def remove_asset_pipeline_traces remove_dir 'app/assets' end |
#set_timezone ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 141 def set_timezone # This results in correct indentation :) application <<-'LOAD_PATHS' config.time_zone = 'Berlin' config.active_record.default_timezone = :local config.active_record.time_zone_aware_attributes = false LOAD_PATHS gsub_file 'config/application.rb', /# config\.time_zone =.*$/, "config.time_zone = 'Berlin'" end |
#setup_guard ⇒ Object
217 218 219 220 221 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 217 def setup_guard template 'Guardfile' environment "config.middleware.use Rack::LiveReload\n", env: :development environment "config.assets.digest = false # For Guard::Livereload\n", env: :development end |
#setup_spring ⇒ Object
Configure 3rd party ####################################################
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 190 def setup_spring run 'bundle exec spring binstub --all' # Enhance Spring config config = 'config/spring.rb' inject_into_file config, <<-DIR, after: /\A%w\(\n/ lib/templates DIR prepend_to_file config, <<-MKDIR # Custom generator templates are put into lib/templates FileUtils.mkdir_p 'lib/templates' MKDIR # Parallel-fix binstubs Dir['bin/*'].each do |binstub| if File.read(binstub) =~ /load.*spring/ inject_into_file binstub, <<-PARALLEL, after: /\A.*\n/ running_in_parallel = ENV.has_key?('TEST_ENV_NUMBER') || ARGV.any? { |arg| arg =~ /^parallel:/ } PARALLEL gsub_file binstub, /^(\s*load .*spring.*)$/, '\1 unless running_in_parallel' end end end |
#setup_staging ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 96 def setup_staging template 'config/environments/staging.rb' # Cheating in the "staging" secret between "test" and "production" secret = run('bundle exec rake secret', capture: true).chomp insert_into_file 'config/secrets.yml', <<~SECRET, after: "test:\n" secret_key_base: #{ secret } staging: SECRET end |
#setup_webpacker ⇒ Object
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 285 def setup_webpacker remove_dir 'app/javascript' directory WEBPACK_DIR directory 'config/webpack' gsub_file 'config/webpacker.yml', /^( source_path:).*$/, '\1 ' + WEBPACK_DIR inject_into_file 'config/webpack/environment.js', <<~JQUERY, after: /\A.*\n/ # 1st line const webpack = require('webpack') environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }) ) JQUERY yarn :add, *YARN_PACKAGES end |
#write_database_ymls ⇒ Object
Database ###############################################################
61 62 63 64 65 66 67 |
# File 'lib/generators/katapult/basics/basics_generator.rb', line 61 def write_database_ymls @db_user = .db_user @db_password = .db_password template 'config/database.yml', force: true template 'config/database.sample.yml' end |