Spec-Zone.ru › Ruby on Rails 5.0

модуль ActiveRecord::ConnectionAdapters::ColumnDumper

Цель данного модуля — перенести специфичные для адаптера определения столбцов в сам адаптер, вместо того, чтобы включать их в сам дампер схемы. Данный код представляет собой стандартный случай. Затем, мы можем переопределить, как определённые типы данных обрабатываются в дампере схемы на уровне адаптера, переопределяя данный код внутри адаптеров, специфичных для конкретной базы данных.

Публичные методы экземпляров

column_spec(column) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 9
def column_spec(column)
  spec = Hash[prepare_column_options(column).map { |k, v| [k, "#{k}: #{v}"] }]
  spec[:name] = column.name.inspect
  spec[:type] = schema_type(column).to_s
  spec
end
column_spec_for_primary_key(column) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 16
def column_spec_for_primary_key(column)
  return {} if default_primary_key?(column)
  spec = { id: schema_type(column).inspect }
  spec.merge!(prepare_column_options(column).except!(:null))
end
migration_keys() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 55
def migration_keys
  [:name, :limit, :precision, :scale, :default, :null, :collation, :comment]
end

Перечисляет допустимые параметры миграции

prepare_column_options(column) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 25
def prepare_column_options(column)
  spec = {}

  if limit = schema_limit(column)
    spec[:limit] = limit
  end

  if precision = schema_precision(column)
    spec[:precision] = precision
  end

  if scale = schema_scale(column)
    spec[:scale] = scale
  end

  default = schema_default(column) if column.has_default?
  spec[:default]   = default unless default.nil?

  spec[:null] = 'false' unless column.null

  if collation = schema_collation(column)
    spec[:collation] = collation
  end

  spec[:comment] = column.comment.inspect if column.comment.present?

  spec
end

Это можно переопределить на уровне адаптера, чтобы поддерживать другие расширенные типы данных (например, добавление параметра массива в PostgreSQL::ColumnDumper)

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

Spec-Zone.ru

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