модуль Rails::Generators
Константы
- DEFAULT_ALIASES
- DEFAULT_OPTIONS
- RAILS_DEV_PATH
-
Нам нужно сохранить
RAILS_DEV_PATHв константе, иначе путь может измениться в Ruby 1.8.7 при использовании FileUtils.cd.
Публичные методы класса
# File railties/lib/rails/generators.rb, line 112
def api_only!
hide_namespaces "assets", "helper", "css", "js"
options[:rails].merge!(
api: true,
assets: false,
helper: false,
template_engine: nil
)
options[:mailer] ||= {}
options[:mailer][:template_engine] ||= :erb
end Настройка генераторов только для приложений API. В основном скрывает все, что обычно связано с браузером, такие как генераторы активов и миграций сессий, и полностью отключает помощники и активы, чтобы генераторы, такие как scaffold, не создавали их.
# File railties/lib/rails/generators.rb, line 104
def fallbacks
@fallbacks ||= {}
end Хранит сконфигурированные резервные варианты генераторов. Если разработчик плагина хочет, чтобы группа генераторов перешла на другую группу в случае отсутствия генераторов, он может добавить резервный вариант.
Например, shoulda считается test_framework и является расширением test_unit. Однако большая часть генераторов shoulda аналогична генераторам test_unit.
Shoulda затем может сказать генераторам искать генераторы test_unit, когда некоторые из них недоступны, добавив резервный вариант:
Rails::Generators.fallbacks[:shoulda] = :test_unit
# File railties/lib/rails/generators.rb, line 165
def help(command = "generate")
puts "Usage:"
puts " bin/rails #{command} GENERATOR [args] [options]"
puts
puts "General options:"
puts " -h, [--help] # Print generator's options and usage"
puts " -p, [--pretend] # Run but do not make any changes"
puts " -f, [--force] # Overwrite files that already exist"
puts " -s, [--skip] # Skip files that already exist"
puts " -q, [--quiet] # Suppress status output"
puts
puts "Please choose a generator below."
puts
print_generators
end Показать сообщение справки с доступными генераторами.
Возвращает массив имен пространств генераторов, которые скрыты. Имена пространств генераторов могут быть скрыты по различным причинам. Некоторые из них алиасированы, например, “rails:migration”, и могут вызываться с более коротким именем “migration”.
# File railties/lib/rails/generators.rb, line 159 def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) end
# File railties/lib/rails/generators.rb, line 257
def invoke(namespace, args = ARGV, config = {})
names = namespace.to_s.split(":")
if klass = find_by_namespace(names.pop, names.any? && names.join(":"))
args << "--help" if args.empty? && klass.arguments.any?(&:required?)
klass.start(args, config)
run_after_generate_callback if config[:behavior] == :invoke
else
options = sorted_groups.flat_map(&:last)
error = Command::CorrectableNameError.new("Could not find generator '#{namespace}'.", namespace, options)
puts <<~MSG
#{error.detailed_message}
Run `bin/rails generate --help` for more options.
MSG
end
end Принимает имя пространства, аргументы и поведение для вызова генератора. Используется в качестве точки входа по умолчанию для команд generate, destroy и update.
# File railties/lib/rails/generators.rb, line 187
def print_generators
sorted_groups.each { |b, n| print_list(b, n) }
end # File railties/lib/rails/generators.rb, line 182 def public_namespaces lookup! subclasses.map(&:namespace) end
# File railties/lib/rails/generators.rb, line 191
def sorted_groups
namespaces = public_namespaces
namespaces.sort!
groups = Hash.new { |h, k| h[k] = [] }
namespaces.each do |namespace|
base = namespace.split(":").first
groups[base] << namespace
end
rails = groups.delete("rails")
rails.map! { |n| n.delete_prefix("rails:") }
rails.delete("app")
rails.delete("plugin")
rails.delete("encrypted_secrets")
rails.delete("encrypted_file")
rails.delete("encryption_key_file")
rails.delete("master_key")
rails.delete("credentials")
rails.delete("db:system:change")
hidden_namespaces.each { |n| groups.delete(n.to_s) }
[[ "rails", rails ]] + groups.sort.to_a
end Приватные методы класса
# File railties/lib/rails/generators.rb, line 301 def command_type # :doc: @command_type ||= "generator" end
# File railties/lib/rails/generators.rb, line 309
def file_lookup_paths # :doc:
@file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ]
end # File railties/lib/rails/generators.rb, line 305 def lookup_paths # :doc: @lookup_paths ||= %w( rails/generators generators ) end
# File railties/lib/rails/generators.rb, line 280
def print_list(base, namespaces) # :doc:
namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) }
super
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.