datacaster 2.0.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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