bcdd-result 0.13.0 → 1.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -4
  3. data/CHANGELOG.md +61 -21
  4. data/README.md +397 -227
  5. data/Rakefile +1 -1
  6. data/Steepfile +1 -1
  7. data/examples/multiple_listeners/Rakefile +8 -8
  8. data/examples/multiple_listeners/app/models/account/owner_creation.rb +1 -1
  9. data/examples/multiple_listeners/app/models/user/creation.rb +1 -1
  10. data/examples/multiple_listeners/app/models/user/token/creation.rb +1 -1
  11. data/examples/multiple_listeners/config/initializers/bcdd.rb +0 -2
  12. data/examples/multiple_listeners/config.rb +3 -3
  13. data/examples/multiple_listeners/db/setup.rb +2 -3
  14. data/examples/multiple_listeners/lib/bcdd/result/event_logs_record.rb +27 -0
  15. data/examples/multiple_listeners/lib/event_logs_listener/stdout.rb +60 -0
  16. data/examples/multiple_listeners/lib/runtime_breaker.rb +1 -1
  17. data/examples/service_objects/Rakefile +36 -0
  18. data/examples/service_objects/app/models/account/member.rb +10 -0
  19. data/examples/service_objects/app/models/account.rb +11 -0
  20. data/examples/service_objects/app/models/user/token.rb +7 -0
  21. data/examples/service_objects/app/models/user.rb +15 -0
  22. data/examples/service_objects/app/services/account/owner_creation.rb +47 -0
  23. data/examples/service_objects/app/services/application_service.rb +79 -0
  24. data/examples/service_objects/app/services/user/creation.rb +56 -0
  25. data/examples/service_objects/app/services/user/token/creation.rb +37 -0
  26. data/examples/service_objects/config/boot.rb +17 -0
  27. data/examples/service_objects/config/initializers/bcdd.rb +9 -0
  28. data/examples/service_objects/config.rb +20 -0
  29. data/examples/service_objects/db/setup.rb +49 -0
  30. data/examples/single_listener/Rakefile +5 -5
  31. data/examples/single_listener/app/models/account/owner_creation.rb +1 -1
  32. data/examples/single_listener/app/models/user/creation.rb +1 -1
  33. data/examples/single_listener/app/models/user/token/creation.rb +1 -1
  34. data/examples/single_listener/config/initializers/bcdd.rb +0 -2
  35. data/examples/single_listener/config.rb +1 -1
  36. data/examples/single_listener/lib/{single_transitions_listener.rb → single_event_logs_listener.rb} +32 -23
  37. data/lib/bcdd/{result/context → context}/callable_and_then.rb +6 -5
  38. data/lib/bcdd/{result/context → context}/expectations/mixin.rb +1 -1
  39. data/lib/bcdd/{result/context → context}/expectations.rb +2 -2
  40. data/lib/bcdd/context/failure.rb +9 -0
  41. data/lib/bcdd/{result/context → context}/mixin.rb +2 -2
  42. data/lib/bcdd/{result/context → context}/success.rb +11 -11
  43. data/lib/bcdd/context.rb +115 -0
  44. data/lib/bcdd/failure.rb +23 -0
  45. data/lib/bcdd/result/_self.rb +198 -0
  46. data/lib/bcdd/result/callable_and_then/caller.rb +1 -1
  47. data/lib/bcdd/result/config/switchers/addons.rb +2 -2
  48. data/lib/bcdd/result/config/switchers/constant_aliases.rb +1 -3
  49. data/lib/bcdd/result/config/switchers/features.rb +5 -5
  50. data/lib/bcdd/result/config/switchers/pattern_matching.rb +1 -1
  51. data/lib/bcdd/result/config.rb +7 -5
  52. data/lib/bcdd/result/contract/type_checker.rb +4 -0
  53. data/lib/bcdd/result/{transitions → event_logs}/config.rb +5 -3
  54. data/lib/bcdd/result/{transitions → event_logs}/listener.rb +5 -5
  55. data/lib/bcdd/result/{transitions → event_logs}/listeners.rb +17 -17
  56. data/lib/bcdd/result/{transitions → event_logs}/tracking/disabled.rb +1 -1
  57. data/lib/bcdd/result/{transitions → event_logs}/tracking/enabled.rb +15 -13
  58. data/lib/bcdd/result/{transitions → event_logs}/tracking.rb +4 -3
  59. data/lib/bcdd/result/{transitions → event_logs}/tree.rb +27 -11
  60. data/lib/bcdd/result/event_logs.rb +27 -0
  61. data/lib/bcdd/result/failure.rb +1 -3
  62. data/lib/bcdd/result/success.rb +1 -3
  63. data/lib/bcdd/result/version.rb +1 -1
  64. data/lib/bcdd/result.rb +23 -191
  65. data/lib/bcdd/success.rb +23 -0
  66. data/sig/bcdd/context.rbs +175 -0
  67. data/sig/bcdd/failure.rbs +13 -0
  68. data/sig/bcdd/result/config.rbs +1 -3
  69. data/sig/bcdd/result/context.rbs +2 -174
  70. data/sig/bcdd/result/contract.rbs +1 -0
  71. data/sig/bcdd/result/{transitions.rbs → event_logs.rbs} +19 -19
  72. data/sig/bcdd/result.rbs +13 -31
  73. data/sig/bcdd/success.rbs +13 -0
  74. metadata +41 -24
  75. data/examples/multiple_listeners/lib/bcdd/result/transitions_record.rb +0 -28
  76. data/examples/multiple_listeners/lib/transitions_listener/stdout.rb +0 -54
  77. data/lib/bcdd/result/context/failure.rb +0 -9
  78. data/lib/bcdd/result/context.rb +0 -93
  79. data/lib/bcdd/result/failure/methods.rb +0 -21
  80. data/lib/bcdd/result/success/methods.rb +0 -21
  81. data/lib/bcdd/result/transitions.rb +0 -27
