Spec-Zone.ru › Ruby on Rails 4.1

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

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

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

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

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

# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 40
def migration_keys
  [:name, :limit, :precision, :scale, :default, :null]
end
prepare_column_options(column, types) Показать исходный код

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

# File activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb, line 20
def prepare_column_options(column, types)
  spec = {}
  spec[:name]      = column.name.inspect

  # AR has an optimization which handles zero-scale decimals as integers. This
  # code ensures that the dumper still dumps the column as a decimal.
  spec[:type]      = if column.type == :integer && /^(numeric|decimal)/ =~ column.sql_type
                       'decimal'
                     else
                       column.type.to_s
                     end
  spec[:limit]     = column.limit.inspect if column.limit != types[column.type][:limit] && spec[:type] != 'decimal'
  spec[:precision] = column.precision.inspect if column.precision
  spec[:scale]     = column.scale.inspect if column.scale
  spec[:null]      = 'false' unless column.null
  spec[:default]   = default_string(column.default) if column.has_default?
  spec
end

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

Spec-Zone.ru

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