bcdd-result 1.0.0 → 1.1.0

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: 78e33ee42ffa86c0eea3c6dc522ae0bec103bb70d24a1f31103b60cda7bead6e
4
- data.tar.gz: 8919d24f1b3d903ff164717e5930f8a4e17c66ede1a93f303ffacceacdc31bb1
3
+ metadata.gz: 65c4eca57e46f7c344320d812e2bf95d4ca6e1779fe03d3f0903baf747998f4c
4
+ data.tar.gz: ca668bce32035b2dacf6d4b5cde769b3da0302ebb005ae6d920267b79b4e1777
5
5
  SHA512:
6
- metadata.gz: 9c504322d2243a50ee18f1369a110af0c5fa45b07c55628f7dac30bacc2348299e1d2207474dcd15fc0a92ec071016763c4b02a0a9bbc2b402a20cf8a7b77b66
7
- data.tar.gz: fd5706097d3057addfe8b9eccb3094ef3a3567e90f93bc3218b54ec192879a39d6a68464cac75b8606b1df25f55736a3b69c02682937816c710df5c17d8abcea
6
+ metadata.gz: 659e109cbf9782ea83b351d775b4d854d40769cefc5193590cc45fcd2b4857e8b321fb92be479ab5ecff0affcc765c2d8ddafabcc8a57fad6f2a7f5c4be5f9c5
7
+ data.tar.gz: 047f861d008d7f4831d3b351c7162e4eda9108febad3ae425a14dbe9e092502010de44d56854f9c04e3c61a470ba6f6fc7ff1931a0ac8952460930b7e650f637
data/CHANGELOG.md CHANGED
@@ -1,50 +1,61 @@
1
1
  - [\[Unreleased\]](#unreleased)
2
- - [1.0.0 - 2024-03-16](#100---2024-03-16)
2
+ - [1.1.0 - 2024-03-25](#110---2024-03-25)
3
3
  - [Added](#added)
4
+ - [1.0.0 - 2024-03-16](#100---2024-03-16)
5
+ - [Added](#added-1)
4
6
  - [Changed](#changed)
5
7
  - [\[0.13.0\] - 2024-02-01](#0130---2024-02-01)
6
- - [Added](#added-1)
8
+ - [Added](#added-2)
7
9
  - [Changed](#changed-1)
8
10
  - [\[0.12.0\] - 2024-01-07](#0120---2024-01-07)
9
- - [Added](#added-2)
11
+ - [Added](#added-3)
10
12
  - [Changed](#changed-2)
11
13
  - [\[0.11.0\] - 2024-01-02](#0110---2024-01-02)
12
- - [Added](#added-3)
14
+ - [Added](#added-4)
13
15
  - [Changed](#changed-3)
14
16
  - [\[0.10.0\] - 2023-12-31](#0100---2023-12-31)
15
- - [Added](#added-4)
17
+ - [Added](#added-5)
16
18
  - [\[0.9.1\] - 2023-12-12](#091---2023-12-12)
17
19
  - [Changed](#changed-4)
18
20
  - [Fixed](#fixed)
19
21
  - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
20
- - [Added](#added-5)
22
+ - [Added](#added-6)
21
23
  - [Changed](#changed-5)
22
24
  - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
23
- - [Added](#added-6)
25
+ - [Added](#added-7)
24
26
  - [Changed](#changed-6)
25
27
  - [Removed](#removed)
26
28
  - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
27
- - [Added](#added-7)
29
+ - [Added](#added-8)
28
30
  - [Changed](#changed-7)
29
31
  - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
30
- - [Added](#added-8)
32
+ - [Added](#added-9)
31
33
  - [Changed](#changed-8)
32
34
  - [\[0.5.0\] - 2023-10-09](#050---2023-10-09)
33
- - [Added](#added-9)
34
- - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
35
35
  - [Added](#added-10)
36
+ - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
37
+ - [Added](#added-11)
36
38
  - [Changed](#changed-9)
37
39
  - [Removed](#removed-1)
38
40
  - [\[0.3.0\] - 2023-09-26](#030---2023-09-26)
39
- - [Added](#added-11)
40
- - [\[0.2.0\] - 2023-09-26](#020---2023-09-26)
41
41
  - [Added](#added-12)
42
+ - [\[0.2.0\] - 2023-09-26](#020---2023-09-26)
43
+ - [Added](#added-13)
42
44
  - [Removed](#removed-2)
43
45
  - [\[0.1.0\] - 2023-09-25](#010---2023-09-25)
44
- - [Added](#added-13)
46
+ - [Added](#added-14)
45
47
 
46
48
  ## [Unreleased]
47
49
 
50
+ ## 1.1.0 - 2024-03-25
51
+
52
+ ### Added
53
+
54
+ - Add some Hash's methods to `BCDD::Context`. They are:
55
+ - `#slice` to extract only the desired keys.
56
+ - `#[]`, `#dig`, `#fetch` to access the values.
57
+ - `#values_at` and `#fetch_values` to get the values of the desired keys.
58
+
48
59
  ## 1.0.0 - 2024-03-16
49
60
 
50
61
  ### Added
data/README.md CHANGED
@@ -63,7 +63,7 @@ Use it to enable the [Railway Oriented Programming](https://fsharpforfunandprofi
63
63
  - [`BCDD::Result::Expectations.mixin` add-ons](#bcddresultexpectationsmixin-add-ons)
64
64
  - [`BCDD::Context`](#bcddcontext)
65
65
  - [Defining successes and failures](#defining-successes-and-failures)
66
- - [Constant aliases](#constant-aliases)
66
+ - [Hash methods](#hash-methods)
67
67
  - [`BCDD::Context.mixin`](#bcddcontextmixin)
68
68
  - [Class example (Instance Methods)](#class-example-instance-methods-1)
69
69
  - [`and_expose`](#and_expose)
@@ -1436,20 +1436,29 @@ BCDD::Context::Success(:ok, **{ message: 'hashes can be converted to keyword arg
1436
1436
 
1437
1437
  <p align="right"><a href="#-bcddresult">⬆️ &nbsp;back to top</a></p>
1438
1438
 
1439
- #### Constant aliases
1439
+ #### Hash methods
1440
1440
 
1441
- You can configure `Context` or `BCDD::Context` as an alias for `BCDD::Context`. This is helpful to define a standard way to avoid the full constant name/path in your code.
1441
+ The `BCDD::Context` only accepts hashes as its values. Because of this, its instances have some Hash's methods to query/access the values. The available methods are:
1442
+
1443
+ - `#slice` to extract only the desired keys.
1444
+ - `#[]`, `#dig`, `#fetch` to access the values.
1445
+ - `#values_at` and `#fetch_values` to get the values of the desired keys.
1442
1446
 
1443
1447
  ```ruby
1444
- BCDD::Result.configuration do |config|
1445
- config.context_alias.enable!('BCDD::Context')
1448
+ result = BCDD::Context::Success(:ok, a: 1, b: 2, c: {d: 4})
1446
1449
 
1447
- # or
1450
+ result[:a] # 1
1451
+ result.fetch(:a) # 1
1452
+ result.dig(:c, :d) # 4
1448
1453
 
1449
- config.context_alias.enable!('Context')
1450
- end
1454
+ result.slice(:a, :b) # {:a=>1, :b=>2}
1455
+
1456
+ result.values_at(:a, :b) # [1, 2]
1457
+ result.fetch_values(:a, :b) # [1, 2]
1451
1458
  ```
1452
1459
 
1460
+ These methods are available for `BCDD::Context::Success` and `BCDD::Context::Failure` instances.
1461
+
1453
1462
  <p align="right"><a href="#-bcddresult">⬆️ &nbsp;back to top</a></p>
1454
1463
 
1455
1464
  #### `BCDD::Context.mixin`
@@ -28,7 +28,7 @@ module BCDD
28
28
  end
29
29
 
30
30
  def self.ensure_result_object(source, value, result)
31
- return result.tap { result.send(:acc).then { _1.merge!(value.merge(_1)) } } if result.is_a?(Context)
31
+ return result.tap { result.send(:memo).then { _1.merge!(value.merge(_1)) } } if result.is_a?(Context)
32
32
 
33
33
  raise Result::Error::UnexpectedOutcome.build(outcome: result, origin: source,
34
34
  expected: Context::EXPECTED_OUTCOME)
@@ -8,12 +8,12 @@ class BCDD::Context
8
8
  class Success < self
9
9
  include ::BCDD::Success
10
10
 
11
- FetchValues = ->(acc_values, keys) do
12
- fetched_values = acc_values.fetch_values(*keys)
11
+ FetchValues = ->(memo_values, keys) do
12
+ fetched_values = memo_values.fetch_values(*keys)
13
13
 
14
14
  keys.zip(fetched_values).to_h
15
15
  rescue ::KeyError => e
16
- message = "#{e.message}. Available to expose: #{acc_values.keys.map(&:inspect).join(', ')}"
16
+ message = "#{e.message}. Available to expose: #{memo_values.keys.map(&:inspect).join(', ')}"
17
17
 
18
18
  raise Error::InvalidExposure, message
19
19
  end
@@ -25,9 +25,9 @@ class BCDD::Context
25
25
 
26
26
  EventLogs.tracking.reset_and_then!
27
27
 
28
- acc_values = acc.merge(value)
28
+ memo_values = memo.merge(value)
29
29
 
30
- value_to_expose = FetchValues.call(acc_values, keys)
30
+ value_to_expose = FetchValues.call(memo_values, keys)
31
31
 
32
32
  expectations = type_checker.expectations
33
33
 
data/lib/bcdd/context.rb CHANGED
@@ -20,7 +20,7 @@ class BCDD::Context < BCDD::Result
20
20
  def initialize(type:, value:, source: nil, expectations: nil, terminal: nil)
21
21
  value.is_a?(::Hash) or raise ::ArgumentError, 'value must be a Hash'
22
22
 
23
- @acc = {}
23
+ @memo = {}
24
24
 
25
25
  super
26
26
  end
@@ -32,14 +32,38 @@ class BCDD::Context < BCDD::Result
32
32
  def and_then!(source, **injected_value)
33
33
  _call = injected_value.delete(:_call)
34
34
 
35
- acc.merge!(injected_value)
35
+ memo.merge!(injected_value)
36
36
 
37
37
  super(source, injected_value, _call: _call)
38
38
  end
39
39
 
40
+ def [](key)
41
+ value[key]
42
+ end
43
+
44
+ def dig(...)
45
+ value.dig(...)
46
+ end
47
+
48
+ def fetch(...)
49
+ value.fetch(...)
50
+ end
51
+
52
+ def slice(...)
53
+ value.slice(...)
54
+ end
55
+
56
+ def values_at(...)
57
+ value.values_at(...)
58
+ end
59
+
60
+ def fetch_values(...)
61
+ value.fetch_values(...)
62
+ end
63
+
40
64
  protected
41
65
 
42
- attr_reader :acc
66
+ attr_reader :memo
43
67
 
44
68
  private
45
69
 
@@ -54,31 +78,31 @@ class BCDD::Context < BCDD::Result
54
78
  end
55
79
 
56
80
  def call_and_then_source_method!(method, injected_value)
57
- acc.merge!(value.merge(injected_value))
81
+ memo.merge!(value.merge(injected_value))
58
82
 
59
83
  case SourceMethodArity[method]
60
84
  when 0 then source.send(method.name)
61
- when 1 then source.send(method.name, **acc)
85
+ when 1 then source.send(method.name, **memo)
62
86
  else raise Error::InvalidSourceMethodArity.build(source: source, method: method, max_arity: 1)
63
87
  end
64
88
  end
65
89
 
66
90
  def call_and_then_block!(block)
67
- acc.merge!(value)
91
+ memo.merge!(value)
68
92
 
69
- block.call(acc)
93
+ block.call(memo)
70
94
  end
71
95
 
72
96
  def call_and_then_callable!(source, value:, injected_value:, method_name:)
73
- acc.merge!(value.merge(injected_value))
97
+ memo.merge!(value.merge(injected_value))
74
98
 
75
- CallableAndThen::Caller.call(source, value: acc, injected_value: injected_value, method_name: method_name)
99
+ CallableAndThen::Caller.call(source, value: memo, injected_value: injected_value, method_name: method_name)
76
100
  end
77
101
 
78
102
  def ensure_result_object(result, origin:)
79
103
  raise_unexpected_outcome_error(result, origin) unless result.is_a?(BCDD::Context)
80
104
 
81
- return result.tap { _1.acc.merge!(acc) } if result.source.equal?(source)
105
+ return result.tap { _1.memo.merge!(memo) } if result.source.equal?(source)
82
106
 
83
107
  raise Error::InvalidResultSource.build(given_result: result, expected_source: source)
84
108
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module BCDD
4
4
  class Result
5
- VERSION = '1.0.0'
5
+ VERSION = '1.1.0'
6
6
  end
7
7
  end
data/sig/bcdd/context.rbs CHANGED
@@ -3,7 +3,7 @@ class BCDD::Context < BCDD::Result
3
3
 
4
4
  SourceMethodArity: ^(Method) -> Integer
5
5
 
6
- attr_reader acc: Hash[Symbol, untyped]
6
+ attr_reader memo: Hash[Symbol, untyped]
7
7
 
8
8
  def initialize: (
9
9
  type: Symbol,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcdd-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-16 00:00:00.000000000 Z
11
+ date: 2024-03-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Unleash a pragmatic and observable use of Result Pattern and Railway-Oriented
14
14
  Programming in Ruby.
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  - !ruby/object:Gem::Version
161
161
  version: '0'
162
162
  requirements: []
163
- rubygems_version: 3.5.6
163
+ rubygems_version: 3.1.6
164
164
  signing_key:
165
165
  specification_version: 4
166
166
  summary: Unleash a pragmatic and observable use of Result Pattern and Railway-Oriented