pipe-ruby 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -6
- data/lib/pipe/config.rb +3 -1
- data/lib/pipe/reducer.rb +13 -2
- data/lib/pipe/version.rb +1 -1
- data/spec/pipe/config_spec.rb +4 -0
- data/spec/pipe/reducer_spec.rb +75 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0eca86ffad3466f3843db7cb3013985bfc1c3bf
|
4
|
+
data.tar.gz: df2cd7013334b5abce3608c1c85bcd4ca261201a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 918395735261b1110693cfa0c08d933e5c7c8ea5e0a73597a3d067a5fc3b29044f36a47b608dfb5a0c911f9df1f3711ff50fbf765bb6a960b91bff22670a30f8
|
7
|
+
data.tar.gz: 9338db4f769305be5ad63474cca4e4e2ef2fcfebee1f8eb0ade7a2231f992beebfe6e92d842e31be5e823c1d208ba109c911cd72c63f944048214b785d342bf8
|
data/README.md
CHANGED
@@ -55,12 +55,17 @@ configurable options. Here they are with their defaults:
|
|
55
55
|
|
56
56
|
```ruby
|
57
57
|
Pipe::Config.new(
|
58
|
-
:error_handlers => [],
|
59
|
-
|
60
|
-
:
|
61
|
-
|
62
|
-
|
63
|
-
|
58
|
+
:error_handlers => [], # an array of procs to be called when an error
|
59
|
+
# occurs
|
60
|
+
:raise_on_error => true, # tells Pipe to re-raise errors which occur
|
61
|
+
:return_on_error => :subject, # when an error happens and raise error is false
|
62
|
+
# returns the current value of subject defaultly;
|
63
|
+
# if callable, will return the result of the call
|
64
|
+
# if not callable, will return the value
|
65
|
+
:skip_on => false, # a truthy value or proc which tells pipe to skip
|
66
|
+
# the next method in the `through` array
|
67
|
+
:stop_on => false # a truthy value or proc which tells pipe to stop
|
68
|
+
# processing and return the current value
|
64
69
|
)
|
65
70
|
```
|
66
71
|
|
data/lib/pipe/config.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
module Pipe
|
2
2
|
class Config
|
3
3
|
attr_accessor :raise_on_error
|
4
|
-
attr_reader :error_handlers, :skip_on, :stop_on
|
4
|
+
attr_reader :error_handlers, :return_on_error, :skip_on, :stop_on
|
5
5
|
|
6
6
|
def initialize(
|
7
7
|
error_handlers: [],
|
8
8
|
raise_on_error: true,
|
9
|
+
return_on_error: :subject,
|
9
10
|
skip_on: false,
|
10
11
|
stop_on: false
|
11
12
|
)
|
12
13
|
@error_handlers = error_handlers
|
13
14
|
@raise_on_error = raise_on_error
|
15
|
+
@return_on_error = return_on_error
|
14
16
|
self.skip_on = skip_on
|
15
17
|
self.stop_on = stop_on
|
16
18
|
end
|
data/lib/pipe/reducer.rb
CHANGED
@@ -14,8 +14,9 @@ module Pipe
|
|
14
14
|
|
15
15
|
process(subj, method)
|
16
16
|
rescue => e
|
17
|
-
|
18
|
-
|
17
|
+
payload = {:error => e, :method => method, :subject => subj}
|
18
|
+
handle_error(payload)
|
19
|
+
break error_response(payload)
|
19
20
|
end
|
20
21
|
}
|
21
22
|
end
|
@@ -24,6 +25,16 @@ module Pipe
|
|
24
25
|
|
25
26
|
attr_accessor :config, :context, :subject, :through
|
26
27
|
|
28
|
+
def error_response(error:, method:, subject:)
|
29
|
+
if config.return_on_error == :subject
|
30
|
+
subject
|
31
|
+
elsif config.return_on_error.respond_to?(:call)
|
32
|
+
config.return_on_error.call(subject, method, error)
|
33
|
+
else
|
34
|
+
config.return_on_error
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
27
38
|
def handle_error(error:, method:, subject:)
|
28
39
|
process_error_handlers(
|
29
40
|
:error => error,
|
data/lib/pipe/version.rb
CHANGED
data/spec/pipe/config_spec.rb
CHANGED
@@ -10,6 +10,10 @@ describe Pipe::Config do
|
|
10
10
|
expect(Pipe::Config.new.raise_on_error).to eq(true)
|
11
11
|
end
|
12
12
|
|
13
|
+
it "sets return_on_error to :subject" do
|
14
|
+
expect(Pipe::Config.new.return_on_error).to eq(:subject)
|
15
|
+
end
|
16
|
+
|
13
17
|
it "sets skip_on to a proc which returns false" do
|
14
18
|
expect(Pipe::Config.new.skip_on.call).to eq(false)
|
15
19
|
end
|
data/spec/pipe/reducer_spec.rb
CHANGED
@@ -119,10 +119,10 @@ describe Pipe::Reducer do
|
|
119
119
|
context = Class.new do
|
120
120
|
ExpectedError = Class.new(StandardError)
|
121
121
|
|
122
|
-
def bomb
|
122
|
+
def bomb(subject)
|
123
123
|
raise ExpectedError, "BOOM!"
|
124
124
|
end
|
125
|
-
end
|
125
|
+
end.new
|
126
126
|
|
127
127
|
expect(handler1).to receive(:call)
|
128
128
|
expect(handler2).to receive(:call)
|
@@ -142,10 +142,10 @@ describe Pipe::Reducer do
|
|
142
142
|
context = Class.new do
|
143
143
|
AnotherExpectedError = Class.new(StandardError)
|
144
144
|
|
145
|
-
def bomb
|
145
|
+
def bomb(subject)
|
146
146
|
raise AnotherExpectedError, "BOOM!"
|
147
147
|
end
|
148
|
-
end
|
148
|
+
end.new
|
149
149
|
|
150
150
|
expect{
|
151
151
|
Pipe::Reducer.new(
|
@@ -156,5 +156,76 @@ describe Pipe::Reducer do
|
|
156
156
|
).reduce
|
157
157
|
}.to_not raise_error
|
158
158
|
end
|
159
|
+
|
160
|
+
it "honors Config#return_on_error :subject default" do
|
161
|
+
config = Pipe::Config.new(:raise_on_error => false)
|
162
|
+
context = Class.new do
|
163
|
+
AndAnotherExpectedError = Class.new(StandardError)
|
164
|
+
|
165
|
+
def bomb(subject)
|
166
|
+
raise AndAnotherExpectedError, "BOOM!"
|
167
|
+
end
|
168
|
+
end.new
|
169
|
+
subject = Object.new
|
170
|
+
|
171
|
+
expect(
|
172
|
+
Pipe::Reducer.new(
|
173
|
+
:config => config,
|
174
|
+
:context => context,
|
175
|
+
:subject => subject,
|
176
|
+
:through => [:bomb]
|
177
|
+
).reduce
|
178
|
+
).to eq(subject)
|
179
|
+
end
|
180
|
+
|
181
|
+
it "honors Config#return_on_error callable objects" do
|
182
|
+
subject = Object.new
|
183
|
+
config = Pipe::Config.new(
|
184
|
+
:raise_on_error => false,
|
185
|
+
:return_on_error => proc { |subj, method, e|
|
186
|
+
[subj, method, e.class, e.to_s, :hello]
|
187
|
+
}
|
188
|
+
)
|
189
|
+
context = Class.new do
|
190
|
+
YetAnotherExpectedError = Class.new(StandardError)
|
191
|
+
|
192
|
+
def bomb(subject)
|
193
|
+
raise YetAnotherExpectedError, "BOOM!"
|
194
|
+
end
|
195
|
+
end.new
|
196
|
+
expected = [subject, :bomb, YetAnotherExpectedError, "BOOM!", :hello]
|
197
|
+
|
198
|
+
expect(
|
199
|
+
Pipe::Reducer.new(
|
200
|
+
:config => config,
|
201
|
+
:context => context,
|
202
|
+
:subject => subject,
|
203
|
+
:through => [:bomb]
|
204
|
+
).reduce
|
205
|
+
).to eq(expected)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "returns Config#return_on_error when not callable" do
|
209
|
+
config = Pipe::Config.new(
|
210
|
+
:raise_on_error => false,
|
211
|
+
:return_on_error => :error
|
212
|
+
)
|
213
|
+
context = Class.new do
|
214
|
+
OneMoreError = Class.new(StandardError)
|
215
|
+
|
216
|
+
def bomb(subject)
|
217
|
+
raise OneMoreError, "BOOM!"
|
218
|
+
end
|
219
|
+
end.new
|
220
|
+
|
221
|
+
expect(
|
222
|
+
Pipe::Reducer.new(
|
223
|
+
:config => config,
|
224
|
+
:context => context,
|
225
|
+
:subject => Object.new,
|
226
|
+
:through => [:bomb]
|
227
|
+
).reduce
|
228
|
+
).to eq(:error)
|
229
|
+
end
|
159
230
|
end
|
160
231
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipe-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Matthews
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|