operatic 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +5 -1
- data/CHANGELOG.md +4 -0
- data/README.md +40 -0
- data/lib/operatic/result.rb +20 -3
- data/lib/operatic/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05be6b41b0969a2f2ae37af1a149095939d78b8724591d7598c46543f15d9070
|
4
|
+
data.tar.gz: 071dc0a5a5d652476a33498206e5e7a34e1c911cd6276018d9022b0558628815
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e76718b015b9f69c0d7fb8b9b600baacd95abfac4656b1c3d926f1c59b66e2d55e092f0c1cf2382978396fb03d65ce8a0f114f78eb9ee27879d28040e62426ad
|
7
|
+
data.tar.gz: f8adfcf7e3852cf6031ad407b1ea9f0cbdd82d9cd7983bf71fe5fab46c769997406ca58bccfcaddd2bc18ed8e828f29420b937ba15db3ffbdf8b2a5bbfba50aa
|
data/.github/workflows/ruby.yml
CHANGED
@@ -20,4 +20,8 @@ jobs:
|
|
20
20
|
with:
|
21
21
|
bundler-cache: true
|
22
22
|
ruby-version: ${{ matrix.ruby }}
|
23
|
-
-
|
23
|
+
- name: 'Set RSpec exclude pattern for Ruby < 2.7'
|
24
|
+
run: echo "::set-output name=value::**/*_gte_ruby_2_7_spec.rb"
|
25
|
+
if: matrix.ruby == '2.5' || matrix.ruby == '2.6'
|
26
|
+
id: rspec_exclude_pattern
|
27
|
+
- run: bundle exec rspec --exclude-pattern=${{ steps.rspec_exclude_pattern.outputs.value }}
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## Version 0.6.0 - 2022-08-22
|
4
|
+
|
5
|
+
- Support pattern matching a Result (in Ruby 2.7+). <https://github.com/benpickles/operatic/pull/12>
|
6
|
+
|
3
7
|
## Version 0.5.0 - 2022-06-23
|
4
8
|
|
5
9
|
- Support custom initialize method to aid compatibility with other libraries. <https://github.com/benpickles/operatic/pull/11>
|
data/README.md
CHANGED
@@ -49,6 +49,17 @@ result[:message] # => nil
|
|
49
49
|
result.to_h # => {}
|
50
50
|
```
|
51
51
|
|
52
|
+
An `Operatic::Result` also supports pattern matching in Ruby 2.7+ returning an array of `[success, data]`:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
case SayHello.call(name: 'Dave')
|
56
|
+
in [true, { message: }]
|
57
|
+
# Result is a success, do something with the `message` variable.
|
58
|
+
in [false, _]
|
59
|
+
# Result is a failure, do something else.
|
60
|
+
end
|
61
|
+
```
|
62
|
+
|
52
63
|
A Rails controller might use Operatic like this:
|
53
64
|
|
54
65
|
```ruby
|
@@ -65,6 +76,35 @@ class HellosController < ApplicationController
|
|
65
76
|
end
|
66
77
|
```
|
67
78
|
|
79
|
+
Or a pattern matching alternative:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
class HellosController < ApplicationController
|
83
|
+
def create
|
84
|
+
case SayHello.call(name: params[:name])
|
85
|
+
in [true, { message: }]
|
86
|
+
render plain: message
|
87
|
+
in [false, _]
|
88
|
+
render :new
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
## Development
|
95
|
+
|
96
|
+
Run the tests with:
|
97
|
+
|
98
|
+
```
|
99
|
+
bundle exec rspec
|
100
|
+
```
|
101
|
+
|
102
|
+
Generate Yard documentation with:
|
103
|
+
|
104
|
+
```
|
105
|
+
bundle exec yardoc
|
106
|
+
```
|
107
|
+
|
68
108
|
## License
|
69
109
|
|
70
110
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/operatic/result.rb
CHANGED
@@ -34,14 +34,31 @@ module Operatic
|
|
34
34
|
@data[key] = value
|
35
35
|
end
|
36
36
|
|
37
|
+
# Returns an array of success and data.
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# result = Result.new.success!(message: 'Hello world')
|
41
|
+
#
|
42
|
+
# case result
|
43
|
+
# in [true, { message: }]
|
44
|
+
# # Result is a success, do something with the `message` variable.
|
45
|
+
# in [false, _]
|
46
|
+
# # Result is a failure, do something else.
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# @return [Array(Boolean, Hash<Symbol, anything>)]
|
50
|
+
def deconstruct
|
51
|
+
[@success, @data]
|
52
|
+
end
|
53
|
+
|
37
54
|
# Mark the result as a failure, optionally attach +data+ via kwargs, and
|
38
55
|
# freeze the object so it cannot be modified further.
|
39
56
|
#
|
40
57
|
# *Note*: Calling {#success!} or {#failure!} more than once will raise a
|
41
58
|
# +FrozenError+.
|
42
59
|
def failure!(**data)
|
43
|
-
set_data(**data)
|
44
60
|
@success = false
|
61
|
+
set_data(data)
|
45
62
|
freeze
|
46
63
|
end
|
47
64
|
|
@@ -64,8 +81,8 @@ module Operatic
|
|
64
81
|
# *Note*: Calling {#success!} or {#failure!} more than once will raise a
|
65
82
|
# +FrozenError+.
|
66
83
|
def success!(**data)
|
67
|
-
set_data(**data)
|
68
84
|
@success = true
|
85
|
+
set_data(data)
|
69
86
|
freeze
|
70
87
|
end
|
71
88
|
|
@@ -82,7 +99,7 @@ module Operatic
|
|
82
99
|
end
|
83
100
|
|
84
101
|
private
|
85
|
-
def set_data(
|
102
|
+
def set_data(data)
|
86
103
|
data.each do |key, value|
|
87
104
|
@data[key] = value
|
88
105
|
end
|
data/lib/operatic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: operatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Pickles
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|