datacaster 2.0.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +518 -268
- data/config/locales/en.yml +24 -0
- data/datacaster.gemspec +2 -0
- data/lib/datacaster/absent.rb +4 -0
- data/lib/datacaster/and_node.rb +3 -5
- data/lib/datacaster/and_with_error_aggregation_node.rb +5 -6
- data/lib/datacaster/array_schema.rb +18 -16
- data/lib/datacaster/base.rb +33 -44
- data/lib/datacaster/caster.rb +4 -8
- data/lib/datacaster/checker.rb +8 -10
- data/lib/datacaster/comparator.rb +9 -9
- data/lib/datacaster/config.rb +28 -0
- data/lib/datacaster/context_node.rb +43 -0
- data/lib/datacaster/context_nodes/errors_caster.rb +21 -0
- data/lib/datacaster/context_nodes/i18n.rb +20 -0
- data/lib/datacaster/context_nodes/i18n_keys_mapper.rb +27 -0
- data/lib/datacaster/context_nodes/structure_cleaner.rb +103 -0
- data/lib/datacaster/context_nodes/user_context.rb +20 -0
- data/lib/datacaster/definition_dsl.rb +37 -0
- data/lib/datacaster/hash_mapper.rb +13 -16
- data/lib/datacaster/hash_schema.rb +14 -15
- data/lib/datacaster/i18n_values/base.rb +87 -0
- data/lib/datacaster/i18n_values/key.rb +34 -0
- data/lib/datacaster/i18n_values/scope.rb +28 -0
- data/lib/datacaster/message_keys_merger.rb +8 -15
- data/lib/datacaster/or_node.rb +3 -4
- data/lib/datacaster/predefined.rb +119 -64
- data/lib/datacaster/result.rb +35 -14
- data/lib/datacaster/runtimes/base.rb +47 -0
- data/lib/datacaster/runtimes/i18n.rb +20 -0
- data/lib/datacaster/runtimes/structure_cleaner.rb +47 -0
- data/lib/datacaster/runtimes/user_context.rb +39 -0
- data/lib/datacaster/substitute_i18n.rb +48 -0
- data/lib/datacaster/then_node.rb +7 -8
- data/lib/datacaster/transformer.rb +4 -8
- data/lib/datacaster/trier.rb +9 -11
- data/lib/datacaster/validator.rb +8 -9
- data/lib/datacaster/version.rb +1 -1
- data/lib/datacaster.rb +15 -35
- metadata +57 -9
- data/lib/datacaster/definition_context.rb +0 -20
- data/lib/datacaster/terminator.rb +0 -98
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
require 'dry-monads'
|
3
|
-
|
4
|
-
module Datacaster
|
5
|
-
class Terminator
|
6
|
-
module TerminatorBase
|
7
|
-
include Dry::Monads[:result]
|
8
|
-
|
9
|
-
def self.included(klass)
|
10
|
-
klass.include Singleton
|
11
|
-
end
|
12
|
-
|
13
|
-
def cast(object, checked_schema = nil)
|
14
|
-
object = super(object)
|
15
|
-
checked_schema ||= object.meta[:checked_schema]
|
16
|
-
|
17
|
-
case object.value
|
18
|
-
when Array
|
19
|
-
check_array(object.value, checked_schema)
|
20
|
-
when Hash
|
21
|
-
check_hash(object.value, checked_schema)
|
22
|
-
else
|
23
|
-
Datacaster.ValidResult(object.value)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def inspect
|
28
|
-
"#<Datacaster::Terminator>"
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def check_array(array, checked_schema)
|
34
|
-
return Datacaster.ValidResult(array) unless checked_schema
|
35
|
-
|
36
|
-
result = array.zip(checked_schema).map { |x, schema| cast(x, schema) }
|
37
|
-
|
38
|
-
if result.all?(&:valid?)
|
39
|
-
Datacaster.ValidResult(result.map(&:value))
|
40
|
-
else
|
41
|
-
Datacaster.ErrorResult(result.each.with_index.reject { |x, _| x.valid? }.map { |x, i| [i, x.errors] }.to_h)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def check_hash(hash, checked_schema)
|
46
|
-
return Datacaster.ValidResult(hash) unless checked_schema
|
47
|
-
|
48
|
-
errors = {}
|
49
|
-
result = {}
|
50
|
-
|
51
|
-
hash.each do |(k, v)|
|
52
|
-
if v == Datacaster.absent
|
53
|
-
next
|
54
|
-
end
|
55
|
-
|
56
|
-
unless checked_schema.key?(k)
|
57
|
-
errors[k] = ["must be absent"] if is_a?(Raising)
|
58
|
-
next
|
59
|
-
end
|
60
|
-
|
61
|
-
if checked_schema[k] == true
|
62
|
-
result[k] = v
|
63
|
-
next
|
64
|
-
end
|
65
|
-
|
66
|
-
nested_value = cast(v, checked_schema[k])
|
67
|
-
if nested_value.valid?
|
68
|
-
result[k] = nested_value.value
|
69
|
-
else
|
70
|
-
errors[k] = nested_value.errors
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
if errors.empty?
|
75
|
-
Datacaster.ValidResult(result)
|
76
|
-
else
|
77
|
-
Datacaster.ErrorResult(errors)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class Raising < Base
|
83
|
-
include TerminatorBase
|
84
|
-
|
85
|
-
def inspect
|
86
|
-
"#<Datacaster::Terminator::Raising>"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
class Sweeping < Base
|
91
|
-
include TerminatorBase
|
92
|
-
|
93
|
-
def inspect
|
94
|
-
"#<Datacaster::Terminator::Sweeping>"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|