data/lib/bcdd/result.rb CHANGED
@@ -1,197 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'set'
4
- require 'singleton'
5
4
 
6
- require_relative 'result/version'
7
- require_relative 'result/error'
8
- require_relative 'result/ignored_types'
9
- require_relative 'result/transitions'
10
- require_relative 'result/callable_and_then'
11
- require_relative 'result/data'
12
- require_relative 'result/handler'
13
- require_relative 'result/failure'
14
- require_relative 'result/success'
15
- require_relative 'result/mixin'
16
- require_relative 'result/contract'
17
- require_relative 'result/expectations'
18
- require_relative 'result/context'
19
- require_relative 'result/config'
20
-
21
- class BCDD::Result
22
- attr_accessor :unknown, :transitions
23
-
24
- attr_reader :source, :data, :type_checker, :terminal
25
-
26
- protected :source
27
-
28
- private :unknown, :unknown=, :type_checker, :transitions=
29
-
30
- def self.config
31
- Config.instance
32
- end
33
-
34
- def self.configuration(freeze: true)
35
- yield(config)
36
-
37
- freeze and config.freeze
38
- end
39
-
40
- def initialize(type:, value:, source: nil, expectations: nil, terminal: nil)
41
- data = Data.new(kind, type, value)
42
-
43
- @type_checker = Contract.evaluate(data, expectations)
44
- @source = source
45
- @terminal = kind == :failure || (terminal && !IgnoredTypes.include?(type))
46
- @data = data
47
-
48
- self.unknown = true
49
- self.transitions = Transitions::Tracking::EMPTY
50
-
51
- Transitions.tracking.record(self)
52
- end
53
-
54
- def terminal?
55
- terminal
56
- end
57
-
58
- def type
59
- data.type
60
- end
61
-
62
- def value
63
- data.value
64
- end
65
-
66
- def success?(_type = nil)
67
- raise Error::NotImplemented
68
- end
69
-
70
- def failure?(_type = nil)
71
- raise Error::NotImplemented
72
- end
73
-
74
- def value_or(&_block)
75
- raise Error::NotImplemented
76
- end
77
-
78
- def on(*types, &block)
79
- raise Error::MissingTypeArgument if types.empty?
80
-
81
- tap { known(block) if type_checker.allow?(types) }
82
- end
83
-
84
- def on_success(*types, &block)
85
- tap { known(block) if type_checker.allow_success?(types) && success? }
86
- end
87
-
88
- def on_failure(*types, &block)
89
- tap { known(block) if type_checker.allow_failure?(types) && failure? }
90
- end
91
-
92
- def on_unknown
93
- tap { yield(value, type) if unknown }
94
- end
95
-
96
- def and_then(method_name = nil, injected_value = nil, &block)
97
- return self if terminal?
98
-
99
- method_name && block and raise ::ArgumentError, 'method_name and block are mutually exclusive'
100
-
101
- method_name ? call_and_then_source_method(method_name, injected_value) : call_and_then_block(block)
102
- end
103
-
104
- def and_then!(source, injected_value = nil, _call: nil)
105
- raise Error::CallableAndThenDisabled unless Config.instance.feature.enabled?(:and_then!)
106
-
107
- return self if terminal?
108
-
109
- call_and_then_callable!(source, value: value, injected_value: injected_value, method_name: _call)
110
- end
111
-
112
- def handle
113
- handler = Handler.new(self, type_checker: type_checker)
114
-
115
- yield handler
116
-
117
- handler.send(:outcome)
118
- end
119
-
120
- def ==(other)
121
- self.class == other.class && type == other.type && value == other.value
122
- end
123
-
124
- def hash
125
- [self.class, type, value].hash
126
- end
127
-
128
- def inspect
129
- format('#<%<class_name>s type=%<type>p value=%<value>p>', class_name: self.class.name, type: type, value: value)
130
- end
131
-
132
- def deconstruct
133
- [type, value]
134
- end
135
-
136
- def deconstruct_keys(_keys)
137
- { kind => { type => value } }
138
- end
139
-
140
- alias eql? ==
141
- alias on_type on
142
-
143
- private
144
-
145
- def kind
146
- :unknown
147
- end
148
-
149
- def known(block)
150
- self.unknown = false
151
-
152
- block.call(value, type)
153
- end
154
-
155
- def call_and_then_source_method(method_name, injected_value)
156
- method = source.method(method_name)
157
-
158
- Transitions.tracking.record_and_then(method, injected_value) do
159
- result = call_and_then_source_method!(method, injected_value)
160
-
161
- ensure_result_object(result, origin: :method)
162
- end
163
- end
164
-
165
- def call_and_then_source_method!(method, injected_value)
166
- case method.arity
167
- when 0 then source.send(method.name)
168
- when 1 then source.send(method.name, value)
169
- when 2 then source.send(method.name, value, injected_value)
170
- else raise Error::InvalidSourceMethodArity.build(source: source, method: method, max_arity: 2)
171
- end
172
- end
173
-
174
- def call_and_then_block(block)
175
- Transitions.tracking.record_and_then(:block, nil) do
176
- result = call_and_then_block!(block)
177
-
178
- ensure_result_object(result, origin: :block)
179
- end
180
- end
181
-
182
- def call_and_then_block!(block)
183
- block.call(value)
184
- end
185
-
186
- def call_and_then_callable!(source, value:, injected_value:, method_name:)
187
- CallableAndThen::Caller.call(source, value: value, injected_value: injected_value, method_name: method_name)
188
- end
189
-
190
- def ensure_result_object(result, origin:)
191
- raise Error::UnexpectedOutcome.build(outcome: result, origin: origin) unless result.is_a?(::BCDD::Result)
192
-
193
- return result if result.source.equal?(source)
194
-
195
- raise Error::InvalidResultSource.build(given_result: result, expected_source: source)
5
+ module BCDD
6
+ require_relative 'success'
7
+ require_relative 'failure'
8
+
9
+ class Result
10
+ require_relative 'result/version'
11
+ require_relative 'result/error'
12
+ require_relative 'result/ignored_types'
13
+ require_relative 'result/event_logs'
14
+ require_relative 'result/callable_and_then'
15
+ require_relative 'result/data'
16
+ require_relative 'result/handler'
17
+ require_relative 'result/failure'
18
+ require_relative 'result/success'
19
+ require_relative 'result/mixin'
20
+ require_relative 'result/contract'
21
+ require_relative 'result/expectations'
22
+ require_relative 'result/config'
23
+ require_relative 'result/_self'
24
+
25
+ require_relative 'context'
26
+
27
+ Context = ::BCDD::Context
196
28
  end
