Module: ROM::SQL::Attribute::TypeExtensions

Defined in:
lib/rom/sql/attribute.rb

Overview

Type-specific methods

Class Method Summary collapse

Class Method Details

.[](type) ⇒ Hash

Gets extensions for a type

Parameters:

  • type (Dry::Types::Type)

Returns:

  • (Hash)


31
32
33
34
# File 'lib/rom/sql/attribute.rb', line 31

def [](type)
  unwrapped = type.optional? ? type.right : type
  @types[unwrapped.pristine] || EMPTY_HASH
end

.register(type, &block) ⇒ Object

Registers a set of operations supported for a specific type

Examples:

ROM::SQL::Attribute::TypeExtensions.register(ROM::SQL::Types::PG::JSONB) do
  def contain(type, expr, keys)
    Attribute[Types::Bool].meta(sql_expr: expr.pg_jsonb.contains(value))
  end
end

Parameters:

  • type (Dry::Types::Type)

    Type

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
# File 'lib/rom/sql/attribute.rb', line 48

def register(type, &block)
  raise ArgumentError, "Type #{ type } already registered" if @types.key?(type)
  mod = Module.new(&block)
  ctx = Object.new.extend(mod)
  functions = mod.public_instance_methods.each_with_object({}) { |m, ms| ms[m] = ctx.method(m) }
  @types[type] = functions
end