bcdd-result 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e4fa0b7a751971ae5fd7987906342e6436535b9bb8729252c7651a5c533302c
4
- data.tar.gz: c2f2359525d2c24e28da5d400ef3e7284ccb2c13b8955da84cddb8da7b229cb3
3
+ metadata.gz: 78ccef0bd217127baf1bf96cabf4074c2ab2e8bb7befffd7c7f2f3df4631bf27
4
+ data.tar.gz: '0429c37305f2265dd13517c7a64e977929f6a4bde4b70421de01c8a418b67656'
5
5
  SHA512:
6
- metadata.gz: 1fba0932c35635a248eeef6c88b8c386ce2f8a55f235784ea6c144299a0a17f8501efa16f5a171babd2a883b90a8d06726bd47bfcb2261196d726068b8d6e097
7
- data.tar.gz: 66722933fdb17f8317c0989ee103a38479b49ffb151ac23199ad91669a48a693af9ccce2b863dda913c54bc3b9d446ce802b0b4221352dffd68a08de4c647a23
6
+ metadata.gz: f8756ac806f830d458b3c830c15ac667cbb29f1737fa97cb59870541e2f3e8000839ab775c16559370499a7055db7f0938bb8a71071db9b5392507af5f0ec7de
7
+ data.tar.gz: 1003e299eec64ddb62a51b1f8d358b9dca2b58add3f8b4b9a4c46a5a70cb825907b2de7339c4f5e94817fb92e48c3a702eae67cd6eeca80942c60bdc80dff071
data/CHANGELOG.md CHANGED
@@ -1,22 +1,25 @@
1
1
  - [\[Unreleased\]](#unreleased)
2
+ - [\[0.9.1\] - 2023-12-12](#091---2023-12-12)
3
+ - [Changed](#changed)
4
+ - [Fixed](#fixed)
2
5
  - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
3
6
  - [Added](#added)
4
- - [Changed](#changed)
7
+ - [Changed](#changed-1)
5
8
  - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
6
9
  - [Added](#added-1)
7
- - [Changed](#changed-1)
10
+ - [Changed](#changed-2)
8
11
  - [Removed](#removed)
9
12
  - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
10
13
  - [Added](#added-2)
11
- - [Changed](#changed-2)
14
+ - [Changed](#changed-3)
12
15
  - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
13
16
  - [Added](#added-3)
14
- - [Changed](#changed-3)
17
+ - [Changed](#changed-4)
15
18
  - [\[0.5.0\] - 2023-10-09](#050---2023-10-09)
16
19
  - [Added](#added-4)
17
20
  - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
18
21
  - [Added](#added-5)
19
- - [Changed](#changed-4)
22
+ - [Changed](#changed-5)
20
23
  - [Removed](#removed-1)
21
24
  - [\[0.3.0\] - 2023-09-26](#030---2023-09-26)
22
25
  - [Added](#added-6)
@@ -28,6 +31,16 @@
28
31
 
29
32
  ## [Unreleased]
30
33
 
34
+ ## [0.9.1] - 2023-12-12
35
+
36
+ ### Changed
37
+
38
+ - **(BREAKING)** Make `BCDD::Result::Context::Success#and_expose()` to produce a halted success by default. You can turn this off by passing `halted: false`.
39
+
40
+ ### Fixed
41
+
42
+ - Make `BCDD::Result::Context#and_then(&block)` accumulate the result value.
43
+
31
44
  ## [0.9.0] - 2023-12-12
32
45
 
33
46
  ### Added
data/README.md CHANGED
@@ -1569,6 +1569,8 @@ Divide.new.call(10, 5)
1569
1569
  #<BCDD::Result::Context::Success type=:ok value={:number=>2, :number1=>10, :number2=>5}>
1570
1570
  ```
1571
1571
 
1572
+ > PS: The `#and_expose` produces a halted success by default. This means the next step will not be executed even if you call `#and_then` after `#and_expose`. To change this behavior, you can pass `halted: false` to `#and_expose`.
1573
+
1572
1574
  <p align="right"><a href="#-bcddresult">⬆️ &nbsp;back to top</a></p>
1573
1575
 
1574
1576
  ##### Module example (Singleton Methods)
@@ -3,7 +3,7 @@
3
3
  class BCDD::Result::Context::Failure < BCDD::Result::Context
4
4
  include BCDD::Result::Failure::Methods
5
5
 
6
- def and_expose(_type, _keys)
6
+ def and_expose(_type, _keys, **_options)
7
7
  self
8
8
  end
9
9
  end
@@ -3,13 +3,13 @@
3
3
  class BCDD::Result::Context::Success < BCDD::Result::Context
4
4
  include ::BCDD::Result::Success::Methods
5
5
 
6
- def and_expose(type, keys)
6
+ def and_expose(type, keys, halted: true)
7
7
  unless keys.is_a?(::Array) && !keys.empty? && keys.all?(::Symbol)
8
8
  raise ::ArgumentError, 'keys must be an Array of Symbols'
9
9
  end
10
10
 
11
11
  exposed_value = acc.merge(value).slice(*keys)
12
12
 
13
- self.class.new(type: type, value: exposed_value, subject: subject)
13
+ self.class.new(type: type, value: exposed_value, subject: subject, halted: halted)
14
14
  end
15
15
  end
@@ -40,7 +40,7 @@ class BCDD::Result
40
40
  -1
41
41
  end
42
42
 
43
- def call_subject_method(method_name, context)
43
+ def call_and_then_subject_method(method_name, context)
44
44
  method = subject.method(method_name)
45
45
 
46
46
  acc.merge!(value.merge(context))
@@ -55,6 +55,12 @@ class BCDD::Result
55
55
  ensure_result_object(result, origin: :method)
56
56
  end
57
57
 
58
+ def call_and_then_block(block)
59
+ acc.merge!(value)
60
+
61
+ call_and_then_block!(block, acc)
62
+ end
63
+
58
64
  def ensure_result_object(result, origin:)
59
65
  raise_unexpected_outcome_error(result, origin) unless result.is_a?(Context)
60
66
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module BCDD
4
4
  class Result
5
- VERSION = '0.9.0'
5
+ VERSION = '0.9.1'
6
6
  end
7
7
  end
data/lib/bcdd/result.rb CHANGED
@@ -84,16 +84,12 @@ class BCDD::Result
84
84
  tap { yield(value, type) if unknown }
85
85
  end
86
86
 
87
- def and_then(method_name = nil, context = nil)
87
+ def and_then(method_name = nil, context = nil, &block)
88
88
  return self if halted?
89
89
 
90
- method_name && block_given? and raise ::ArgumentError, 'method_name and block are mutually exclusive'
90
+ method_name && block and raise ::ArgumentError, 'method_name and block are mutually exclusive'
91
91
 
92
- return call_subject_method(method_name, context) if method_name
93
-
94
- result = yield(value)
95
-
96
- ensure_result_object(result, origin: :block)
92
+ method_name ? call_and_then_subject_method(method_name, context) : call_and_then_block(block)
97
93
  end
98
94
 
99
95
  def handle
@@ -139,7 +135,7 @@ class BCDD::Result
139
135
  block.call(value, type)
140
136
  end
141
137
 
142
- def call_subject_method(method_name, context)
138
+ def call_and_then_subject_method(method_name, context)
143
139
  method = subject.method(method_name)
144
140
 
145
141
  result =
@@ -153,6 +149,16 @@ class BCDD::Result
153
149
  ensure_result_object(result, origin: :method)
154
150
  end
155
151
 
152
+ def call_and_then_block(block)
153
+ call_and_then_block!(block, value)
154
+ end
155
+
156
+ def call_and_then_block!(block, value)
157
+ result = block.call(value)
158
+
159
+ ensure_result_object(result, origin: :block)
160
+ end
161
+
156
162
  def ensure_result_object(result, origin:)
157
163
  raise Error::UnexpectedOutcome.build(outcome: result, origin: origin) unless result.is_a?(::BCDD::Result)
158
164
 
data/sig/bcdd/result.rbs CHANGED
@@ -55,7 +55,9 @@ class BCDD::Result
55
55
 
56
56
  def kind: -> Symbol
57
57
  def known: (Proc) -> untyped
58
- def call_subject_method: (Symbol, untyped) -> BCDD::Result
58
+ def call_and_then_subject_method: (Symbol, untyped) -> BCDD::Result
59
+ def call_and_then_block: (untyped) -> BCDD::Result
60
+ def call_and_then_block!: (untyped, untyped) -> BCDD::Result
59
61
  def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Result
60
62
  end
61
63
 
@@ -442,7 +444,7 @@ class BCDD::Result::Context < BCDD::Result
442
444
 
443
445
  private
444
446
 
445
- def call_subject_method: (Symbol, Hash[Symbol, untyped]) -> BCDD::Result::Context
447
+ def call_and_then_subject_method: (Symbol, Hash[Symbol, untyped]) -> BCDD::Result::Context
446
448
  def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Result::Context
447
449
 
448
450
  def raise_unexpected_outcome_error: (BCDD::Result::Context | untyped, Symbol) -> void
@@ -452,7 +454,7 @@ class BCDD::Result::Context
452
454
  class Success < BCDD::Result::Context
453
455
  include BCDD::Result::Success::Methods
454
456
 
455
- def and_expose: (Symbol, Array[Symbol]) -> BCDD::Result::Context::Success
457
+ def and_expose: (Symbol, Array[Symbol], halted: bool) -> BCDD::Result::Context::Success
456
458
  end
457
459
 
458
460
  def self.Success: (Symbol, **untyped) -> BCDD::Result::Context::Success
@@ -462,7 +464,7 @@ class BCDD::Result::Context
462
464
  class Failure < BCDD::Result::Context
463
465
  include BCDD::Result::Failure::Methods
464
466
 
465
- def and_expose: (Symbol, Array[Symbol]) -> BCDD::Result::Context::Failure
467
+ def and_expose: (Symbol, Array[Symbol], **untyped) -> BCDD::Result::Context::Failure
466
468
  end
467
469
 
468
470
  def self.Failure: (Symbol, **untyped) -> BCDD::Result::Context::Failure
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcdd-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura