rescata 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6630bf8886b66cdfdac2d8bf50faeaf12c77c939
4
+ data.tar.gz: 301a28bfb6323f4661c03986760ecb6b07eb2839
5
+ SHA512:
6
+ metadata.gz: c47d2249c54d3561923562e3f703bc80e56082111b4af19d552a9677ac35101cbff2921ed76bb3555ffe7032287fd4a95c73a51854315ca7a5d7493023a4405b
7
+ data.tar.gz: 47cceaa05f8533cb3a3b4d232a55220edaf93c091d68986ecb9436395bc73b2fea9ca4ed6aaaee8a899c3d19e9a8d363d9c050e74a62752fbd4291fc80397ca4
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Julio Lopez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,213 @@
1
+ # rescata
2
+ Microlibrary for rescue exceptions declaratively in your Ruby classes.
3
+
4
+ Dry up your code from `begin... rescue... ensure.... end`
5
+
6
+ ## Installation
7
+
8
+ Installing Rescata is as simple as running:
9
+
10
+ ```
11
+ $ gem install rescata
12
+ ```
13
+
14
+ Include Rescata in your Gemfile with gem 'rescata' or require it with require 'rescata'.
15
+
16
+ ## Usage
17
+
18
+ ### Rescuing from errors
19
+
20
+ After include `Rescata`, you can rescue any error inherited from `StandardError` passing to `rescata` the method that you want to rescue if something is raised inside of it, and the method you want to execute(in `with` key) for rescue it(both method's names as symbols).
21
+
22
+ ```ruby
23
+ class User
24
+ include Rescata
25
+ rescata :operation, with: :rescuing_operation
26
+
27
+ def operation
28
+ raise "some problem"
29
+ end
30
+
31
+ def rescuing_operation
32
+ "do_something"
33
+ end
34
+ end
35
+
36
+ # Next line execute :rescuing_operation if a raise is launched inside of operation
37
+ # The error will be rescued
38
+ puts User.new.operation
39
+ #=> "do_something"
40
+ ```
41
+
42
+ You can get the error instance if your method derived to rescue can receive an argument.
43
+
44
+ ```ruby
45
+ class User
46
+ include Rescata
47
+ rescata :operation, with: :rescuing_operation
48
+
49
+ def operation
50
+ raise "a problem"
51
+ end
52
+
53
+ def rescuing_operation(e)
54
+ "is happening #{e.message}"
55
+ end
56
+ end
57
+
58
+ puts User.new.operation
59
+ #=> "is happening a problem"
60
+ ```
61
+
62
+ ### Rescuing from an error class
63
+
64
+ Also is possible rescue just from a particular error class, just use `in` key as a hash argument into `rescata` to make that possible.
65
+
66
+ ```ruby
67
+ class User
68
+ include Rescata
69
+ rescata :operation, with: :rescuing_operation, in: ArgumentError
70
+ rescata :other_operation, with: :rescuing_operation, in: NameError
71
+
72
+ def operation
73
+ raise "a problem"
74
+ end
75
+
76
+ def other_operation
77
+ raise NameError, "other problem"
78
+ end
79
+
80
+ def rescuing_operation(e)
81
+ "is happening #{e.message}"
82
+ end
83
+ end
84
+
85
+ # This will be raise an error(in the example above we are just recuing 'operation' from ArgumentError)
86
+ User.new.operation
87
+ #=> RuntimeError: a problem
88
+
89
+ # This will be rescued
90
+ puts User.new.other_operation
91
+ #=> "is happening other problem"
92
+ ```
93
+
94
+ Send an array if you want to rescue for two or more class errors.
95
+
96
+ ```ruby
97
+ class User
98
+ include Rescata
99
+ rescata :operation, with: :rescuing_operation, in: [NameError, ArgumentError]
100
+
101
+ def operation
102
+ raise ArgumentError, "a problem"
103
+ end
104
+
105
+ def rescuing_operation(e)
106
+ "is happening #{e.message}"
107
+ end
108
+ end
109
+
110
+ # This will be rescued because ArgumentError is included into the error classes specified
111
+ puts User.new.operation
112
+ #=> "is happening other problem"
113
+ ```
114
+
115
+ ### Rescuing using lambdas and blocks
116
+
117
+ You can rescue a method using a lambda. Just add it into the `with` key(don't forget receive the error instance if you need it). Or use a block if you want.
118
+
119
+ ```ruby
120
+ class User
121
+ include Rescata
122
+ # Rescuing using a lambda
123
+ rescata :operation, with: lambda{|e| "is happening #{e.message}" }
124
+
125
+ # Rescuing using a block
126
+ rescata :other_operation do |e|
127
+ "is happening #{e.message}"
128
+ end
129
+
130
+ def operation
131
+ raise "a problem"
132
+ end
133
+
134
+ def other_operation
135
+ raise "other problem"
136
+ end
137
+ end
138
+
139
+ # both methods will be rescued
140
+ puts User.new.operation
141
+ #=> "is happening a problem"
142
+
143
+ puts User.new.other_operation
144
+ #=> "is happening other problem"
145
+ ```
146
+
147
+ Also you can still rescuing from particular errors using lambdas or blocks. This gives you freedom to build any custom solution to rescue for specific error classes.
148
+
149
+ ```ruby
150
+ rescata :operation, with: :rescuing_operation, in: CustomError
151
+ rescata :operation, with: lambda{|e| do_something }, in: RuntimeError
152
+ rescata :operation, in: [ArgumentError, NameError] do |e|
153
+ do_something
154
+ end
155
+ ```
156
+
157
+ ### Rescuing multiple methods at once
158
+
159
+ Rescue from multiple methods in the same line sending them into an array as first variable of `rescata`.
160
+
161
+ ```ruby
162
+ # Rescuing multiple methods in many ways
163
+ rescata [:operation, :other_operation], with: :rescuing_operations
164
+ rescata [:operation, :other_operation], with: lambda{|e| do_something }, in: CustomError
165
+ rescata [:operation, :other_operation], in: [CustomError, NameError] do |e|
166
+ do_something
167
+ end
168
+ ```
169
+
170
+ ### Ensuring
171
+
172
+ And we haven't forgotten the ensure actions, you can ensure your methods using `ensuring` key as a hash argument into `rescata`, you can ensure from a method or a lambda, if you opt for lambda it will receive the instance of your class as a variable to do whatever you need.
173
+
174
+ ```ruby
175
+ class User
176
+ attr_accessor :name
177
+
178
+ include Rescata
179
+ rescata :operation, with: :rescuing_operation, ensuring: :ensuring_method
180
+ rescata :other_operation, with: :rescuing_operation, ensuring: lambda{|instance| instance.name = "Piero" }
181
+
182
+ def initialize(name)
183
+ @name = name
184
+ end
185
+
186
+ def operation
187
+ raise "a problem"
188
+ end
189
+
190
+ def other_operation
191
+ raise "other problem"
192
+ end
193
+
194
+ def rescuing_operation
195
+ #do_something
196
+ end
197
+
198
+ def ensuring_method
199
+ @name = "Piero"
200
+ end
201
+ end
202
+
203
+ # Both methods will be rescued and executed its ensure actions
204
+ u = User.new("Julio")
205
+ u.operation
206
+ puts u.name
207
+ #=> "Piero"
208
+
209
+ u = User.new("Julio")
210
+ u.other_operation
211
+ puts u.name
212
+ #=> "Piero"
213
+ ```
data/lib/rescata.rb ADDED
@@ -0,0 +1,72 @@
1
+ # Copyright (c) 2015 Julio Lopez
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+ module Rescata
21
+ VERSION = "0.1.1"
22
+
23
+ def self.included(base)
24
+ class << base; attr_accessor :rescues; end
25
+ base.extend ClassMethods
26
+ base.rescues = {}
27
+ end
28
+
29
+ module ClassMethods
30
+ def rescata(methods, options = {}, &block)
31
+ error_classes = Array(options[:in])
32
+ error_classes.each do |klass|
33
+ raise ArgumentError, 'Error class must be an Exception or sub-class' if klass.is_a?(Class) ? (klass <= Exception).nil? : true
34
+ end
35
+
36
+ options[:with] = block if block_given?
37
+ raise ArgumentError, 'Rescuer is incorrectly, supply it like a Method or a Proc with a hash with key :with as an argument' unless options[:with] && (options[:with].is_a?(Symbol) || options[:with].is_a?(Proc))
38
+
39
+ Array(methods).each do |method_name|
40
+ rescues[method_name] ||= []
41
+ rescues[method_name] << {
42
+ rescuer: options[:with]
43
+ }.merge(options[:in] ? {error_class: error_classes} : {})
44
+ .merge(options[:ensuring] ? {ensurer: options[:ensuring]} : {})
45
+ end
46
+ end
47
+
48
+ def method_added(method_name)
49
+ return unless rescues && collection = rescues[method_name]
50
+ alias_method_name = :"rescuing_old_#{method_name}"
51
+ return if instance_methods.include?(alias_method_name)
52
+ alias_method alias_method_name, method_name
53
+ define_method method_name do
54
+ begin
55
+ send(alias_method_name)
56
+ rescue => e
57
+ handler = collection.select{|i| i[:error_class] ? i[:error_class].include?(e.class) : true }.first
58
+ rescuer, error_classes, ensurer = handler[:rescuer], handler[:error_class], handler[:ensurer]
59
+ raise e if error_classes && !error_classes.include?(e.class)
60
+ case rescuer
61
+ when Symbol
62
+ method(rescuer).arity == 0 ? send(rescuer) : send(rescuer, e)
63
+ when Proc
64
+ rescuer.arity == 0 ? rescuer.call : rescuer.call(e)
65
+ end
66
+ ensure
67
+ ensurer.is_a?(Symbol) ? send(ensurer) : ensurer.call(self) if ensurer
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
data/rescata.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ require "./lib/rescata"
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "rescata"
5
+ s.version = Rescata::VERSION
6
+ s.summary = "Microlibrary for rescue exceptions declaratively in your Ruby classes."
7
+ s.description = "Microlibrary for rescue exceptions declaratively in your Ruby classes."
8
+ s.authors = ["Julio Lopez"]
9
+ s.email = ["ljuliom@gmail.com"]
10
+ s.homepage = "http://github.com/TheBlasfem/rescata"
11
+ s.files = Dir[
12
+ "LICENSE",
13
+ "README.md",
14
+ "lib/**/*.rb",
15
+ "*.gemspec",
16
+ "test/**/*.rb"
17
+ ]
18
+ s.license = "MIT"
19
+ s.add_development_dependency "cutest", "1.1.3"
20
+ end
@@ -0,0 +1,516 @@
1
+ require File.expand_path("../lib/rescata", File.dirname(__FILE__))
2
+
3
+ scope do
4
+ test "raise if rescuer method is not sent" do
5
+ assert_raise(ArgumentError) do
6
+ Class.new do
7
+ include Rescata
8
+ rescata :get_talks
9
+ end
10
+ end
11
+ end
12
+
13
+ test "rescue an error with method" do
14
+ User = Class.new do
15
+ include Rescata
16
+ rescata :get_talks, with: :rescue_get_talks
17
+
18
+ def get_talks
19
+ raise "throwing an error!"
20
+ end
21
+
22
+ def rescue_get_talks
23
+ "rescued!"
24
+ end
25
+ end
26
+
27
+ assert_equal User.new.get_talks, "rescued!"
28
+ end
29
+
30
+ test "rescue an error with method passing the error variable" do
31
+ User = Class.new do
32
+ include Rescata
33
+ rescata :get_talks, with: :rescue_get_talks
34
+
35
+ def get_talks
36
+ raise "i want"
37
+ end
38
+
39
+ def rescue_get_talks(e)
40
+ "rescued because #{e.message}"
41
+ end
42
+ end
43
+
44
+ assert_equal User.new.get_talks, "rescued because i want"
45
+ end
46
+
47
+ test "raise if rescuer is not a method or a proc" do
48
+ assert_raise(ArgumentError) do
49
+ Class.new do
50
+ include Rescata
51
+ rescata :get_talks, with: "whatever"
52
+ end
53
+ end
54
+ end
55
+
56
+ test "raise if error class sent is not a class" do
57
+ assert_raise(ArgumentError) do
58
+ Class.new do
59
+ include Rescata
60
+ rescata :get_talks, with: :rescue_get_talks, in: "whatever"
61
+ end
62
+ end
63
+ end
64
+
65
+ test "raise if error class sent is not a Exception class or subclass" do
66
+ assert_raise(ArgumentError) do
67
+ Class.new do
68
+ include Rescata
69
+ rescata :get_talks, with: :rescue_get_talks, in: User
70
+ end
71
+ end
72
+ end
73
+
74
+ test "rescue from a class error" do
75
+ User = Class.new do
76
+ include Rescata
77
+ rescata :get_talks, with: :rescue_get_talks, in: ArgumentError
78
+
79
+ def get_talks
80
+ raise ArgumentError
81
+ end
82
+
83
+ def rescue_get_talks
84
+ "rescued!"
85
+ end
86
+ end
87
+
88
+ assert_equal User.new.get_talks, "rescued!"
89
+ end
90
+
91
+ test "rescue with method from a class error passing error variable" do
92
+ User = Class.new do
93
+ include Rescata
94
+ rescata :get_talks, with: :rescue_get_talks, in: ArgumentError
95
+
96
+ def get_talks
97
+ raise ArgumentError, "i want"
98
+ end
99
+
100
+ def rescue_get_talks(e)
101
+ "rescued because #{e.message}"
102
+ end
103
+ end
104
+
105
+ assert_equal User.new.get_talks, "rescued because i want"
106
+ end
107
+
108
+ test "raise if different class error raises" do
109
+ User = Class.new do
110
+ include Rescata
111
+ rescata :get_talks, with: :rescue_get_talks, in: NameError
112
+
113
+ def get_talks
114
+ raise StandardError
115
+ end
116
+
117
+ def rescue_get_talks
118
+ "rescued!"
119
+ end
120
+ end
121
+
122
+ assert_raise(StandardError) do
123
+ User.new.get_talks
124
+ end
125
+ end
126
+
127
+ test "raise if error class sent in array is not a class" do
128
+ assert_raise(ArgumentError) do
129
+ Class.new do
130
+ include Rescata
131
+ rescata :get_talks, with: :rescue_get_talks, in: [NameError, "whatever"]
132
+ end
133
+ end
134
+ end
135
+
136
+ test "raise if error class sent in array is not a Exception class or subclass" do
137
+ assert_raise(ArgumentError) do
138
+ Class.new do
139
+ include Rescata
140
+ rescata :get_talks, with: :rescue_get_talks, in: [NameError, User]
141
+ end
142
+ end
143
+ end
144
+
145
+ test "rescue with method from a sent array of error classes" do
146
+ User = Class.new do
147
+ include Rescata
148
+ rescata :get_talks, with: :rescue_get_talks, in: [NameError, ArgumentError]
149
+
150
+ def get_talks
151
+ raise ArgumentError
152
+ end
153
+
154
+ def rescue_get_talks
155
+ "rescued!"
156
+ end
157
+ end
158
+
159
+ assert_equal User.new.get_talks, "rescued!"
160
+ end
161
+
162
+ test "raise if different class error raise from array of error classes" do
163
+ User = Class.new do
164
+ include Rescata
165
+ rescata :get_talks, with: :rescue_get_talks, in: [NameError, ArgumentError]
166
+
167
+ def get_talks
168
+ raise StandardError
169
+ end
170
+
171
+ def rescue_get_talks
172
+ "rescued!"
173
+ end
174
+ end
175
+
176
+ assert_raise(StandardError) do
177
+ User.new.get_talks
178
+ end
179
+ end
180
+
181
+ test "rescue an error with proc" do
182
+ User = Class.new do
183
+ include Rescata
184
+ rescata :get_talks, with: lambda{"rescued"}
185
+
186
+ def get_talks
187
+ raise "throwing an error"
188
+ end
189
+ end
190
+
191
+ assert_equal User.new.get_talks, "rescued"
192
+ end
193
+
194
+ test "rescue an error with proc sending error variable" do
195
+ User = Class.new do
196
+ include Rescata
197
+ rescata :get_talks, with: lambda{|e| "rescued because #{e.message}"}
198
+
199
+ def get_talks
200
+ raise "i want"
201
+ end
202
+ end
203
+
204
+ assert_equal User.new.get_talks, "rescued because i want"
205
+ end
206
+
207
+ test "rescue with proc from a class error passing error variable" do
208
+ User = Class.new do
209
+ include Rescata
210
+ rescata :get_talks, with: lambda{|e| "rescued because #{e.message}"}, in: ArgumentError
211
+
212
+ def get_talks
213
+ raise ArgumentError, "i want"
214
+ end
215
+ end
216
+
217
+ assert_equal User.new.get_talks, "rescued because i want"
218
+ end
219
+
220
+ test "rescue with proc from a sent array of error classes" do
221
+ User = Class.new do
222
+ include Rescata
223
+ rescata :get_talks, with: lambda{"rescued"}, in: [NameError, ArgumentError]
224
+
225
+ def get_talks
226
+ raise ArgumentError
227
+ end
228
+ end
229
+
230
+ assert_equal User.new.get_talks, "rescued"
231
+ end
232
+
233
+ test "rescue an error with block" do
234
+ User = Class.new do
235
+ include Rescata
236
+ rescata :get_talks do
237
+ "rescued"
238
+ end
239
+
240
+ def get_talks
241
+ raise "throwing an error"
242
+ end
243
+ end
244
+
245
+ assert_equal User.new.get_talks, "rescued"
246
+ end
247
+
248
+ test "rescue an error with block sending error variable" do
249
+ User = Class.new do
250
+ include Rescata
251
+ rescata :get_talks do |e|
252
+ "rescued because #{e.message}"
253
+ end
254
+
255
+ def get_talks
256
+ raise "i want"
257
+ end
258
+ end
259
+
260
+ assert_equal User.new.get_talks, "rescued because i want"
261
+ end
262
+
263
+ test "rescue with block from a class error passing error variable" do
264
+ User = Class.new do
265
+ include Rescata
266
+ rescata :get_talks, in: ArgumentError do |e|
267
+ "rescued because #{e.message}"
268
+ end
269
+
270
+ def get_talks
271
+ raise ArgumentError, "i want"
272
+ end
273
+ end
274
+
275
+ assert_equal User.new.get_talks, "rescued because i want"
276
+ end
277
+
278
+ test "rescue with block from a sent array of error classes" do
279
+ User = Class.new do
280
+ include Rescata
281
+ rescata :get_talks, in: [NameError, ArgumentError] do
282
+ "rescued"
283
+ end
284
+
285
+ def get_talks
286
+ raise ArgumentError
287
+ end
288
+ end
289
+
290
+ assert_equal User.new.get_talks, "rescued"
291
+ end
292
+
293
+ test "no screw up with child classes" do
294
+ User = Class.new do
295
+ include Rescata
296
+ rescata :get_talks, with: :rescue_get_talks
297
+
298
+ def get_talks
299
+ raise "OH NOOO"
300
+ end
301
+
302
+ def rescue_get_talks
303
+ "yep"
304
+ end
305
+ end
306
+
307
+ Student = Class.new(User) do
308
+ def demo
309
+ "hi"
310
+ end
311
+ end
312
+
313
+ assert_equal Student.new.demo, "hi"
314
+ end
315
+
316
+ test "rescuing from method of parent class" do
317
+ User = Class.new do
318
+ include Rescata
319
+ rescata :get_talks, with: :rescue_get_talks
320
+
321
+ def get_talks
322
+ raise "OH NOOO"
323
+ end
324
+
325
+ def rescue_get_talks
326
+ "yep"
327
+ end
328
+ end
329
+
330
+ Student = Class.new(User)
331
+ assert_equal Student.new.get_talks, "yep"
332
+ end
333
+
334
+ test "rescuing multiples methods at once with a method" do
335
+ User = Class.new do
336
+ include Rescata
337
+ rescata [:get_talks, :other_method], with: :rescue_get_talks
338
+
339
+ def get_talks
340
+ raise "OH NOOO"
341
+ end
342
+
343
+ def other_method
344
+ raise "OH NOOO"
345
+ end
346
+
347
+ def rescue_get_talks
348
+ "yep"
349
+ end
350
+ end
351
+ assert_equal User.new.get_talks, "yep"
352
+ assert_equal User.new.other_method, "yep"
353
+ end
354
+
355
+ test "rescuing multiples methods at once with a method and particular class error" do
356
+ User = Class.new do
357
+ include Rescata
358
+ rescata [:get_talks, :other_method], with: :rescue_get_talks, in: ArgumentError
359
+
360
+ def get_talks
361
+ raise StandardError, "OH NOOO"
362
+ end
363
+
364
+ def other_method
365
+ raise ArgumentError, "OH NOOO"
366
+ end
367
+
368
+ def rescue_get_talks
369
+ "yep"
370
+ end
371
+ end
372
+
373
+ assert_raise(StandardError) do
374
+ User.new.get_talks
375
+ end
376
+ assert_equal User.new.other_method, "yep"
377
+ end
378
+
379
+ test "rescuing multiples methods at once with lambda and particular class error" do
380
+ User = Class.new do
381
+ include Rescata
382
+ rescata [:get_talks, :other_method], with: lambda{|e| "#{e.message} i want"}, in: ArgumentError
383
+
384
+ def get_talks
385
+ raise StandardError, "OH NOOO"
386
+ end
387
+
388
+ def other_method
389
+ raise ArgumentError, "raised because"
390
+ end
391
+ end
392
+
393
+ assert_raise(StandardError) do
394
+ User.new.get_talks
395
+ end
396
+ assert_equal User.new.other_method, "raised because i want"
397
+ end
398
+
399
+ test "rescuing multiples methods at once with block and particular class error" do
400
+ User = Class.new do
401
+ include Rescata
402
+ rescata [:get_talks, :other_method], in: ArgumentError do |e|
403
+ "#{e.message} i want"
404
+ end
405
+
406
+ def get_talks
407
+ raise StandardError, "OH NOOO"
408
+ end
409
+
410
+ def other_method
411
+ raise ArgumentError, "raised because"
412
+ end
413
+ end
414
+
415
+ assert_raise(StandardError) do
416
+ User.new.get_talks
417
+ end
418
+ assert_equal User.new.other_method, "raised because i want"
419
+ end
420
+
421
+ test "rescuing same method with multiple rescatas as first assert" do
422
+ User = Class.new do
423
+ include Rescata
424
+ rescata :get_talks, with: :rescue_get_talks, in: StandardError
425
+ rescata :get_talks, with: :rescue_get_talks2, in: ArgumentError
426
+
427
+ def get_talks
428
+ raise StandardError, "OH NOOO"
429
+ end
430
+
431
+ def rescue_get_talks
432
+ "yep"
433
+ end
434
+
435
+ def rescue_get_talks2
436
+ "yep2"
437
+ end
438
+ end
439
+
440
+ assert_equal User.new.get_talks, "yep"
441
+ end
442
+
443
+ test "rescuing same method with multiple rescatas as last assert" do
444
+ User = Class.new do
445
+ include Rescata
446
+ rescata :get_talks, with: :rescue_get_talks, in: StandardError
447
+ rescata :get_talks, with: :rescue_get_talks2, in: ArgumentError
448
+
449
+ def get_talks
450
+ raise ArgumentError, "OH NOOO"
451
+ end
452
+
453
+ def rescue_get_talks
454
+ "yep"
455
+ end
456
+
457
+ def rescue_get_talks2
458
+ "yep2"
459
+ end
460
+ end
461
+
462
+ assert_equal User.new.get_talks, "yep2"
463
+ end
464
+
465
+ test "ensure with a method" do
466
+ User = Class.new do
467
+ include Rescata
468
+ rescata :get_talks, with: :rescue_get_talks, ensuring: :ensure_method
469
+
470
+ attr_accessor :x
471
+ def initialize
472
+ @x = 1
473
+ end
474
+
475
+ def get_talks
476
+ raise "throwing an error!"
477
+ end
478
+
479
+ def rescue_get_talks
480
+ "rescued!"
481
+ end
482
+
483
+ def ensure_method
484
+ @x += 1
485
+ end
486
+ end
487
+
488
+ u = User.new
489
+ u.get_talks
490
+ assert_equal u.x, 2
491
+ end
492
+
493
+ test "ensure with a lambda" do
494
+ User = Class.new do
495
+ include Rescata
496
+ rescata :get_talks, with: :rescue_get_talks, ensuring: lambda{|u| u.x += 1 }
497
+
498
+ attr_accessor :x
499
+ def initialize
500
+ @x = 1
501
+ end
502
+
503
+ def get_talks
504
+ raise "throwing an error!"
505
+ end
506
+
507
+ def rescue_get_talks
508
+ "rescued!"
509
+ end
510
+ end
511
+
512
+ u = User.new
513
+ u.get_talks
514
+ assert_equal u.x, 2
515
+ end
516
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rescata
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Julio Lopez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cutest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.3
27
+ description: Microlibrary for rescue exceptions declaratively in your Ruby classes.
28
+ email:
29
+ - ljuliom@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - LICENSE
35
+ - README.md
36
+ - lib/rescata.rb
37
+ - rescata.gemspec
38
+ - test/test_rescata.rb
39
+ homepage: http://github.com/TheBlasfem/rescata
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.4.5
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Microlibrary for rescue exceptions declaratively in your Ruby classes.
63
+ test_files: []