197
29
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDD
4
+ module Success
5
+ def success?(type = nil)
6
+ type.nil? || type_checker.allow_success?([type])
7
+ end
8
+
9
+ def failure?(_type = nil)
10
+ false
11
+ end
12
+
13
+ def value_or
14
+ value
15
+ end
16
+
17
+ private
18
+
19
+ def kind
20
+ :success
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,175 @@
1
+ class BCDD::Context < BCDD::Result
2
+ EXPECTED_OUTCOME: String
3
+
4
+ SourceMethodArity: ^(Method) -> Integer
5
+
6
+ attr_reader memo: Hash[Symbol, untyped]
7
+
8
+ def initialize: (
9
+ type: Symbol,
10
+ value: untyped,
11
+ ?source: untyped,
12
+ ?expectations: BCDD::Result::Contract::Evaluator,
13
+ ?terminal: bool
14
+ ) -> void
15
+
16
+ def and_then: (?Symbol, **untyped) ?{ (Hash[Symbol, untyped]) -> untyped } -> untyped
17
+
18
+ def and_then!: (untyped, **untyped) -> untyped
19
+
20
+ private
21
+
22
+ def call_and_then_source_method: (Symbol, Hash[Symbol, untyped]) -> BCDD::Context
23
+
24
+ def call_and_then_callable!: (untyped, value: untyped, injected_value: untyped, method_name: (Symbol | nil)) -> BCDD::Context
25
+
26
+ def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Context
27
+
28
+ def raise_unexpected_outcome_error: (BCDD::Context | untyped, Symbol) -> void
29
+ end
30
+
31
+ class BCDD::Context
32
+ class Error < BCDD::Result::Error
33
+ class InvalidExposure < BCDD::Context::Error
34
+ end
35
+ end
36
+ end
37
+
38
+ class BCDD::Context
39
+ class Success < BCDD::Context
40
+ include BCDD::Success
41
+
42
+ FetchValues: Proc
43
+
44
+ def and_expose: (Symbol, Array[Symbol], terminal: bool) -> BCDD::Context::Success
45
+ end
46
+
47
+ def self.Success: (Symbol, **untyped) -> BCDD::Context::Success
48
+ end
49
+
50
+ module BCDD::Context::CallableAndThen
51
+ class Caller < BCDD::Result::CallableAndThen::Caller
52
+ module KeyArgs
53
+ def self.parameters?: (untyped) -> bool
54
+
55
+ def self.invalid_arity: (untyped, Symbol) -> BCDD::Result::CallableAndThen::Error::InvalidArity
56
+ end
57
+
58
+ def self.call: (
59
+ untyped source,
60
+ value: untyped,
61
+ injected_value: untyped,
62
+ method_name: (Symbol | nil),
63
+ ) -> BCDD::Context
64
+
65
+ private
66
+
67
+ def self.call_proc!: (
68
+ untyped source,
69
+ Hash[Symbol, untyped] value,
70
+ nil injected_value
71
+ ) -> BCDD::Context
72
+
73
+ def self.call_method!: (
74
+ untyped source,
75
+ Method method,
76
+ Hash[Symbol, untyped] value,
77
+ nil injected_value
78
+ ) -> BCDD::Context
79
+
80
+ def self.callable_method: (
81
+ untyped source,
82
+ (Symbol | nil) method_name
83
+ ) -> ::Method
84
+
85
+ def self.ensure_result_object: (
86
+ untyped source,
87
+ untyped value,
88
+ BCDD::Context result
89
+ ) -> BCDD::Context
90
+
91
+ def self.expected_result_object: () -> singleton(BCDD::Context)
92
+
93
+ def self.expected_outcome: () -> String
94
+ end
95
+ end
96
+
97
+ class BCDD::Context
98
+ class Failure < BCDD::Context
99
+ include BCDD::Failure
100
+
101
+ def and_expose: (Symbol, Array[Symbol], **untyped) -> BCDD::Context::Failure
102
+ end
103
+
104
+ def self.Failure: (Symbol, **untyped) -> BCDD::Context::Failure
105
+ end
106
+
107
+ class BCDD::Context
108
+ module Mixin
109
+ Factory: singleton(BCDD::Result::Mixin::Factory)
110
+
111
+ module Methods
112
+ def Success: (Symbol, **untyped) -> BCDD::Context::Success
113
+
114
+ def Failure: (Symbol, **untyped) -> BCDD::Context::Failure
115
+
116
+ private
117
+
118
+ def _ResultAs: (singleton(BCDD::Context), Symbol, untyped, ?terminal: bool) -> untyped
119
+ end
120
+
121
+ module Addons
122
+ module Continue
123
+ include BCDD::Context::Mixin::Methods
124
+
125
+ private
126
+
127
+ def Continue: (**untyped) -> BCDD::Context::Success
128
+ end
129
+
130
+ module Given
131
+ include BCDD::Context::Mixin::Methods
132
+
133
+ private
134
+
135
+ def Given: (*untyped) -> BCDD::Context::Success
136
+ end
137
+
138
+ OPTIONS: Hash[Symbol, Module]
139
+
140
+ def self.options: (Hash[Symbol, Hash[Symbol, bool]]) -> Hash[Symbol, Module]
141
+ end
142
+ end
143
+
144
+ def self.mixin_module: -> singleton(BCDD::Context::Mixin)
145
+
146
+ def self.result_factory: -> singleton(BCDD::Context)
147
+ end
148
+
149
+ class BCDD::Context::Expectations < BCDD::Result::Expectations
150
+ def self.mixin_module: -> singleton(BCDD::Context::Expectations::Mixin)
151
+
152
+ def self.result_factory_without_expectations: -> singleton(BCDD::Result)
153
+
154
+ def Success: (Symbol, **untyped) -> BCDD::Context::Success
155
+ def Failure: (Symbol, **untyped) -> BCDD::Context::Failure
156
+ end
157
+
158
+ module BCDD::Context::Expectations::Mixin
159
+ Methods: singleton(BCDD::Result::Expectations::Mixin::Methods)
160
+ Factory: singleton(BCDD::Result::Expectations::Mixin::Factory)
161
+
162
+ module Addons
163
+ module Continue
164
+ private def Continue: (**untyped) -> BCDD::Context::Success
165
+ end
166
+
167
+ module Given
168
+ private def Given: (*untyped) -> BCDD::Context::Success
169
+ end
170
+
171
+ OPTIONS: Hash[Symbol, Module]
172
+
173
+ def self.options: (Hash[Symbol, Hash[Symbol, bool]]) -> Hash[Symbol, Module]
174
+ end
175
+ end
@@ -0,0 +1,13 @@
1
+ module BCDD
2
+ module Failure
3
+ def success?: (?Symbol type) -> bool
4
+ def failure?: (?Symbol type) -> bool
5
+ def value_or: { (untyped) -> untyped } -> untyped
6
+ def value: -> untyped
7
+
8
+ private
9
+
10
+ def kind: -> Symbol
11
+ def type_checker: -> BCDD::Result::Contract::TypeChecker
12
+ end
13
+ end
@@ -1,6 +1,4 @@
1
1
  class BCDD::Result::Config
