datacaster 2.0.2 → 3.0.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +518 -268
  3. data/config/locales/en.yml +24 -0
  4. data/datacaster.gemspec +2 -0
  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/structure_cleaner.rb +103 -0
  19. data/lib/datacaster/context_nodes/user_context.rb +20 -0
  20. data/lib/datacaster/definition_dsl.rb +37 -0
  21. data/lib/datacaster/hash_mapper.rb +13 -16
  22. data/lib/datacaster/hash_schema.rb +14 -15
  23. data/lib/datacaster/i18n_values/base.rb +87 -0
  24. data/lib/datacaster/i18n_values/key.rb +34 -0
  25. data/lib/datacaster/i18n_values/scope.rb +28 -0
  26. data/lib/datacaster/message_keys_merger.rb +8 -15
  27. data/lib/datacaster/or_node.rb +3 -4
  28. data/lib/datacaster/predefined.rb +119 -64
  29. data/lib/datacaster/result.rb +35 -14
  30. data/lib/datacaster/runtimes/base.rb +47 -0
  31. data/lib/datacaster/runtimes/i18n.rb +20 -0
  32. data/lib/datacaster/runtimes/structure_cleaner.rb +47 -0
  33. data/lib/datacaster/runtimes/user_context.rb +39 -0
  34. data/lib/datacaster/substitute_i18n.rb +48 -0
  35. data/lib/datacaster/then_node.rb +7 -8
  36. data/lib/datacaster/transformer.rb +4 -8
  37. data/lib/datacaster/trier.rb +9 -11
  38. data/lib/datacaster/validator.rb +8 -9
  39. data/lib/datacaster/version.rb +1 -1
  40. data/lib/datacaster.rb +15 -35
  41. metadata +57 -9
  42. data/lib/datacaster/definition_context.rb +0 -20
  43. 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