Spec-Zone.ru › Ruby on Rails 6.1

модуль Rails::Generators

Константы

DEFAULT_ALIASES
DEFAULT_OPTIONS
RAILS_DEV_PATH

Нам необходимо хранить RAILS_DEV_PATH в константе, иначе путь может измениться в Ruby 1.8.7 при использовании FileUtils.cd.

Публичные методы класса

api_only!() Показать исходный код
# File railties/lib/rails/generators.rb, line 121
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, не создавали их.

fallbacks() Показать исходный код
# File railties/lib/rails/generators.rb, line 113
def fallbacks
  @fallbacks ||= {}
end

Хранит настроенные резервные генераторы. Если разработчик плагина хочет, чтобы группа генераторов перешла на другую группу в случае отсутствия генераторов, он может добавить резервную копию.

Например, shoulda считается тестовой рамкой и является расширением test_unit. Однако большая часть генераторов shoulda похожа на генераторы test_unit.

Shoulda затем может сказать генераторам искать генераторы test_unit, когда некоторые из них недоступны, добавив резервную копию:

Rails::Generators.fallbacks[:shoulda] = :test_unit
help(command = "generate") Показать исходный код
# File railties/lib/rails/generators.rb, line 180
def help(command = "generate")
  puts "Usage: 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

Показать сообщение справки с доступными генераторами.

hidden_namespaces() Показать исходный код
# File railties/lib/rails/generators.rb, line 140
def hidden_namespaces
  @hidden_namespaces ||= begin
    orm      = options[:rails][:orm]
    test     = options[:rails][:test_framework]
    template = options[:rails][:template_engine]
    css      = options[:rails][:stylesheet_engine]

    [
      "rails",
      "resource_route",
      "#{orm}:migration",
      "#{orm}:model",
      "#{test}:controller",
      "#{test}:helper",
      "#{test}:integration",
      "#{test}:system",
      "#{test}:mailer",
      "#{test}:model",
      "#{test}:scaffold",
      "#{test}:view",
      "#{test}:job",
      "#{template}:controller",
      "#{template}:scaffold",
      "#{template}:mailer",
      "#{css}:scaffold",
      "#{css}:assets",
      "css:assets",
      "css:scaffold",
      "action_text:install",
      "action_mailbox:install"
    ]
  end
end

Возвращает массив имён пространств генераторов, которые скрыты. Пространства имён генераторов могут быть скрыты по различным причинам. Некоторые из них алиасированы, например, «rails:migration», и могут быть вызваны с более коротким именем, например, «migration», другие являются частными для других генераторов, например, «css:scaffold».

hide_namespace(*namespaces)
Псевдоним для: hide_namespaces
hide_namespaces(*namespaces) Показать исходный код
# File railties/lib/rails/generators.rb, line 174
def hide_namespaces(*namespaces)
  hidden_namespaces.concat(namespaces)
end
Также алиасирован как: hide_namespace
invoke(namespace, args = ARGV, config = {}) Показать исходный код
# File railties/lib/rails/generators.rb, line 271
      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)
          suggestion  = Rails::Command::Spellchecker.suggest(namespace.to_s, from: options)
          suggestion_msg = "Maybe you meant #{suggestion.inspect}?" if suggestion

          puts <<~MSG
            Could not find generator '#{namespace}'. #{suggestion_msg}
            Run `bin/rails generate --help` for more options.
          MSG
        end
      end

Принимает имя пространства, аргументы и поведение для вызова генератора. Используется в качестве точки входа по умолчанию для команд generate, destroy и update.

print_generators() Показать исходный код
# File railties/lib/rails/generators.rb, line 201
def print_generators
  sorted_groups.each { |b, n| print_list(b, n) }
end
public_namespaces() Показать исходный код
# File railties/lib/rails/generators.rb, line 196
def public_namespaces
  lookup!
  subclasses.map(&:namespace)
end
sorted_groups() Показать исходный код
# File railties/lib/rails/generators.rb, line 205
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

Приватные методы класса

command_type() Показать исходный код
# File railties/lib/rails/generators.rb, line 316
def command_type # :doc:
  @command_type ||= "generator"
end
file_lookup_paths() Показать исходный код
# File railties/lib/rails/generators.rb, line 324
def file_lookup_paths # :doc:
  @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ]
end
lookup_paths() Показать исходный код
# File railties/lib/rails/generators.rb, line 320
def lookup_paths # :doc:
  @lookup_paths ||= %w( rails/generators generators )
end
print_list(base, namespaces) Показать исходный код
# File railties/lib/rails/generators.rb, line 295
def print_list(base, namespaces) # :doc:
  namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) }
  super
end
Вызывает метод суперкласса

© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API