Module: Dry::Data
- Defined in:
- lib/dry/data.rb,
lib/dry/data/dsl.rb,
lib/dry/data/type.rb,
lib/dry/data/types.rb,
lib/dry/data/struct.rb,
lib/dry/data/version.rb,
lib/dry/data/compiler.rb,
lib/dry/data/sum_type.rb,
lib/dry/data/container.rb,
lib/dry/data/type/hash.rb,
lib/dry/data/type/array.rb,
lib/dry/data/types/form.rb,
lib/dry/data/type/optional.rb,
lib/dry/data/coercions/form.rb
Defined Under Namespace
Modules: Coercions
Classes: Compiler, Container, DSL, SchemaError, SchemaKeyError, Struct, SumType, Type
Constant Summary
collapse
- StructError =
Class.new(TypeError)
- TYPE_SPEC_REGEX =
%r[(.+)<(.+)>].freeze
- COERCIBLE =
{
string: String,
int: Integer,
float: Float,
decimal: BigDecimal,
array: Array,
hash: Hash
}.freeze
- NON_COERCIBLE =
{
nil: NilClass,
true: TrueClass,
false: FalseClass,
date: Date,
date_time: DateTime,
time: Time
}.freeze
- ALL_PRIMITIVES =
COERCIBLE.merge(NON_COERCIBLE).freeze
- VERSION =
'0.2.1'.freeze
Class Method Summary
collapse
Class Method Details
.[](name) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/dry/data.rb', line 47
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
|
.container ⇒ Object
32
33
34
|
# File 'lib/dry/data.rb', line 32
def self.container
@container ||= Container.new
end
|
.register(name, type = nil, &block) ⇒ Object
36
37
38
|
# File 'lib/dry/data.rb', line 36
def self.register(name, type = nil, &block)
container.register(name, type || block.call)
end
|
.register_class(klass) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/dry/data.rb', line 40
def self.register_class(klass)
container.register(
Inflecto.underscore(klass).gsub('/', '.'),
Type.new(klass.method(:new), klass)
)
end
|
.SumType(left, right) ⇒ Object
5
6
7
8
9
10
11
12
13
|
# File 'lib/dry/data/sum_type.rb', line 5
def self.SumType(left, right)
klass =
if left.is_a?(Type::Optional)
SumType::Optional
else
SumType
end
klass.new(left, right)
end
|
.type(*args, &block) ⇒ Object
63
64
65
66
|
# File 'lib/dry/data.rb', line 63
def self.type(*args, &block)
dsl = DSL.new(container)
block ? yield(dsl) : registry[args.first]
end
|
.type_map ⇒ Object
68
69
70
|
# File 'lib/dry/data.rb', line 68
def self.type_map
@type_map ||= {}
end
|