lib/kazan/generators/app_generator.rb
# frozen_string_literal: true
require 'rails/generators'
require 'rails/generators/rails/app/app_generator'
module Kazan
# This class generate new app
class AppGenerator < Rails::Generators::AppGenerator
hide!
class_option :database, type: :string, aliases: '-d', default: 'postgresql',
desc: "Configure for selected database (options: #{DATABASES.join('/')})"
class_option :skip_test, type: :string, default: '--skip-test-unit'
class_option :skip_action_cable, type: :string, default: '--skip-action-cable'
class_option :sidekiq, type: :string, default: ''
class_option :clockwork, type: :string, default: ''
class_option :static, type: :string, default: ''
def finish_template
invoke :customization
super
end
def customization
invoke :setup_ruby
invoke :setup_gems
invoke :setup_secrets
invoke :setup_puma
invoke :setup_development_environment
invoke :setup_test_environment
invoke :setup_production_environment
invoke :setup_database
invoke :setup_assets
invoke :setup_helpers
invoke :setup_error_pages
invoke :setup_locales
invoke :setup_static
invoke :setup_bundler_audit
invoke :setup_spring
invoke :setup_empty_directories
invoke :setup_seo_controller
invoke :setup_mailers_templates
invoke :setup_irresponsible_modules_reek
invoke :setup_add_coment_rubocop
invoke :setup_project_repository
invoke :outro
end
def setup_ruby
say 'Setup ruby'
build :ruby_version
end
def setup_gems
return unless options[:api]
say 'Setup gems'
build :gemfile_api
end
def setup_secrets
say 'Setup secrets'
build :dotenvs
build :settings
end
def setup_puma
say 'Setup puma'
build :puma_config
end
def setup_development_environment
say 'Setup development environment'
build :exception_on_delivery_errors
build :exception_on_unpermitted_parameters
build :exception_on_missing_translations
build :letter_opener_config
build :bullet_config
build :foreman_config
build :rails_generators_config
return if options[:api]
build :quiet_assets_config
end
def setup_test_environment
say 'Setup test environment'
build :exception_on_missing_assets_in_test
build :spec_translations_config
build :spec_action_mailer_config
build :spec_database_cleaner_config
build :spec_shoulda_matchers_config
build :spec_factory_girl_config
build :spec_quality_tests
build :rspec_config
build :rspec_replace_config
end
def setup_production_environment
say 'Setup production environment'
build :smtp_config
build :rack_timeout_config
build :rack_canonical_host_config
build :rack_deflater_config
build :rollbar_config
end
def setup_database
say 'Setup database'
build :postgres_config if options[:database] == 'postgresql'
build :database_tables
end
def setup_assets
return if options[:api]
say 'Setup assets'
build :shared_views_directory
build :shared_flash
build :shared_javascript
build :shared_styles
build :assets_config
build :shared_layout
end
def setup_helpers
return if options[:api]
say 'Setup helpers'
build :simple_form_config
build :init_meta_tags
build :rack_mini_profiler_config
end
def setup_static
return if options[:api]
return if options[:static]
say 'Setup static'
build :remove_turbolinks
build :stylesheets_gems
build :stylesheets_manifest
end
def setup_error_pages
return if options[:api]
say 'Customizing the 500/404/422 pages'
build :static_pages
end
def setup_locales
return if options[:api]
say 'Setup locales tools'
build :setup_locales
end
def setup_bundler_audit
say 'Setup bundler audit'
build :bundler_audit_config
end
def setup_spring
say 'Setup spring binstubs'
build :spring
end
def setup_empty_directories
say 'Setup empty directories'
build :empty_directories
end
def setup_seo_controller
say 'Setup SeoController'
build :seo_controller
end
def setup_mailers_templates
say 'Setup mailers templates'
build :mailers_templates
end
def setup_irresponsible_modules_reek
say 'Setup comment to classes'
build :irresponsible_modules_reek
end
def setup_add_coment_rubocop
say 'Setup comment frozen_string_literal: true'
build :add_comment_rubocop
end
def setup_project_repository
say 'Setup git reposirory'
build :init_commit
end
def outro
say 'Last preparation'
end
protected
def get_builder_class
Kazan::AppBuilder
end
end
end