rescue_each 1.1.2 → 1.1.3
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.
- data/VERSION +1 -1
- data/lib/rescue_each.rb +6 -5
- data/test/rescue_each_test.rb +55 -5
- metadata +24 -13
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.3
|
data/lib/rescue_each.rb
CHANGED
@@ -69,7 +69,7 @@ module RescueEach
|
|
69
69
|
|
70
70
|
RESCUE_EACH_OPTIONS = [:stderr, :error_limit]
|
71
71
|
|
72
|
-
def rescue_each(options = {})
|
72
|
+
def rescue_each(options = {}, &block)
|
73
73
|
|
74
74
|
options.assert_valid_keys :method, :args, *RESCUE_EACH_OPTIONS
|
75
75
|
options.reverse_merge! :method => :each
|
@@ -78,7 +78,7 @@ module RescueEach
|
|
78
78
|
errors = []
|
79
79
|
retval = __send__ options[:method], *options[:args] do |*args|
|
80
80
|
begin
|
81
|
-
|
81
|
+
block.call *args.dup
|
82
82
|
rescue Exception => e
|
83
83
|
|
84
84
|
item = RescueEach::Error::Item.new e, args
|
@@ -88,11 +88,12 @@ module RescueEach
|
|
88
88
|
$stderr.puts "rescue_each error: #{item.short_message}"
|
89
89
|
end
|
90
90
|
|
91
|
-
|
91
|
+
# should fail immediately on Interrupt exceptions (i.e. Ctrl-C)
|
92
|
+
if %w(Interrupt IRB::Abort).include? e.class.name
|
92
93
|
if errors.empty?
|
93
94
|
raise
|
94
95
|
else
|
95
|
-
raise
|
96
|
+
raise e.class, e.message + "\n" + RescueEach::Error.new(errors).to_s
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
@@ -112,7 +113,7 @@ module RescueEach
|
|
112
113
|
|
113
114
|
args = args.dup
|
114
115
|
options = args.extract_options!
|
115
|
-
rescue_options = options.
|
116
|
+
rescue_options = options.slice *RESCUE_EACH_OPTIONS
|
116
117
|
options.except! *RESCUE_EACH_OPTIONS
|
117
118
|
args << options unless options.empty?
|
118
119
|
|
data/test/rescue_each_test.rb
CHANGED
@@ -66,7 +66,7 @@ class RescueEachTest < ActiveSupport::TestCase
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
test "
|
69
|
+
test "rescue_each_with_index args pass through correctly with 2 params" do
|
70
70
|
output = []
|
71
71
|
[:foo, :bar].rescue_each_with_index do |obj,i|
|
72
72
|
output << [obj,i]
|
@@ -75,6 +75,33 @@ class RescueEachTest < ActiveSupport::TestCase
|
|
75
75
|
assert_equal expected, output
|
76
76
|
end
|
77
77
|
|
78
|
+
test "rescue_each_with_index args pass through correctly args param" do
|
79
|
+
output = []
|
80
|
+
[:foo, :bar].rescue_each_with_index do |*args|
|
81
|
+
output << args
|
82
|
+
end
|
83
|
+
expected = [[:foo, 0], [:bar, 1]]
|
84
|
+
assert_equal expected, output
|
85
|
+
end
|
86
|
+
|
87
|
+
test "Hash#rescue_each args for single block param" do
|
88
|
+
input = {:foo => 42, :bar => 12}
|
89
|
+
output = []
|
90
|
+
input.rescue_each do |args|
|
91
|
+
output << args
|
92
|
+
end
|
93
|
+
assert_equal input.to_a, output
|
94
|
+
end
|
95
|
+
|
96
|
+
test "Hash#rescue_each args for key/value block params" do
|
97
|
+
input = {:foo => 42, :bar => 12}
|
98
|
+
output = []
|
99
|
+
input.rescue_each do |k, v|
|
100
|
+
output << [k,v]
|
101
|
+
end
|
102
|
+
assert_equal input.to_a, output
|
103
|
+
end
|
104
|
+
|
78
105
|
test "error object contains args that triggered error" do
|
79
106
|
error_object = nil
|
80
107
|
begin
|
@@ -153,6 +180,26 @@ class RescueEachTest < ActiveSupport::TestCase
|
|
153
180
|
|
154
181
|
end
|
155
182
|
|
183
|
+
test "Ctrl-C from outside IRB should break out of the loop" do
|
184
|
+
|
185
|
+
error_object = nil
|
186
|
+
output = []
|
187
|
+
begin
|
188
|
+
(1..5).rescue_each do |i|
|
189
|
+
raise 'foo bar' if i == 2
|
190
|
+
output << i
|
191
|
+
raise ::Interrupt if i == 4
|
192
|
+
end
|
193
|
+
rescue ::Interrupt => e
|
194
|
+
error_object = e
|
195
|
+
end
|
196
|
+
|
197
|
+
assert_equal [1,3,4], output
|
198
|
+
assert_kind_of ::Interrupt, error_object
|
199
|
+
assert_match /foo bar/, error_object.message
|
200
|
+
|
201
|
+
end
|
202
|
+
|
156
203
|
test "no stderr option doesn't output to stderr" do
|
157
204
|
err = capture_stderr do
|
158
205
|
assert_raise RescueEach::Error do
|
@@ -215,10 +262,13 @@ class RescueEachTest < ActiveSupport::TestCase
|
|
215
262
|
assert_true odds.all? &:odd?
|
216
263
|
end
|
217
264
|
|
218
|
-
test "
|
219
|
-
[:find_each, :find_in_batches].each do |
|
220
|
-
|
221
|
-
|
265
|
+
test "rescued find methods exist on active record objects" do
|
266
|
+
[:find_each, :find_in_batches].each do |method_base|
|
267
|
+
["#{method_base}", "rescue_#{method_base}"].each do |method|
|
268
|
+
[ActiveRecord::Base, ActiveRecord::Base.scoped(:limit => 42)].each do |object|
|
269
|
+
assert_true object.respond_to? method
|
270
|
+
end
|
271
|
+
end
|
222
272
|
end
|
223
273
|
end
|
224
274
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rescue_each
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 1
|
8
|
+
- 3
|
9
|
+
version: 1.1.3
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Jason Weathered
|
@@ -9,29 +14,33 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02
|
17
|
+
date: 2010-05-02 00:00:00 +10:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: activesupport
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
|
-
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
25
32
|
- !ruby/object:Gem::Dependency
|
26
33
|
name: activerecord
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
33
41
|
version: "0"
|
34
|
-
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
35
44
|
description:
|
36
45
|
email: jason@jasoncodes.com
|
37
46
|
executables: []
|
@@ -63,18 +72,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
72
|
requirements:
|
64
73
|
- - ">="
|
65
74
|
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
66
77
|
version: "0"
|
67
|
-
version:
|
68
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
79
|
requirements:
|
70
80
|
- - ">="
|
71
81
|
- !ruby/object:Gem::Version
|
82
|
+
segments:
|
83
|
+
- 0
|
72
84
|
version: "0"
|
73
|
-
version:
|
74
85
|
requirements: []
|
75
86
|
|
76
87
|
rubyforge_project:
|
77
|
-
rubygems_version: 1.3.
|
88
|
+
rubygems_version: 1.3.6
|
78
89
|
signing_key:
|
79
90
|
specification_version: 3
|
80
91
|
summary: Rescue multiple exceptions when enumerating over Enumerable or ActiveRecord objects
|