Class: ActiveRecord::ConnectionAdapters::Materialize::OID::Array
- Inherits:
-
Type::Value
- Object
- Type::Value
- ActiveRecord::ConnectionAdapters::Materialize::OID::Array
- Includes:
- ActiveModel::Type::Helpers::Mutable
- Defined in:
- lib/active_record/connection_adapters/materialize/oid/array.rb
Overview
:nodoc:
Defined Under Namespace
Classes: Data
Instance Attribute Summary collapse
-
#delimiter ⇒ Object
readonly
Returns the value of attribute delimiter.
-
#subtype ⇒ Object
readonly
Returns the value of attribute subtype.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #cast(value) ⇒ Object
- #changed_in_place?(raw_old_value, new_value) ⇒ Boolean
- #deserialize(value) ⇒ Object
- #force_equality?(value) ⇒ Boolean
-
#initialize(subtype, delimiter = ",") ⇒ Array
constructor
A new instance of Array.
- #map(value, &block) ⇒ Object
- #serialize(value) ⇒ Object
- #type_cast_for_schema(value) ⇒ Object
Constructor Details
#initialize(subtype, delimiter = ",") ⇒ Array
Returns a new instance of Array.
15 16 17 18 19 20 21 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 15 def initialize(subtype, delimiter = ",") @subtype = subtype @delimiter = delimiter @pg_encoder = PG::TextEncoder::Array.new name: "#{type}[]", delimiter: delimiter @pg_decoder = PG::TextDecoder::Array.new name: "#{type}[]", delimiter: delimiter end |
Instance Attribute Details
#delimiter ⇒ Object (readonly)
Returns the value of attribute delimiter.
12 13 14 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 12 def delimiter @delimiter end |
#subtype ⇒ Object (readonly)
Returns the value of attribute subtype.
12 13 14 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 12 def subtype @subtype end |
Instance Method Details
#==(other) ⇒ Object
56 57 58 59 60 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 56 def ==(other) other.is_a?(Array) && subtype == other.subtype && delimiter == other.delimiter end |
#cast(value) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 34 def cast(value) if value.is_a?(::String) value = begin @pg_decoder.decode(value) rescue TypeError # malformed array string is treated as [], will raise in PG 2.0 gem # this keeps a consistent implementation [] end end type_cast_array(value, :cast) end |
#changed_in_place?(raw_old_value, new_value) ⇒ Boolean
71 72 73 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 71 def changed_in_place?(raw_old_value, new_value) deserialize(raw_old_value) != new_value end |
#deserialize(value) ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 23 def deserialize(value) case value when ::String type_cast_array(@pg_decoder.decode(value), :deserialize) when Data type_cast_array(value.values, :deserialize) else super end end |
#force_equality?(value) ⇒ Boolean
75 76 77 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 75 def force_equality?(value) value.is_a?(::Array) end |
#map(value, &block) ⇒ Object
67 68 69 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 67 def map(value, &block) value.map(&block) end |
#serialize(value) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 47 def serialize(value) if value.is_a?(::Array) casted_values = type_cast_array(value, :serialize) Data.new(@pg_encoder, casted_values) else super end end |
#type_cast_for_schema(value) ⇒ Object
62 63 64 65 |
# File 'lib/active_record/connection_adapters/materialize/oid/array.rb', line 62 def type_cast_for_schema(value) return super unless value.is_a?(::Array) "[" + value.map { |v| subtype.type_cast_for_schema(v) }.join(", ") + "]" end |