2
- include Singleton
3
-
4
2
  ADDON: Hash[Symbol, Hash[Symbol, untyped]]
5
3
  FEATURE: Hash[Symbol, Hash[Symbol, untyped]]
6
4
  PATTERN_MATCHING: Hash[Symbol, Hash[Symbol, untyped]]
@@ -15,7 +13,7 @@ class BCDD::Result::Config
15
13
  def initialize: -> void
16
14
 
17
15
  def and_then!: () -> BCDD::Result::CallableAndThen::Config
18
- def transitions: () -> BCDD::Result::Transitions::Config
16
+ def event_logs: () -> BCDD::Result::EventLogs::Config
19
17
 
20
18
  def freeze: -> BCDD::Result::Config
21
19
  def options: -> Hash[Symbol, BCDD::Result::Config::Switcher]
@@ -1,175 +1,3 @@
1
- class BCDD::Result::Context < BCDD::Result
2
- EXPECTED_OUTCOME: String
3
-
4
- SourceMethodArity: ^(Method) -> Integer
5
-
6
- attr_reader acc: Hash[Symbol, untyped]
7
-
8
- def initialize: (
9
- type: Symbol,
10
- value: untyped,
11
- ?source: untyped,
12
- ?expectations: BCDD::Result::Contract::Evaluator,
13
- ?terminal: bool
14
- ) -> void
15
-
16
- def and_then: (?Symbol, **untyped) ?{ (Hash[Symbol, untyped]) -> untyped } -> untyped
17
-
18
- def and_then!: (untyped, **untyped) -> untyped
19
-
20
- private
21
-
22
- def call_and_then_source_method: (Symbol, Hash[Symbol, untyped]) -> BCDD::Result::Context
23
-
24
- def call_and_then_callable!: (untyped, value: untyped, injected_value: untyped, method_name: (Symbol | nil)) -> BCDD::Result::Context
25
-
26
- def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Result::Context
27
-
28
- def raise_unexpected_outcome_error: (BCDD::Result::Context | untyped, Symbol) -> void
29
- end
30
-
31
- class BCDD::Result::Context
32
- class Error < BCDD::Result::Error
33
- class InvalidExposure < BCDD::Result::Context::Error
34
- end
35
- end
36
- end
37
-
38
- class BCDD::Result::Context
39
- class Success < BCDD::Result::Context
40
- include BCDD::Result::Success::Methods
41
-
42
- FetchValues: Proc
43
-
44
- def and_expose: (Symbol, Array[Symbol], terminal: bool) -> BCDD::Result::Context::Success
45
- end
46
-
47
- def self.Success: (Symbol, **untyped) -> BCDD::Result::Context::Success
48
- end
49
-
50
- module BCDD::Result::Context::CallableAndThen
51
- class Caller < BCDD::Result::CallableAndThen::Caller
52
- module KeyArgs
53
- def self.parameters?: (untyped) -> bool
54
-
55
- def self.invalid_arity: (untyped, Symbol) -> BCDD::Result::CallableAndThen::Error::InvalidArity
56
- end
57
-
58
- def self.call: (
59
- untyped source,
60
- value: untyped,
61
- injected_value: untyped,
62
- method_name: (Symbol | nil),
63
- ) -> BCDD::Result::Context
64
-
65
- private
66
-
67
- def self.call_proc!: (
68
- untyped source,
69
- Hash[Symbol, untyped] value,
70
- nil injected_value
71
- ) -> BCDD::Result::Context
72
-
73
- def self.call_method!: (
74
- untyped source,
75
- Method method,
76
- Hash[Symbol, untyped] value,
77
- nil injected_value
78
- ) -> BCDD::Result::Context
79
-
80
- def self.callable_method: (
81
- untyped source,
82
- (Symbol | nil) method_name
83
- ) -> ::Method
84
-
85
- def self.ensure_result_object: (
86
- untyped source,
87
- untyped value,
88
- BCDD::Result::Context result
89
- ) -> BCDD::Result::Context
90
-
91
- def self.expected_result_object: () -> singleton(BCDD::Result::Context)
92
-
93
- def self.expected_outcome: () -> String
94
- end
95
- end
96
-
97
- class BCDD::Result::Context
98
- class Failure < BCDD::Result::Context
99
- include BCDD::Result::Failure::Methods
100
-
101
- def and_expose: (Symbol, Array[Symbol], **untyped) -> BCDD::Result::Context::Failure
102
- end
103
-
104
- def self.Failure: (Symbol, **untyped) -> BCDD::Result::Context::Failure
105
- end
106
-
107
- class BCDD::Result::Context
108
- module Mixin
109
- Factory: singleton(BCDD::Result::Mixin::Factory)
110
-
111
- module Methods
112
- def Success: (Symbol, **untyped) -> BCDD::Result::Context::Success
113
-
114
- def Failure: (Symbol, **untyped) -> BCDD::Result::Context::Failure
115
-
116
- private
117
-
118
- def _ResultAs: (singleton(BCDD::Result::Context), Symbol, untyped, ?terminal: bool) -> untyped
119
- end
120
-
121
- module Addons
122
- module Continue
123
- include BCDD::Result::Context::Mixin::Methods
124
-
125
- private
126
-
127
- def Continue: (**untyped) -> BCDD::Result::Context::Success
128
- end
129
-
130
- module Given
131
- include BCDD::Result::Context::Mixin::Methods
132
-
133
- private
134
-
135
- def Given: (*untyped) -> BCDD::Result::Context::Success
136
- end
137
-
138
- OPTIONS: Hash[Symbol, Module]
139
-
140
- def self.options: (Hash[Symbol, Hash[Symbol, bool]]) -> Hash[Symbol, Module]
141
- end
142
- end
143
-
144
- def self.mixin_module: -> singleton(BCDD::Result::Context::Mixin)
145
-
146
- def self.result_factory: -> singleton(BCDD::Result::Context)
147
- end
148
-
149
- class BCDD::Result::Context::Expectations < BCDD::Result::Expectations
150
- def self.mixin_module: -> singleton(BCDD::Result::Context::Expectations::Mixin)
151
-
152
- def self.result_factory_without_expectations: -> singleton(BCDD::Result)
153
-
154
- def Success: (Symbol, **untyped) -> BCDD::Result::Context::Success
155
- def Failure: (Symbol, **untyped) -> BCDD::Result::Context::Failure
156
- end
157
-
158
- module BCDD::Result::Context::Expectations::Mixin
159
- Methods: singleton(BCDD::Result::Expectations::Mixin::Methods)
160
- Factory: singleton(BCDD::Result::Expectations::Mixin::Factory)
161
-
162
- module Addons
163
- module Continue
164
- private def Continue: (**untyped) -> BCDD::Result::Context::Success
165
- end
166
-
167
- module Given
168
- private def Given: (*untyped) -> BCDD::Result::Context::Success
169
- end
170
-
171
- OPTIONS: Hash[Symbol, Module]
172
-
173
- def self.options: (Hash[Symbol, Hash[Symbol, bool]]) -> Hash[Symbol, Module]
174
- end
1
+ class BCDD::Result
2
+ Context: BCDD::Context
175
3
  end
@@ -26,6 +26,7 @@ module BCDD::Result::Contract
26
26
  expectations: BCDD::Result::Contract::Evaluator
27
27
  ) -> void
28
28
 
29
+ def allow!: (Symbol) -> Symbol
29
30
  def allow?: (Array[Symbol]) -> bool
30
31
  def allow_success?: (Array[Symbol]) -> bool
31
32
  def allow_failure?: (Array[Symbol]) -> bool