mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
5803640261
Currently, `app:update` generates all contents regardless of the component using in application. For example, even if not using Action Cable, `app:update` will generate a contents related to Action Cable. This is a little inconvenient. This PR checks the existence of the component and does not generate unnecessary contents. Can not check all options in this way. However, it will be able to prevent the generation of unnecessary files.
31 lines
1 KiB
Ruby
31 lines
1 KiB
Ruby
require "rails/generators"
|
|
require "rails/generators/rails/app/app_generator"
|
|
|
|
module Rails
|
|
class AppUpdater # :nodoc:
|
|
class << self
|
|
def invoke_from_app_generator(method)
|
|
app_generator.send(method)
|
|
end
|
|
|
|
def app_generator
|
|
@app_generator ||= begin
|
|
gen = Rails::Generators::AppGenerator.new ["rails"], generator_options, destination_root: Rails.root
|
|
File.exist?(Rails.root.join("config", "application.rb")) ? gen.send(:app_const) : gen.send(:valid_const?)
|
|
gen
|
|
end
|
|
end
|
|
|
|
private
|
|
def generator_options
|
|
options = { api: !!Rails.application.config.api_only, update: true }
|
|
options[:skip_active_record] = !defined?(ActiveRecord::Railtie)
|
|
options[:skip_action_mailer] = !defined?(ActionMailer::Railtie)
|
|
options[:skip_action_cable] = !defined?(ActionCable::Engine)
|
|
options[:skip_sprockets] = !defined?(Sprockets::Railtie)
|
|
options[:skip_puma] = !defined?(Puma)
|
|
options
|
|
end
|
|
end
|
|
end
|
|
end
|