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 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