datacaster 2.0.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +604 -287
  3. data/config/locales/en.yml +25 -0
  4. data/datacaster.gemspec +3 -1
  5. data/lib/datacaster/absent.rb +4 -0
  6. data/lib/datacaster/and_node.rb +3 -5
  7. data/lib/datacaster/and_with_error_aggregation_node.rb +5 -6
  8. data/lib/datacaster/array_schema.rb +18 -16
  9. data/lib/datacaster/base.rb +33 -44
  10. data/lib/datacaster/caster.rb +4 -8
  11. data/lib/datacaster/checker.rb +8 -10
  12. data/lib/datacaster/comparator.rb +9 -9
  13. data/lib/datacaster/config.rb +28 -0
  14. data/lib/datacaster/context_node.rb +43 -0
  15. data/lib/datacaster/context_nodes/errors_caster.rb +21 -0
  16. data/lib/datacaster/context_nodes/i18n.rb +20 -0
  17. data/lib/datacaster/context_nodes/i18n_keys_mapper.rb +27 -0
  18. data/lib/datacaster/context_nodes/pass_if.rb +11 -0
  19. data/lib/datacaster/context_nodes/structure_cleaner.rb +103 -0
  20. data/lib/datacaster/context_nodes/user_context.rb +20 -0
  21. data/lib/datacaster/definition_dsl.rb +36 -0
  22. data/lib/datacaster/hash_mapper.rb +13 -16
  23. data/lib/datacaster/hash_schema.rb +14 -15
  24. data/lib/datacaster/i18n_values/base.rb +87 -0
  25. data/lib/datacaster/i18n_values/key.rb +34 -0
  26. data/lib/datacaster/i18n_values/scope.rb +28 -0
  27. data/lib/datacaster/message_keys_merger.rb +8 -15
  28. data/lib/datacaster/or_node.rb +3 -4
  29. data/lib/datacaster/predefined.rb +150 -65
  30. data/lib/datacaster/result.rb +39 -18
  31. data/lib/datacaster/runtimes/base.rb +47 -0
  32. data/lib/datacaster/runtimes/i18n.rb +20 -0
  33. data/lib/datacaster/runtimes/structure_cleaner.rb +47 -0
  34. data/lib/datacaster/runtimes/user_context.rb +39 -0
  35. data/lib/datacaster/substitute_i18n.rb +48 -0
  36. data/lib/datacaster/switch_node.rb +72 -0
  37. data/lib/datacaster/then_node.rb +7 -8
  38. data/lib/datacaster/transformer.rb +4 -8
  39. data/lib/datacaster/trier.rb +9 -11
  40. data/lib/datacaster/validator.rb +8 -9
  41. data/lib/datacaster/version.rb +1 -1
  42. data/lib/datacaster.rb +15 -35
  43. metadata +60 -10
  44. data/lib/datacaster/definition_context.rb +0 -20
  45. 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: 2.0.2
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-03-02 00:00:00.000000000 Z
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: :runtime
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
- description:
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/definition_context.rb
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/terminator.rb
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.1
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