Class: SQLiteTypes::Array

Inherits:
ActiveRecord::Type::Json
  • Object
show all
Defined in:
lib/sqlite_types/array.rb

Constant Summary collapse

SUPPORTED_SUBTYPES =
%i[integer string hash datetime].freeze

Instance Method Summary collapse

Constructor Details

#initialize(subtype, nested: false) ⇒ Array

Returns a new instance of Array.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
# File 'lib/sqlite_types/array.rb', line 7

def initialize(subtype, nested: false)
  raise ArgumentError, "Unsupported subtype: #{subtype}" unless SUPPORTED_SUBTYPES.include?(subtype)

  @subtype = subtype
  @nested = nested
  super()
end

Instance Method Details

#deserialize(value) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sqlite_types/array.rb', line 15

def deserialize(value)
  return if value.nil?

  array = parse_to_array(value)

  if @nested
    array.map { |nested_array| parse_to_array(nested_array).map { |element| cast_element(element) } }
  else
    array.map { |element| cast_element(element) }
  end
end

#force_equality?(value) ⇒ Boolean

Use “=” instead of “IN” in WHERE clause, to match PostgreSQL arrays

Returns:

  • (Boolean)


34
35
36
# File 'lib/sqlite_types/array.rb', line 34

def force_equality?(value)
  value.is_a?(::Array)
end

#serialize(value) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
# File 'lib/sqlite_types/array.rb', line 27

def serialize(value)
  raise ArgumentError, "Invalid value: #{value}" if !valid?(value)

  super
end