lite-validation 0.0.1

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 (138) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +94 -0
  3. data/Gemfile +18 -0
  4. data/README.md +770 -0
  5. data/bench/calibrational.rb +89 -0
  6. data/bench/comparative.rb +197 -0
  7. data/bench/functional.rb +107 -0
  8. data/bench/profile.rb +45 -0
  9. data/lib/lite/validation/adapters/interfaces/dry.rb +29 -0
  10. data/lib/lite/validation/error.rb +9 -0
  11. data/lib/lite/validation/result/abstract/disputable.rb +17 -0
  12. data/lib/lite/validation/result/abstract/failure.rb +19 -0
  13. data/lib/lite/validation/result/abstract/refutable.rb +21 -0
  14. data/lib/lite/validation/result/abstract/success.rb +25 -0
  15. data/lib/lite/validation/result/abstract.rb +16 -0
  16. data/lib/lite/validation/structured_error/record.rb +36 -0
  17. data/lib/lite/validation/structured_error.rb +23 -0
  18. data/lib/lite/validation/validator/adapters/errors/default.rb +24 -0
  19. data/lib/lite/validation/validator/adapters/interfaces/default.rb +32 -0
  20. data/lib/lite/validation/validator/adapters/interfaces/dry.rb +17 -0
  21. data/lib/lite/validation/validator/adapters/predicates/dry/adapter.rb +50 -0
  22. data/lib/lite/validation/validator/adapters/predicates/dry/builder.rb +46 -0
  23. data/lib/lite/validation/validator/adapters/predicates/dry/engine.rb +32 -0
  24. data/lib/lite/validation/validator/adapters/predicates/dry.rb +3 -0
  25. data/lib/lite/validation/validator/coordinator/builder.rb +92 -0
  26. data/lib/lite/validation/validator/coordinator/default.rb +32 -0
  27. data/lib/lite/validation/validator/coordinator/errors/builder.rb +56 -0
  28. data/lib/lite/validation/validator/coordinator/errors/dry.rb +29 -0
  29. data/lib/lite/validation/validator/coordinator/errors/flat.rb +46 -0
  30. data/lib/lite/validation/validator/coordinator/errors/hierarchical.rb +29 -0
  31. data/lib/lite/validation/validator/coordinator/instance.rb +30 -0
  32. data/lib/lite/validation/validator/coordinator.rb +12 -0
  33. data/lib/lite/validation/validator/helpers/path.rb +49 -0
  34. data/lib/lite/validation/validator/node/abstract/branch.rb +21 -0
  35. data/lib/lite/validation/validator/node/abstract/instance.rb +43 -0
  36. data/lib/lite/validation/validator/node/abstract/leaf.rb +35 -0
  37. data/lib/lite/validation/validator/node/abstract.rb +25 -0
  38. data/lib/lite/validation/validator/node/child.rb +44 -0
  39. data/lib/lite/validation/validator/node/implementation/apply_ruling.rb +44 -0
  40. data/lib/lite/validation/validator/node/implementation/dig.rb +38 -0
  41. data/lib/lite/validation/validator/node/implementation/helpers/call_foreign.rb +31 -0
  42. data/lib/lite/validation/validator/node/implementation/helpers/with_result.rb +23 -0
  43. data/lib/lite/validation/validator/node/implementation/helpers/yield_strategy.rb +83 -0
  44. data/lib/lite/validation/validator/node/implementation/helpers/yield_validator.rb +49 -0
  45. data/lib/lite/validation/validator/node/implementation/identity.rb +90 -0
  46. data/lib/lite/validation/validator/node/implementation/iteration/iterator.rb +102 -0
  47. data/lib/lite/validation/validator/node/implementation/iteration.rb +46 -0
  48. data/lib/lite/validation/validator/node/implementation/navigation.rb +43 -0
  49. data/lib/lite/validation/validator/node/implementation/predication.rb +61 -0
  50. data/lib/lite/validation/validator/node/implementation/scoping/evaluator.rb +43 -0
  51. data/lib/lite/validation/validator/node/implementation/scoping.rb +43 -0
  52. data/lib/lite/validation/validator/node/implementation/validation.rb +64 -0
  53. data/lib/lite/validation/validator/node/implementation/wrap.rb +26 -0
  54. data/lib/lite/validation/validator/node/root.rb +60 -0
  55. data/lib/lite/validation/validator/node/suspended.rb +33 -0
  56. data/lib/lite/validation/validator/node.rb +12 -0
  57. data/lib/lite/validation/validator/option/none.rb +43 -0
  58. data/lib/lite/validation/validator/option/some/abstract.rb +29 -0
  59. data/lib/lite/validation/validator/option/some/complex/registry/abstract.rb +67 -0
  60. data/lib/lite/validation/validator/option/some/complex/registry/node.rb +47 -0
  61. data/lib/lite/validation/validator/option/some/complex/registry/root.rb +31 -0
  62. data/lib/lite/validation/validator/option/some/complex/registry.rb +32 -0
  63. data/lib/lite/validation/validator/option/some/complex/wrappers/abstract/iterable.rb +31 -0
  64. data/lib/lite/validation/validator/option/some/complex/wrappers/abstract/non_iterable.rb +27 -0
  65. data/lib/lite/validation/validator/option/some/complex/wrappers/abstract.rb +35 -0
  66. data/lib/lite/validation/validator/option/some/complex/wrappers/array.rb +41 -0
  67. data/lib/lite/validation/validator/option/some/complex/wrappers/hash.rb +40 -0
  68. data/lib/lite/validation/validator/option/some/complex/wrappers/object.rb +34 -0
  69. data/lib/lite/validation/validator/option/some/complex/wrappers/tuple.rb +47 -0
  70. data/lib/lite/validation/validator/option/some/complex/wrappers.rb +5 -0
  71. data/lib/lite/validation/validator/option/some/complex.rb +24 -0
  72. data/lib/lite/validation/validator/option/some/dig.rb +34 -0
  73. data/lib/lite/validation/validator/option/some/simple.rb +23 -0
  74. data/lib/lite/validation/validator/option/some/singular.rb +29 -0
  75. data/lib/lite/validation/validator/option/some.rb +20 -0
  76. data/lib/lite/validation/validator/option.rb +20 -0
  77. data/lib/lite/validation/validator/predicate/abstract/variants.rb +23 -0
  78. data/lib/lite/validation/validator/predicate/foreign/adapter/input/single.rb +21 -0
  79. data/lib/lite/validation/validator/predicate/foreign/adapter/input/tuple.rb +21 -0
  80. data/lib/lite/validation/validator/predicate/foreign/adapter/input.rb +28 -0
  81. data/lib/lite/validation/validator/predicate/foreign/adapter/ruling/instance.rb +37 -0
  82. data/lib/lite/validation/validator/predicate/foreign/adapter/ruling.rb +26 -0
  83. data/lib/lite/validation/validator/predicate/foreign/engine.rb +27 -0
  84. data/lib/lite/validation/validator/predicate/foreign/variant.rb +33 -0
  85. data/lib/lite/validation/validator/predicate/foreign/variants.rb +46 -0
  86. data/lib/lite/validation/validator/predicate/native/builder.rb +72 -0
  87. data/lib/lite/validation/validator/predicate/native/definite.rb +19 -0
  88. data/lib/lite/validation/validator/predicate/native/instance.rb +41 -0
  89. data/lib/lite/validation/validator/predicate/native/optional.rb +34 -0
  90. data/lib/lite/validation/validator/predicate/registry.rb +47 -0
  91. data/lib/lite/validation/validator/predicate.rb +17 -0
  92. data/lib/lite/validation/validator/result/abstract/failure.rb +21 -0
  93. data/lib/lite/validation/validator/result/abstract/instance.rb +18 -0
  94. data/lib/lite/validation/validator/result/abstract/success.rb +17 -0
  95. data/lib/lite/validation/validator/result/abstract.rb +29 -0
  96. data/lib/lite/validation/validator/result/committed.rb +75 -0
  97. data/lib/lite/validation/validator/result/disputable/hash.rb +17 -0
  98. data/lib/lite/validation/validator/result/disputable/instance.rb +43 -0
  99. data/lib/lite/validation/validator/result/disputable/iterable/array.rb +23 -0
  100. data/lib/lite/validation/validator/result/disputable/iterable.rb +17 -0
  101. data/lib/lite/validation/validator/result/disputable/navigable.rb +35 -0
  102. data/lib/lite/validation/validator/result/disputable.rb +14 -0
  103. data/lib/lite/validation/validator/result/disputed/abstract/hash.rb +32 -0
  104. data/lib/lite/validation/validator/result/disputed/abstract/instance.rb +26 -0
  105. data/lib/lite/validation/validator/result/disputed/iterable/array.rb +42 -0
  106. data/lib/lite/validation/validator/result/disputed/iterable/hash.rb +38 -0
  107. data/lib/lite/validation/validator/result/disputed/iterable.rb +20 -0
  108. data/lib/lite/validation/validator/result/disputed/navigable.rb +59 -0
  109. data/lib/lite/validation/validator/result/disputed.rb +17 -0
  110. data/lib/lite/validation/validator/result/refuted.rb +78 -0
  111. data/lib/lite/validation/validator/result/valid/abstract/collect.rb +42 -0
  112. data/lib/lite/validation/validator/result/valid/abstract/commit.rb +25 -0
  113. data/lib/lite/validation/validator/result/valid/abstract/instance.rb +23 -0
  114. data/lib/lite/validation/validator/result/valid/iterable/array/abstract.rb +24 -0
  115. data/lib/lite/validation/validator/result/valid/iterable/array/tuples.rb +64 -0
  116. data/lib/lite/validation/validator/result/valid/iterable/array/values.rb +42 -0
  117. data/lib/lite/validation/validator/result/valid/iterable/hash.rb +46 -0
  118. data/lib/lite/validation/validator/result/valid/iterable.rb +33 -0
  119. data/lib/lite/validation/validator/result/valid/navigable.rb +68 -0
  120. data/lib/lite/validation/validator/result/valid.rb +21 -0
  121. data/lib/lite/validation/validator/result.rb +15 -0
  122. data/lib/lite/validation/validator/ruling/abstract/invalid.rb +59 -0
  123. data/lib/lite/validation/validator/ruling/abstract/valid.rb +23 -0
  124. data/lib/lite/validation/validator/ruling/abstract.rb +12 -0
  125. data/lib/lite/validation/validator/ruling/commit.rb +17 -0
  126. data/lib/lite/validation/validator/ruling/dispute.rb +21 -0
  127. data/lib/lite/validation/validator/ruling/invalidate.rb +32 -0
  128. data/lib/lite/validation/validator/ruling/pass.rb +19 -0
  129. data/lib/lite/validation/validator/ruling/refute.rb +21 -0
  130. data/lib/lite/validation/validator/ruling.rb +53 -0
  131. data/lib/lite/validation/validator/state/instance.rb +46 -0
  132. data/lib/lite/validation/validator/state/merge_strategy.rb +50 -0
  133. data/lib/lite/validation/validator/state/unwrap_strategy.rb +31 -0
  134. data/lib/lite/validation/validator/state.rb +21 -0
  135. data/lib/lite/validation/validator.rb +15 -0
  136. data/lib/lite/validation/version.rb +9 -0
  137. data/lib/lite/validation.rb +8 -0
  138. metadata +196 -0
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract/instance'
4
+ require_relative 'abstract/failure'
5
+
6
+ module Lite
7
+ module Validation
8
+ module Validator
9
+ module Result
10
+ class Refuted < Abstract::Instance
11
+ include Abstract::Failure
12
+
13
+ Lite::Data.define(self, args: %i[error], kwargs: [:fall_through])
14
+
15
+ def self.instance(error, *args, fall_through: false)
16
+ raise Error::Fatal, "Structured error expected, got: #{error.inspect}" unless error.is_a?(StructuredError)
17
+
18
+ new(error, *args, fall_through: fall_through)
19
+ end
20
+
21
+ private_class_method :new
22
+
23
+ def success_at?(*_path)
24
+ false
25
+ end
26
+
27
+ def committed?
28
+ false
29
+ end
30
+
31
+ def refuted?
32
+ true
33
+ end
34
+
35
+ def commit(_value)
36
+ self
37
+ end
38
+
39
+ def auto_commit(as:)
40
+ self
41
+ end
42
+
43
+ def dispute(error)
44
+ raise Error, "Structured error expected, got: #{error.inspect}" unless error.is_a?(StructuredError)
45
+
46
+ self
47
+ end
48
+
49
+ def refute(error)
50
+ raise Error::Fatal, "Structured error expected, got: #{error.inspect}" unless error.is_a?(StructuredError)
51
+
52
+ self
53
+ end
54
+
55
+ def navigable
56
+ self
57
+ end
58
+
59
+ def navigate(*_path, &_block)
60
+ self
61
+ end
62
+
63
+ def errors_root
64
+ [error]
65
+ end
66
+
67
+ def children
68
+ EMPTY
69
+ end
70
+
71
+ def inspect
72
+ signature('Refuted', "error=#{error.code}")
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'commit'
4
+ require_relative '../../../../error'
5
+
6
+ module Lite
7
+ module Validation
8
+ module Validator
9
+ module Result
10
+ module Valid
11
+ module Abstract
12
+ module Collect
13
+ include Commit
14
+
15
+ private
16
+
17
+ def collect_committed(as:)
18
+ case as
19
+ when :array then collect_committed_as_array
20
+ when :hash then collect_committed_as_hash
21
+ else raise Error::Fatal, "Unexpected option: #{as}"
22
+ end
23
+ end
24
+
25
+ def collect_committed_as_hash
26
+ each_child({}) do |(key, child), acc|
27
+ next unless child.committed?
28
+
29
+ acc[key] = child.send :value
30
+ end
31
+ end
32
+
33
+ def each_child(initial_object, &block)
34
+ children.each_with_object(initial_object, &block)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../committed'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Result
9
+ module Valid
10
+ module Abstract
11
+ module Commit
12
+ def commit(value)
13
+ Committed.instance(value)
14
+ end
15
+
16
+ def unexpected_option!(option)
17
+ raise Error, "Unexpected option: #{option}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../abstract/success'
4
+ require_relative '../../disputable/instance'
5
+ require_relative '../../committed'
6
+ require_relative '../../disputed'
7
+ require_relative '../../../option'
8
+
9
+ module Lite
10
+ module Validation
11
+ module Validator
12
+ module Result
13
+ module Valid
14
+ module Abstract
15
+ class Instance < Disputable::Instance
16
+ include Result::Abstract::Success
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../abstract/instance'
4
+ require_relative '../../../disputable/iterable/array'
5
+ require_relative '../../abstract/commit'
6
+
7
+ module Lite
8
+ module Validation
9
+ module Validator
10
+ module Result
11
+ module Valid
12
+ module Iterable
13
+ module Array
14
+ module Abstract
15
+ include Disputable::Iterable::Array
16
+ include Valid::Abstract::Commit
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Result
9
+ module Valid
10
+ module Iterable
11
+ module Array
12
+ class Tuples < Valid::Abstract::Instance
13
+ include Abstract
14
+
15
+ Lite::Data.define(self, args: %i[commit_as])
16
+
17
+ def self.instance(commit, *args)
18
+ new(commit, [], *args)
19
+ end
20
+
21
+ def inspect
22
+ signature('Valid::Iterable::Array::Tuples', nil)
23
+ end
24
+
25
+ def navigable
26
+ case commit_as
27
+ when false then Valid.navigable(children.to_h.freeze)
28
+ when :hash then commit(children.to_h.freeze)
29
+ else unexpected_option!(commit_as)
30
+ end
31
+ end
32
+
33
+ def child(_key)
34
+ Result.valid
35
+ end
36
+
37
+ def merge(result, key)
38
+ if result.failure?
39
+ Disputed::Iterable.initial.append(result, key)
40
+ else
41
+ merge_success(result, key)
42
+ self
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def merge_success(result, key)
49
+ case commit_as
50
+ when false
51
+ children << [key, result]
52
+ when :hash
53
+ children << [key, result.value] if result.committed?
54
+ else unexpected_option!(commit_as)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Result
9
+ module Valid
10
+ module Iterable
11
+ module Array
12
+ class Values < Valid::Abstract::Instance
13
+ include Abstract
14
+
15
+ def self.instance(*args)
16
+ new([], *args)
17
+ end
18
+
19
+ def inspect
20
+ signature('Valid::Iterable::Array::Values', nil)
21
+ end
22
+
23
+ def navigable
24
+ commit(children.freeze)
25
+ end
26
+
27
+ def merge(result, key)
28
+ if result.success?
29
+ children << result.value if result.committed?
30
+ self
31
+ else
32
+ Disputed::Iterable.initial.append(result, key)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../abstract/instance'
4
+ require_relative '../../disputable/hash'
5
+ require_relative '../../disputable/iterable'
6
+
7
+ module Lite
8
+ module Validation
9
+ module Validator
10
+ module Result
11
+ module Valid
12
+ module Iterable
13
+ class Hash < Valid::Abstract::Instance
14
+ include Disputable::Hash
15
+ include Disputable::Iterable
16
+
17
+ Lite::Data.define(self, args: %i[commit_as])
18
+
19
+ def self.instance(commit, children)
20
+ new(commit, children.dup)
21
+ end
22
+
23
+ def inspect
24
+ signature('Valid::Iterable::Hash', nil)
25
+ end
26
+
27
+ def navigable
28
+ navigable = Valid.navigable(children)
29
+ commit_as ? navigable.auto_commit(as: commit_as) : navigable
30
+ end
31
+
32
+ def merge(result, key)
33
+ if result.success?
34
+ children.merge!(key => result) if commit_as == false || result.committed?
35
+ self
36
+ else
37
+ Disputed::Iterable.initial.append(result, key)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'iterable/array/tuples'
4
+ require_relative 'iterable/array/values'
5
+ require_relative 'iterable/hash'
6
+
7
+ module Lite
8
+ module Validation
9
+ module Validator
10
+ module Result
11
+ module Valid
12
+ module Iterable
13
+ def self.instance(children, commit:)
14
+ if children.empty?
15
+ initial(commit: commit)
16
+ else
17
+ Hash.instance(commit, children)
18
+ end
19
+ end
20
+
21
+ def self.initial(commit:)
22
+ case commit
23
+ when :hash, false then Array::Tuples.instance(commit)
24
+ when :array then Array::Values.instance
25
+ else raise Error, "Unexpected option: #{commit}"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'iterable'
4
+ require_relative '../disputable/navigable'
5
+ require_relative 'abstract/collect'
6
+
7
+ module Lite
8
+ module Validation
9
+ module Validator
10
+ module Result
11
+ module Valid
12
+ class Navigable < Abstract::Instance
13
+ include Disputable::Navigable
14
+ include Abstract::Collect
15
+
16
+ def self.instance(*args)
17
+ new(EMPTY, *args)
18
+ end
19
+
20
+ def initialize(children, *args)
21
+ super(children.freeze, *args)
22
+ end
23
+
24
+ def auto_commit(as:)
25
+ commit(collect_committed(as: as))
26
+ end
27
+
28
+ def dispute(error)
29
+ Disputed::Navigable.instance(error: error)
30
+ end
31
+
32
+ def success
33
+ Option.none
34
+ end
35
+
36
+ def inspect
37
+ signature('Valid::Navigable', nil)
38
+ end
39
+
40
+ def iterable(commit:)
41
+ Iterable.instance(children, commit: commit)
42
+ end
43
+
44
+ def merge(result, key)
45
+ if result.success?
46
+ self.class.send(
47
+ :new,
48
+ children.merge(key => result)
49
+ )
50
+ else
51
+ Disputed::Navigable.instance.append(result, key)
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def collect_committed_as_array
58
+ children.values
59
+ .lazy
60
+ .select(&:committed?)
61
+ .map(&:value).force
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract/success'
4
+ require_relative 'valid/navigable'
5
+ require_relative 'committed'
6
+ require_relative 'disputed'
7
+ require_relative '../option'
8
+
9
+ module Lite
10
+ module Validation
11
+ module Validator
12
+ module Result
13
+ module Valid
14
+ def self.navigable(children)
15
+ Valid::Navigable.send(:new, children)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'result/valid'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Result
9
+ def self.valid
10
+ @valid ||= Valid::Navigable.instance
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite/data'
4
+
5
+ require_relative '../abstract'
6
+ require_relative '../../../error'
7
+ require_relative '../../../structured_error'
8
+
9
+ module Lite
10
+ module Validation
11
+ module Validator
12
+ module Ruling
13
+ module Abstract
14
+ class Invalid
15
+ module Abstract
16
+ include Ruling::Abstract
17
+
18
+ def invalid(&block)
19
+ block.call(self)
20
+ end
21
+ end
22
+
23
+ class Raw
24
+ include Abstract
25
+
26
+ Lite::Data.define(self, args: %i[code message data])
27
+
28
+ def self.instance(code, message: nil, data: nil)
29
+ new code, message, data
30
+ end
31
+
32
+ def structured_error(coordinator)
33
+ coordinator.structured_error(code, message: message, data: data)
34
+ end
35
+ end
36
+
37
+ include Abstract
38
+
39
+ Lite::Data.define(self, args: [:error])
40
+
41
+ def self.instance(error, **opts)
42
+ case [error, opts]
43
+ in [StructuredError, {}] then new error
44
+ in [Symbol, { ** }] then self::Raw.instance(error, **opts)
45
+ else raise Error::Fatal, "Unexpected first argument: #{error.inspect}"
46
+ end
47
+ end
48
+
49
+ private_class_method :new
50
+
51
+ def structured_error(*)
52
+ error
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite/data'
4
+
5
+ require_relative '../abstract'
6
+ require_relative '../../../error'
7
+ require_relative '../../../structured_error'
8
+
9
+ module Lite
10
+ module Validation
11
+ module Validator
12
+ module Ruling
13
+ module Abstract
14
+ module Valid
15
+ def invalid(&_block)
16
+ self
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Validation
5
+ module Validator
6
+ module Ruling
7
+ module Abstract
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite/data'
4
+ require_relative 'abstract/valid'
5
+
6
+ module Lite
7
+ module Validation
8
+ module Validator
9
+ module Ruling
10
+ class Commit
11
+ Lite::Data.define(self, args: [:value])
12
+ include Abstract::Valid
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract/invalid'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Ruling
9
+ class Dispute < Ruling::Abstract::Invalid
10
+ module Abstract; end
11
+
12
+ class Raw < Ruling::Abstract::Invalid::Raw
13
+ include Abstract
14
+ end
15
+
16
+ include Abstract
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite/data'
4
+ require_relative 'abstract/invalid'
5
+
6
+ module Lite
7
+ module Validation
8
+ module Validator
9
+ module Ruling
10
+ class Invalidate < Abstract::Invalid
11
+ class Raw < Abstract::Invalid::Raw
12
+ def dispute
13
+ Ruling::Dispute(code, message: message, data: data)
14
+ end
15
+
16
+ def refute
17
+ Ruling::Refute(code, message: message, data: data)
18
+ end
19
+ end
20
+
21
+ def dispute
22
+ Ruling::Dispute(error)
23
+ end
24
+
25
+ def refute
26
+ Ruling::Refute(error)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract/valid'
4
+
5
+ module Lite
6
+ module Validation
7
+ module Validator
8
+ module Ruling
9
+ class Pass
10
+ extend Abstract::Valid
11
+
12
+ def self.===(other)
13
+ equal?(other)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end