Sha256: d0015c6a8ac55b2a2cc5d4e4df3781d7e12adbfe7945269fcbb05fecaa0b944d
Contents?: true
Size: 1.52 KB
Versions: 3
Compression:
Stored size: 1.52 KB
Contents
require 'bigdecimal' require 'date' require 'set' require 'dry-container' require 'inflecto' require 'dry/data/version' require 'dry/data/container' require 'dry/data/type' require 'dry/data/struct' require 'dry/data/dsl' module Dry module Data class SchemaError < TypeError def initialize(key, value) super("#{value.inspect} (#{value.class}) has invalid type for :#{key}") end end class SchemaKeyError < KeyError def initialize(key) super(":#{key} is missing in Hash input") end end StructError = Class.new(TypeError) TYPE_SPEC_REGEX = %r[(.+)<(.+)>].freeze def self.container @container ||= Container.new end def self.register(name, type = nil, &block) container.register(name, type || block.call) end def self.register_class(klass) container.register( Inflecto.underscore(klass).gsub('/', '.'), Type.new(klass.method(:new), klass) ) end def self.[](name) type_map.fetch(name) do result = name.match(TYPE_SPEC_REGEX) type = if result type_id, member_id = result[1..2] container[type_id].member(self[member_id]) else container[name] end type_map[name] = type end end def self.type(*args, &block) dsl = DSL.new(container) block ? yield(dsl) : registry[args.first] end def self.type_map @type_map ||= {} end end end require 'dry/data/types' # load built-in types
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-data-0.2.1 | lib/dry/data.rb |
dry-data-0.2.0 | lib/dry/data.rb |
dry-data-0.1.0 | lib/dry/data.rb |