Spec-Zone.ru › Ruby on Rails 4.2

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

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

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

column_spec(column, types) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 9
def column_spec(column, types)
  spec = prepare_column_options(column, types)
  (spec.keys - [:name, :type]).each{ |k| spec[k].insert(0, "#{k}: ")}
  spec
end
migration_keys() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 36
def migration_keys
  [:name, :limit, :precision, :scale, :default, :null]
end

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

prepare_column_options(column, types) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 18
def prepare_column_options(column, types)
  spec = {}
  spec[:name]      = column.name.inspect
  spec[:type]      = column.type.to_s
  spec[:null]      = 'false' unless column.null

  limit = column.limit || types[column.type][:limit]
  spec[:limit]     = limit.inspect if limit
  spec[:precision] = column.precision.inspect if column.precision
  spec[:scale]     = column.scale.inspect if column.scale

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

  spec
end

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

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

Spec-Zone.ru

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