123456789_123456789_123456789_123456789_123456789_

Class: ActiveModel::Type::String

Overview

Active Model String Type

::ActiveModel::Attribute type for strings. It is registered under the :string key.

This class is a specialization of ImmutableString. It performs coercion in the same way, and can be configured in the same way. However, it accounts for mutable strings, so dirty tracking can properly check if a string has changed.

Class Method Summary

ImmutableString - Inherited

Value - Inherited

.new

Initializes a type with three basic configuration settings: precision, limit, and scale.

Instance Attribute Summary

Value - Inherited

#limit, #precision, #scale,
#binary?

These predicates are not documented, as I need to look further into their use, and see if they can be removed entirely.

#mutable?, #serialized?

Instance Method Summary

ImmutableString - Inherited

Value - Inherited

#==, #as_json, #assert_valid_value,
#cast

::ActiveModel::Type casts a value from user input (e.g. from a setter).

#changed?

Determines whether a value has changed for dirty checking.

#changed_in_place?

Determines whether the mutable value has been modified since it was read.

#deserialize

Converts a value from database input to the appropriate ruby type.

#eql?

Alias for Value#==.

#hash,
#serializable?

Returns true if this type can convert value to a type that is usable by the database.

#serialize

Casts a value from the ruby type to a type that the database knows how to understand.

#type

Returns the unique type name as a ::Symbol.

#cast_value

Convenience method for types which do not need separate type casting behavior for user and database inputs.

#force_equality?, #map,
#type_cast_for_schema

::ActiveModel::Type casts a value for schema dumping.

#value_constructed_by_mass_assignment?

SerializeCastValue - Included

Constructor Details

This class inherits a constructor from ActiveModel::Type::ImmutableString

Instance Method Details

#cast_value(value) (private)

[ GitHub ]

  
# File 'activemodel/lib/active_model/type/string.rb', line 33

def cast_value(value)
  case value
  when ::String then ::String.new(value)
  when true then @true
  when false then @false
  else value.to_s
  end
end

#changed_in_place?(raw_old_value, new_value) ⇒ Boolean

[ GitHub ]

  
# File 'activemodel/lib/active_model/type/string.rb', line 16

def changed_in_place?(raw_old_value, new_value)
  if new_value.is_a?(::String)
    raw_old_value != new_value
  end
end

#to_immutable_string

[ GitHub ]

  
# File 'activemodel/lib/active_model/type/string.rb', line 22

def to_immutable_string
  ImmutableString.new(
    true: @true,
    false: @false,
    limit: limit,
    precision: precision,
    scale: scale,
  )
end