service_actor 3.0.0 → 3.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.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/service_actor/base.rb +2 -0
- data/lib/service_actor/conditionable.rb +1 -1
- data/lib/service_actor/defaultable.rb +1 -1
- data/lib/service_actor/failable.rb +40 -0
- data/lib/service_actor/nil_checkable.rb +1 -1
- data/lib/service_actor/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a514ff7ba650102221cb5062bdcba419620229af17070f8393b7dfbdbcf20eae
|
4
|
+
data.tar.gz: ce94d81e2a1e8cd31cf2b6087b86e71cadd7efa84b0823a420131a80477e7518
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0ef5dc251c17236382350ffbed06936b344dfa7276f69cc67466cb69a4bcfd408d2017d831913f12db7d72cc7b3b9743223ebd75669c23b9b04c1619480651c
|
7
|
+
data.tar.gz: a038729c6b37a9f6a1f29ef02fc1bc451faa4bb1eb1da62f7feef29f585c778be7cce93d62bedb81195fa6ee4fde814284778693954b8af706453730c2edc442
|
data/README.md
CHANGED
@@ -337,6 +337,20 @@ end
|
|
337
337
|
|
338
338
|
You can use this to trigger an early success.
|
339
339
|
|
340
|
+
### Fail on argument error
|
341
|
+
|
342
|
+
By default, errors on inputs will raise an error, even when using `.result`
|
343
|
+
instead of `.call`. If instead you want to mark the actor as failed, you can
|
344
|
+
catch the exception to treat it as an actor failure:
|
345
|
+
|
346
|
+
```rb
|
347
|
+
class PlaceOrder < Actor
|
348
|
+
fail_on ServiceActor::ArgumentError
|
349
|
+
|
350
|
+
# …
|
351
|
+
end
|
352
|
+
```
|
353
|
+
|
340
354
|
## Use with Rails
|
341
355
|
|
342
356
|
The [service_actor-rails](https://github.com/sunny/actor-rails/) gem includes a
|
data/lib/service_actor/base.rb
CHANGED
@@ -19,6 +19,7 @@ require 'service_actor/nil_checkable'
|
|
19
19
|
require 'service_actor/conditionable'
|
20
20
|
require 'service_actor/defaultable'
|
21
21
|
require 'service_actor/collectionable'
|
22
|
+
require 'service_actor/failable'
|
22
23
|
|
23
24
|
module ServiceActor
|
24
25
|
module Base
|
@@ -34,6 +35,7 @@ module ServiceActor
|
|
34
35
|
base.include(Conditionable)
|
35
36
|
base.include(Defaultable)
|
36
37
|
base.include(Collectionable)
|
38
|
+
base.include(Failable)
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ServiceActor
|
4
|
+
# Adds the `fail_on` DSL to actors. This allows you to call `.result` and get
|
5
|
+
# back a failed actor instead of raising an exception.
|
6
|
+
#
|
7
|
+
# class ApplicationActor < Actor
|
8
|
+
# fail_on ServiceActor::ArgumentError
|
9
|
+
# end
|
10
|
+
module Failable
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(ClassMethods)
|
13
|
+
base.prepend(PrependedMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def inherited(child)
|
18
|
+
super
|
19
|
+
|
20
|
+
child.fail_ons.append(*fail_ons)
|
21
|
+
end
|
22
|
+
|
23
|
+
def fail_on(*exceptions)
|
24
|
+
fail_ons.append(*exceptions)
|
25
|
+
end
|
26
|
+
|
27
|
+
def fail_ons
|
28
|
+
@fail_ons ||= []
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module PrependedMethods
|
33
|
+
def _call
|
34
|
+
super
|
35
|
+
rescue *self.class.fail_ons => e
|
36
|
+
fail!(error: e.message)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_actor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sunny Ripert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-performance
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: code-scanning-rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,6 +142,7 @@ files:
|
|
128
142
|
- lib/service_actor/core.rb
|
129
143
|
- lib/service_actor/defaultable.rb
|
130
144
|
- lib/service_actor/error.rb
|
145
|
+
- lib/service_actor/failable.rb
|
131
146
|
- lib/service_actor/failure.rb
|
132
147
|
- lib/service_actor/nil_checkable.rb
|
133
148
|
- lib/service_actor/playable.rb
|