class Dry::Types::Hash
@api public
Hash types can be used to define maps and schemas
def build_keys(type_map)
- 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
- Api: - private
def constructor_type ::Dry::Types::Hash::Constructor end
def key_name(key)
- 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)
- 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)
- 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)
- 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)
- 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?
- Api: - public
Returns:
-
(Boolean)
-
def transform_types? !options[:type_transform_fn].nil? end
def weak(*)
- 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)
- 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