class ROM::SQL::Postgres::Types::ArrayTypes
@api private
Attributes
base_read_type[R]
base_write_type[R]
constructor[R]
elements[R]
Public Class Methods
new(base_write_type, base_read_type)
click to toggle source
# File lib/rom/sql/extensions/postgres/types/array_types.rb, line 19 def initialize(base_write_type, base_read_type) @elements = {} @base_write_type = base_write_type @base_read_type = base_read_type @constructor = proc { |db_type, member| if member -> arr { Sequel.pg_array(arr.map { |v| member[v] }, db_type) } else -> arr { Sequel.pg_array(arr, db_type) } end } end
Public Instance Methods
[](db_type, member_type = nil)
click to toggle source
# File lib/rom/sql/extensions/postgres/types/array_types.rb, line 32 def [](db_type, member_type = nil) elements.fetch(db_type) do name = "#{db_type}[]" write_type = build_write_type(db_type, member_type) read_type = build_read_type(db_type, member_type) array_type = Types.Type(name, write_type).meta(type: db_type, read: read_type) register_extension(array_type) elements[db_type] = array_type end end
Private Instance Methods
build_read_type(_db_type, member_type)
click to toggle source
# File lib/rom/sql/extensions/postgres/types/array_types.rb, line 57 def build_read_type(_db_type, member_type) if member_type && member_type.meta[:read] base_read_type.of(member_type.meta[:read]) else base_read_type end end
build_write_type(db_type, member_type)
click to toggle source
# File lib/rom/sql/extensions/postgres/types/array_types.rb, line 49 def build_write_type(db_type, member_type) if member_type base_write_type.constructor(constructor[db_type, member_type]) else base_write_type.constructor(constructor[db_type]) end end
register_extension(type)
click to toggle source
# File lib/rom/sql/extensions/postgres/types/array_types.rb, line 65 def register_extension(type) TypeExtensions.register(type) { include ArrayMethods } end