service_actor 3.0.0 → 3.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: 1ce3e96190aef06e630c4e930ad942876f27b8f0dc6a00b33c0ff2104d9be9be
4
- data.tar.gz: 7badaaa07f340dfd66924417d214f070fc50346ec3d9805c4d115757b2845e22
3
+ metadata.gz: a514ff7ba650102221cb5062bdcba419620229af17070f8393b7dfbdbcf20eae
4
+ data.tar.gz: ce94d81e2a1e8cd31cf2b6087b86e71cadd7efa84b0823a420131a80477e7518
5
5
  SHA512:
6
- metadata.gz: f186543f09b78804ea899b57bc8c78e174de83fa205d0a36d74b3089a17b1e6e71f2ddc6c285ae673b5e796b69ab76f327879b57ff6d97a95c4473aa62d1f763
7
- data.tar.gz: 7ecedf103e0b66a462a3cfb9f97a7bdb9ec1ea349b3fe7e2824ac716d9a68f68d29f7dd3828099d7ab6569ae90eac573112317c97a3619a7f1072856727fd1c3
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
@@ -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
@@ -29,7 +29,7 @@ module ServiceActor
29
29
  next if check.call(value)
30
30
 
31
31
  raise ArgumentError,
32
- "Input #{key} must #{name} but was #{value.inspect}."
32
+ "Input #{key} must #{name} but was #{value.inspect}"
33
33
  end
34
34
  end
35
35
 
@@ -27,7 +27,7 @@ module ServiceActor
27
27
  next
28
28
  end
29
29
 
30
- raise(ArgumentError, "Input #{name} on #{self.class} is missing.")
30
+ raise(ArgumentError, "Input #{name} on #{self.class} is missing")
31
31
  end
32
32
 
33
33
  super
@@ -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
@@ -31,7 +31,7 @@ module ServiceActor
31
31
 
32
32
  raise ArgumentError,
33
33
  "The #{origin} \"#{name}\" on #{self.class} does not allow " \
34
- 'nil values.'
34
+ 'nil values'
35
35
  end
36
36
  end
37
37
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ServiceActor
4
- VERSION = '3.0.0'
4
+ VERSION = '3.1.0'
5
5
  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.0.0
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-08-20 00:00:00.000000000 Z
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