datacaster 2.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +604 -287
- data/config/locales/en.yml +25 -0
- data/datacaster.gemspec +3 -1
- 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/pass_if.rb +11 -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 +36 -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 +150 -65
- data/lib/datacaster/result.rb +39 -18
- 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/switch_node.rb +72 -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 +60 -10
- data/lib/datacaster/definition_context.rb +0 -20
- data/lib/datacaster/terminator.rb +0 -98
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datacaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Zolotarev
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: i18n
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.14'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.14'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: dry-monads
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,7 +76,7 @@ dependencies:
|
|
62
76
|
- - "<"
|
63
77
|
- !ruby/object:Gem::Version
|
64
78
|
version: '1.4'
|
65
|
-
type: :
|
79
|
+
type: :development
|
66
80
|
prerelease: false
|
67
81
|
version_requirements: !ruby/object:Gem::Requirement
|
68
82
|
requirements:
|
@@ -72,7 +86,27 @@ dependencies:
|
|
72
86
|
- - "<"
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: '1.4'
|
75
|
-
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: zeitwerk
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '2'
|
96
|
+
- - "<"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '3'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '2'
|
106
|
+
- - "<"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '3'
|
109
|
+
description:
|
76
110
|
email:
|
77
111
|
- eugzol@gmail.com
|
78
112
|
executables: []
|
@@ -90,6 +124,7 @@ files:
|
|
90
124
|
- Rakefile
|
91
125
|
- bin/console
|
92
126
|
- bin/setup
|
127
|
+
- config/locales/en.yml
|
93
128
|
- datacaster.gemspec
|
94
129
|
- lib/datacaster.rb
|
95
130
|
- lib/datacaster/absent.rb
|
@@ -101,14 +136,29 @@ files:
|
|
101
136
|
- lib/datacaster/checker.rb
|
102
137
|
- lib/datacaster/comparator.rb
|
103
138
|
- lib/datacaster/config.rb
|
104
|
-
- lib/datacaster/
|
139
|
+
- lib/datacaster/context_node.rb
|
140
|
+
- lib/datacaster/context_nodes/errors_caster.rb
|
141
|
+
- lib/datacaster/context_nodes/i18n.rb
|
142
|
+
- lib/datacaster/context_nodes/i18n_keys_mapper.rb
|
143
|
+
- lib/datacaster/context_nodes/pass_if.rb
|
144
|
+
- lib/datacaster/context_nodes/structure_cleaner.rb
|
145
|
+
- lib/datacaster/context_nodes/user_context.rb
|
146
|
+
- lib/datacaster/definition_dsl.rb
|
105
147
|
- lib/datacaster/hash_mapper.rb
|
106
148
|
- lib/datacaster/hash_schema.rb
|
149
|
+
- lib/datacaster/i18n_values/base.rb
|
150
|
+
- lib/datacaster/i18n_values/key.rb
|
151
|
+
- lib/datacaster/i18n_values/scope.rb
|
107
152
|
- lib/datacaster/message_keys_merger.rb
|
108
153
|
- lib/datacaster/or_node.rb
|
109
154
|
- lib/datacaster/predefined.rb
|
110
155
|
- lib/datacaster/result.rb
|
111
|
-
- lib/datacaster/
|
156
|
+
- lib/datacaster/runtimes/base.rb
|
157
|
+
- lib/datacaster/runtimes/i18n.rb
|
158
|
+
- lib/datacaster/runtimes/structure_cleaner.rb
|
159
|
+
- lib/datacaster/runtimes/user_context.rb
|
160
|
+
- lib/datacaster/substitute_i18n.rb
|
161
|
+
- lib/datacaster/switch_node.rb
|
112
162
|
- lib/datacaster/then_node.rb
|
113
163
|
- lib/datacaster/transformer.rb
|
114
164
|
- lib/datacaster/trier.rb
|
@@ -119,7 +169,7 @@ licenses:
|
|
119
169
|
- MIT
|
120
170
|
metadata:
|
121
171
|
source_code_uri: https://github.com/EugZol/datacaster
|
122
|
-
post_install_message:
|
172
|
+
post_install_message:
|
123
173
|
rdoc_options: []
|
124
174
|
require_paths:
|
125
175
|
- lib
|
@@ -134,8 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
184
|
- !ruby/object:Gem::Version
|
135
185
|
version: '0'
|
136
186
|
requirements: []
|
137
|
-
rubygems_version: 3.4.
|
138
|
-
signing_key:
|
187
|
+
rubygems_version: 3.4.6
|
188
|
+
signing_key:
|
139
189
|
specification_version: 4
|
140
190
|
summary: Run-time type checker and transformer for Ruby
|
141
191
|
test_files: []
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'bigdecimal'
|
2
|
-
require 'date'
|
3
|
-
|
4
|
-
module Datacaster
|
5
|
-
class DefinitionContext
|
6
|
-
include Datacaster::Predefined
|
7
|
-
include Dry::Monads[:result]
|
8
|
-
|
9
|
-
attr_accessor :context
|
10
|
-
|
11
|
-
def m(_definition)
|
12
|
-
raise "not implemented"
|
13
|
-
end
|
14
|
-
|
15
|
-
def method_missing(m, *args)
|
16
|
-
arg_string = args.empty? ? "" : "(#{args.map(&:inspect).join(', ')})"
|
17
|
-
raise "Datacaster: unknown definition '#{m}#{arg_string}'"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -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
|