class Dry::Types::Hash

@api public
Hash types can be used to define maps and schemas

def build_keys(type_map)

Other tags:
    Api: - private
def build_keys(type_map)
  type_fn = options.fetch(:type_transform_fn, Schema::NO_TRANSFORM)
  type_transform = ::Dry::Types::FnContainer[type_fn]
  type_map.map do |map_key, type|
    name, options = key_name(map_key)
    key = Schema::Key.new(resolve_type(type), name, **options)
    type_transform.(key)
  end
end

def constructor_type

Other tags:
    Api: - private
def constructor_type
  ::Dry::Types::Hash::Constructor
end

def key_name(key)

Other tags:
    Api: - private
def key_name(key)
  if key.to_s.end_with?("?")
    [key.to_s.chop.to_sym, NOT_REQUIRED]
  else
    [key, EMPTY_HASH]
  end
end

def map(key_type, value_type)

Other tags:
    Api: - public

Returns:
  • (Map) -

Parameters:
  • value_type (Type) --
  • key_type (Type) --
def map(key_type, value_type)
  Map.new(
    primitive,
    key_type: resolve_type(key_type),
    value_type: resolve_type(value_type),
    meta: meta
  )
end

def resolve_type(type)

Other tags:
    Api: - private
def resolve_type(type)
  case type
  when Type then type
  when ::Class, ::String then Types[type]
  else type # rubocop:disable Lint/DuplicateBranch
  end
end

def schema(keys_or_map, meta = EMPTY_HASH)

Other tags:
    Api: - public

Returns:
  • (Dry::Types::Schema) -
  • (Dry::Types::Schema) -

Parameters:
  • meta (Hash) --
  • key (Array) -- List of schema keys
  • meta (Hash) --
  • type_map ({Symbol => Dry::Types::Nominal}) --

Overloads:
  • schema(keys)
  • schema(type_map, meta = EMPTY_HASH)
def schema(keys_or_map, meta = EMPTY_HASH)
  if keys_or_map.is_a?(::Array)
    keys = keys_or_map
  else
    keys = build_keys(keys_or_map)
  end
  Schema.new(primitive, keys: keys, **options, meta: self.meta.merge(meta))
end

def to_ast(meta: true)

Other tags:
    Api: - public

Returns:
  • (Array) - An AST representation

Parameters:
  • meta (Boolean) -- Whether to dump the meta to the AST
def to_ast(meta: true)
  [:hash,
   [options.slice(:type_transform_fn),
    meta ? self.meta : EMPTY_HASH]]
end

def transform_types?

Other tags:
    Api: - public

Returns:
  • (Boolean) -
def transform_types?
  !options[:type_transform_fn].nil?
end

def weak(*)

Other tags:
    Api: - private
def weak(*)
  raise "Support for old hash schemas was removed, please refer to the CHANGELOG " \
        "on how to proceed with the new API https://github.com/dry-rb/dry-types/blob/main/CHANGELOG.md"
end

def with_type_transform(proc = nil, &block)

Other tags:
    Api: - public

Returns:
  • (Hash) -

Parameters:
  • block (#call, nil) --
  • proc (#call, nil) --
def with_type_transform(proc = nil, &block)
  fn = proc || block
  raise ::ArgumentError, "a block or callable argument is required" if fn.nil?
  handle = ::Dry::Types::FnContainer.register(fn)
  with(type_transform_fn: handle)
end