Spec-Zone.ru › Ruby on Rails 5.0

модуль Rails::Generators

Константы

DEFAULT_ALIASES
DEFAULT_OPTIONS
RAILS_DEV_PATH

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

RESERVED_NAMES

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

api_only!() Показать исходный код
# File railties/lib/rails/generators.rb, line 110
def self.api_only!
  hide_namespaces "assets", "helper", "css", "js"

  options[:rails].merge!(
    api: true,
    assets: false,
    helper: false,
    template_engine: nil
  )

  if ARGV.first == 'mailer'
    options[:rails].merge!(template_engine: :erb)
  end
end

Настраивает генераторы для приложений только для API. В основном это скрывает всё, что обычно связано с браузером, например, генераторы активов и миграций сессий, и полностью отключает помощники и активы, чтобы генераторы, такие как scaffold, не создавали их.

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

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

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

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

Rails::Generators.fallbacks[:shoulda] = :test_unit
help(command = 'generate') Показать исходный код
# File railties/lib/rails/generators.rb, line 235
def self.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 196
def self.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}:mailer",
      "#{test}:model",
      "#{test}:scaffold",
      "#{test}:view",
      "#{test}:job",
      "#{template}:controller",
      "#{template}:scaffold",
      "#{template}:mailer",
      "#{css}:scaffold",
      "#{css}:assets",
      "css:assets",
      "css:scaffold"
    ]
  end
end

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

hide_namespace(*namespaces)
Псевдоним для: hide_namespaces
hide_namespaces(*namespaces) Показать исходный код
# File railties/lib/rails/generators.rb, line 228
def hide_namespaces(*namespaces)
  hidden_namespaces.concat(namespaces)
end
Также алиасирован как: hide_namespace
invoke(namespace, args=ARGV, config={}) Показать исходный код
# File railties/lib/rails/generators.rb, line 176
def self.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)
  else
    options     = sorted_groups.flat_map(&:last)
    suggestions = options.sort_by {|suggested| levenshtein_distance(namespace.to_s, suggested) }.first(3)
    msg =  "Could not find generator '#{namespace}'. "
    msg << "Maybe you meant #{ suggestions.map {|s| "'#{s}'"}.to_sentence(last_word_connector: " or ", locale: :en) }\n"
    msg << "Run `rails generate --help` for more options."
    puts msg
  end
end

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

no_color!() Показать исходный код
# File railties/lib/rails/generators.rb, line 126
def self.no_color!
  Thor::Base.shell = Thor::Shell::Basic
end

Удаляет цвет из вывода.

print_generators() Показать исходный код
# File railties/lib/rails/generators.rb, line 256
def self.print_generators
  sorted_groups.each { |b, n| print_list(b, n) }
end
public_namespaces() Показать исходный код
# File railties/lib/rails/generators.rb, line 251
def self.public_namespaces
  lookup!
  subclasses.map(&:namespace)
end
sorted_groups() Показать исходный код
# File railties/lib/rails/generators.rb, line 260
def self.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.sub(/^rails:/, '') }
  rails.delete("app")
  rails.delete("plugin")

  hidden_namespaces.each { |n| groups.delete(n.to_s) }

  [["rails", rails]] + groups.sort.to_a
end
subclasses() Показать исходный код
# File railties/lib/rails/generators.rb, line 131
def self.subclasses
  @subclasses ||= []
end

Отслеживает все подклассы генераторов.

Защищенные методы класса

levenshtein_distance(str1, str2) Показать исходный код
# File railties/lib/rails/generators.rb, line 284
def self.levenshtein_distance str1, str2
  s = str1
  t = str2
  n = s.length
  m = t.length

  return m if (0 == n)
  return n if (0 == m)

  d = (0..m).to_a
  x = nil

  # avoid duplicating an enumerable object in the loop
  str2_codepoint_enumerable = str2.each_codepoint

  str1.each_codepoint.with_index do |char1, i|
    e = i+1

    str2_codepoint_enumerable.with_index do |char2, j|
      cost = (char1 == char2) ? 0 : 1
      x = [
           d[j+1] + 1, # insertion
           e + 1,      # deletion
           d[j] + cost # substitution
          ].min
      d[j] = e
      e = x
    end

    d[m] = x
  end

  x
end

Этот код основан непосредственно на реализации Text gem. Авторские права © 2006-2013 Paul Battley, Michael Neumann, Tim Fletcher.

Возвращает значение, представляющее «стоимость» преобразования str1 в str2

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

Spec-Zone.ru

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