porch 0.3.0 → 0.3.1
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/Gemfile.lock +2 -2
- data/README.md +34 -22
- data/lib/porch.rb +1 -0
- data/lib/porch/organizer.rb +13 -3
- data/lib/porch/rescuable.rb +52 -0
- data/lib/porch/version.rb +1 -1
- data/pkg/porch-0.3.0.gem +0 -0
- data/pkg/porch-0.3.1.gem +0 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d75a6afe5bf346fc7d606bbbd64798a9fcae8bf
|
4
|
+
data.tar.gz: 1db71b1a31943f9ec633ba627e1f758d7afd8162
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1ad2be642145f3e72c1d00a883020edcee579f92c568d64446db4a192fe3094af2cd33f204c9ddff6b548f3dd923ecf33f648fad87d05d0c6732ca8cdfb9466
|
7
|
+
data.tar.gz: 5745ce3d37f53abac0355f5a177dc98679e32cc1b727c5da9cebc366e484a9db6ee3d7e9bfa3ee914375eeab5c89e69c3f90657486e806b9dc8480450c9f860f
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
porch (0.3.
|
4
|
+
porch (0.3.1)
|
5
5
|
dry-validation (~> 0.10.4)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
concurrent-ruby (1.0.
|
10
|
+
concurrent-ruby (1.0.5)
|
11
11
|
diff-lcs (1.2.5)
|
12
12
|
dry-configurable (0.5.0)
|
13
13
|
concurrent-ruby (~> 1.0)
|
data/README.md
CHANGED
@@ -74,28 +74,6 @@ end
|
|
74
74
|
|
75
75
|
### Defining steps or actions
|
76
76
|
|
77
|
-
You can define steps as classes and include some nice helper methods. (COMING SOON)
|
78
|
-
|
79
|
-
```
|
80
|
-
# app/services/steps/create_user.rb
|
81
|
-
|
82
|
-
require "porch"
|
83
|
-
|
84
|
-
class CreateUser
|
85
|
-
include Porch::Step
|
86
|
-
|
87
|
-
params do
|
88
|
-
required(:email).filled(type?: :str, format?: RegEx.email_address)
|
89
|
-
required(:password).filled(type?: :str, min_size?: 8)
|
90
|
-
end
|
91
|
-
|
92
|
-
def call(context)
|
93
|
-
context.user = User.create email: context.email, password: context.password
|
94
|
-
context.fail! context.user.errors unless context.user.valid?
|
95
|
-
end
|
96
|
-
end
|
97
|
-
```
|
98
|
-
|
99
77
|
You can define steps as PORO classes that respond to a call method.
|
100
78
|
|
101
79
|
```
|
@@ -199,6 +177,40 @@ if result.failure?
|
|
199
177
|
end
|
200
178
|
```
|
201
179
|
|
180
|
+
### Handling/rescuing from errors
|
181
|
+
|
182
|
+
Errors may be raised within your steps at any point and you may want to handle those errors gracefully.
|
183
|
+
|
184
|
+
You can use the `rescue_from` error handlers to handle various errors gracefully. The error handler will be called for the type of error or a descendent of the type of error.
|
185
|
+
|
186
|
+
You can `rescue_from` various errors with a method.
|
187
|
+
|
188
|
+
```
|
189
|
+
class RegistersUser
|
190
|
+
include Porch::Organizer
|
191
|
+
|
192
|
+
rescue_from [Net::SMTPAuthenticationError, Net::SMTPServerBusy], with: :smtp_error
|
193
|
+
|
194
|
+
private
|
195
|
+
|
196
|
+
def smtp_error(exception)
|
197
|
+
logger.error exception
|
198
|
+
end
|
199
|
+
end
|
200
|
+
```
|
201
|
+
|
202
|
+
You can `rescue_from` various errors with a block.
|
203
|
+
|
204
|
+
```
|
205
|
+
class RegistersUser
|
206
|
+
include Porch::Organizer
|
207
|
+
|
208
|
+
rescue_from Net::SMTPAuthenticationError do |exception|
|
209
|
+
logger.error exception
|
210
|
+
end
|
211
|
+
end
|
212
|
+
```
|
213
|
+
|
202
214
|
### Skipping steps
|
203
215
|
|
204
216
|
At any step, you can skip the remaining actions in the organizer. This stops the running of the remaining actions but the `Porch::Context` will still return a successful `Porch::Context`.
|
data/lib/porch.rb
CHANGED
data/lib/porch/organizer.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative "rescuable"
|
2
|
+
|
1
3
|
module Porch
|
2
4
|
module Organizer
|
3
5
|
attr_reader :context
|
@@ -5,10 +7,18 @@ module Porch
|
|
5
7
|
def with(parameters={})
|
6
8
|
@context = Context.new parameters
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
handle_exceptions do
|
11
|
+
chain = StepChain.new(self)
|
12
|
+
yield chain if block_given?
|
13
|
+
|
14
|
+
chain.execute context
|
15
|
+
end
|
16
|
+
end
|
10
17
|
|
11
|
-
|
18
|
+
def self.included(base)
|
19
|
+
base.class_eval do
|
20
|
+
include Rescuable
|
21
|
+
end
|
12
22
|
end
|
13
23
|
end
|
14
24
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Porch
|
2
|
+
module Rescuable
|
3
|
+
def handle_exceptions
|
4
|
+
yield if block_given?
|
5
|
+
rescue Exception => e
|
6
|
+
rescue_with_handler(e) || raise(e)
|
7
|
+
end
|
8
|
+
|
9
|
+
def handler_for_rescue(exception)
|
10
|
+
_, handler = self.class.rescue_handlers.detect do |exception_class, _|
|
11
|
+
exception_class === exception
|
12
|
+
end
|
13
|
+
|
14
|
+
handler
|
15
|
+
end
|
16
|
+
|
17
|
+
def rescue_with_handler(exception)
|
18
|
+
handler = handler_for_rescue(exception)
|
19
|
+
unless handler.nil?
|
20
|
+
case handler
|
21
|
+
when Symbol
|
22
|
+
self.method(handler).call exception
|
23
|
+
when Proc
|
24
|
+
self.instance_exec exception, &handler
|
25
|
+
end
|
26
|
+
|
27
|
+
exception
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def rescue_from(*klasses, with: nil, &block)
|
33
|
+
handler = block_given? ? block : with
|
34
|
+
raise ArgumentError, \
|
35
|
+
"Requires a handler. Use the with keyword argument or supply a block." \
|
36
|
+
if handler.nil?
|
37
|
+
|
38
|
+
klasses.each do |klass|
|
39
|
+
rescue_handlers << [klass, handler]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def rescue_handlers
|
44
|
+
@rescue_handlers ||= []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.included(base)
|
49
|
+
base.extend ClassMethods
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/porch/version.rb
CHANGED
data/pkg/porch-0.3.0.gem
ADDED
Binary file
|
data/pkg/porch-0.3.1.gem
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: porch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Wright
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/porch/guard_rail/guard.rb
|
94
94
|
- lib/porch/human_error.rb
|
95
95
|
- lib/porch/organizer.rb
|
96
|
+
- lib/porch/rescuable.rb
|
96
97
|
- lib/porch/step_chain.rb
|
97
98
|
- lib/porch/step_decorators/class_step_decorator.rb
|
98
99
|
- lib/porch/step_decorators/method_step_decorator.rb
|
@@ -101,6 +102,8 @@ files:
|
|
101
102
|
- pkg/porch-0.1.0.gem
|
102
103
|
- pkg/porch-0.2.0.gem
|
103
104
|
- pkg/porch-0.2.1.gem
|
105
|
+
- pkg/porch-0.3.0.gem
|
106
|
+
- pkg/porch-0.3.1.gem
|
104
107
|
- porch.gemspec
|
105
108
|
homepage: https://github.com/jwright/porch
|
106
109
|
licenses:
|
@@ -122,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
125
|
version: '0'
|
123
126
|
requirements: []
|
124
127
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.5
|
128
|
+
rubygems_version: 2.4.5
|
126
129
|
signing_key:
|
127
130
|
specification_version: 4
|
128
131
|
summary: A simple service layer pattern for plain old Ruby objects.
|