Spec-Zone.ru › Ruby on Rails 8.1

class ActiveRecord::Type::Value

Родительский класс:
Object
Подключенные модули:
ActiveModel::Type::SerializeCastValue

Тип значения Active Model

Базовый класс для всех типов атрибутов. Этот класс также служит типом по умолчанию для атрибутов, для которых тип не указан.

Атрибуты

limit [R]
precision [R]
scale [R]

Открытые методы класса

new (precision: nil, limit: nil, scale: nil) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 17
def initialize(precision: nil, limit: nil, scale: nil)
  super()
  @precision = precision
  @scale = scale
  @limit = limit
end

Инициализирует тип с тремя основными параметрами конфигурации: precision, limit и scale. Базовый класс Value не определяет поведение для этих параметров. Они используются только для сравнения на равенство и формирования ключа хеша.

Вызывает метод суперкласса

Открытые методы экземпляра

== (other) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 121
def ==(other)
  self.class == other.class &&
    precision == other.precision &&
    scale == other.scale &&
    limit == other.limit
end
Также имеет псевдоним: eql?
as_json (*) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 144
def as_json(*)
  raise NoMethodError
end
assert_valid_value (_) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 133
def assert_valid_value(_)
end
cast (value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 57
def cast(value)
  cast_value(value) unless value.nil?
end

Type приводит значение из пользовательского ввода к нужному типу (например, из сеттера). Это значение может быть строкой из построителя формы или объектом Ruby, переданным в сеттер. В настоящее время невозможно определить, из какого источника оно поступило.

Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. См. также: Value#cast_value.

value Исходное значение, переданное сеттеру атрибута.

changed? (old_value, new_value, _new_value_before_type_cast) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 84
def changed?(old_value, new_value, _new_value_before_type_cast)
  old_value != new_value
end

Определяет, изменилось ли значение при проверке изменений. old_value и new_value всегда будут приведены к типу. Типам не требуется переопределять этот метод.

changed_in_place? (raw_old_value, new_value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 105
def changed_in_place?(raw_old_value, new_value)
  false
end

Определяет, было ли изменено изменяемое значение с момента его чтения. По умолчанию возвращает false. Если ваш тип возвращает объект, который можно изменить, следует переопределить этот метод. Необходимо выполнить одно из следующих действий:

  • передать new_value в Value#serialize и сравнить результат с raw_old_value

или

  • передать raw_old_value в Value#deserialize и сравнить результат с new_value

raw_old_value Исходное значение до передачи в deserialize.

new_value Текущее значение после приведения к типу.

deserialize (value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 43
def deserialize(value)
  cast(value)
end

Преобразует значение, полученное из базы данных, в соответствующий тип Ruby. Значение, возвращаемое этим методом, будет возвращено из ActiveRecord::AttributeMethods::Read#read_attribute. Реализация по умолчанию просто вызывает Value#cast.

value Исходное значение, полученное из базы данных.

eql? (other)
Псевдоним для: ==
hash () Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 129
def hash
  [self.class, precision, scale, limit].hash
end
serializable? (value, &) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 28
def serializable?(value, &)
  true
end

Возвращает true, если этот тип может преобразовать value в тип, пригодный для использования базой данных. Например, логический тип может вернуть true, если параметр value является логическим значением Ruby, но может вернуть false, если параметр value — какой-либо другой объект.

serialize (value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 65
def serialize(value)
  value
end

Преобразует значение из типа Ruby в тип, понятный базе данных. Метод должен возвращать значение типа String, Numeric, Date, Time, Symbol, true, false или nil.

type () Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 34
def type
end

Возвращает уникальное имя типа в виде Symbol. Подклассам следует переопределить этот метод.

Закрытые методы экземпляра

cast_value (value) Показать исходный код
# File activemodel/lib/active_model/type/value.rb, line 152
def cast_value(value) # :doc:
  value
end

Вспомогательный метод для типов, которым не требуется отдельное поведение приведения к типу для пользовательского ввода и ввода из базы данных. Вызывается методом Value#cast для значений, кроме nil.

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

Spec-Zone.ru

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