try-catch 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +21 -0
- data/README.md +50 -0
- data/Rakefile +1 -0
- data/VERSION +1 -0
- data/files.rb +24 -0
- data/lib/try-catch.rb +117 -0
- data/test/try_catch.rb +3 -0
- data/try-catch.gemspec +24 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 84f2bba2b110f675a2f70f1ff631d8c5d180d13a
|
4
|
+
data.tar.gz: e1a3891ab124ac5c24096806fc1bb0b4f636c1e5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d816e1e719538e3270a1bddaffe5a673b6c8253e41d03ba623d36994da58d564b89fb9df26dfa97646726d0d687c6aa904fb8245b334a520b2d78a473df958d9
|
7
|
+
data.tar.gz: 6203816e7dd020974de6686e9ed63f846f277aa5fde402c7cfee841a7e84ceeaa05a9a37f50ee2fc1381b4d8b730ff28e015213dc5403ca583391d4c9cb457d5
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Adam Luzsi
|
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,50 @@
|
|
1
|
+
try-catch
|
2
|
+
=========
|
3
|
+
|
4
|
+
try catch blocks for Ruby!
|
5
|
+
|
6
|
+
|
7
|
+
### Try catch Block Chain use case
|
8
|
+
|
9
|
+
if you new to ruby and missing the try catch block here is a simple one for you
|
10
|
+
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
|
14
|
+
require 'try-catch'
|
15
|
+
|
16
|
+
try { hello world }.catch{ "not hello world " }
|
17
|
+
#> "not hello world"
|
18
|
+
|
19
|
+
try { "hello world".asdaf }.catch( NoMethodError ) { |ex| "there is and error, because #{ex}" }
|
20
|
+
#> there is and error, because undefined method `asdaf' for "hello world":String
|
21
|
+
|
22
|
+
#> you can cain up multiple catch for specific error
|
23
|
+
try { "hello world".asdaf }.catch( NoMethodError ) { |ex| "there is and error, because #{ex}" }
|
24
|
+
|
25
|
+
puts try { "hello world".asdaf }.catch(ArgumentError) { "it was and argument error" }.catch( NoMethodError ) { |ex| "bla bla #{ex}" }
|
26
|
+
#> "bla bla undefined method `asdaf' for "hello world":String"
|
27
|
+
|
28
|
+
```
|
29
|
+
|
30
|
+
### The each line style
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
|
34
|
+
try { puts "hello world".asdf }
|
35
|
+
catch { |ex| puts ex.to_s.upcase }
|
36
|
+
#> UNDEFINED METHOD `ASDF' FOR "HELLO WORLD":STRING
|
37
|
+
|
38
|
+
```
|
39
|
+
|
40
|
+
or in each line version with specific Exception case
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
|
44
|
+
try { puts "hello world".asdf }
|
45
|
+
catch(ArgumentError) { |ex| puts ex.to_s.capitalize }
|
46
|
+
catch(NoMethodError) { |ex| puts ex.to_s.upcase }
|
47
|
+
|
48
|
+
```
|
49
|
+
|
50
|
+
## Happy Coding!
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.join "bundler","gem_tasks"
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/files.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
### Get Files from dir
|
2
|
+
begin
|
3
|
+
|
4
|
+
module TryCatch
|
5
|
+
@@spec_files = []
|
6
|
+
end
|
7
|
+
|
8
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__),"**","*"))].sort.uniq.each do |one_file_name|
|
9
|
+
|
10
|
+
one_file_name = File.expand_path one_file_name
|
11
|
+
file_name = one_file_name[(File.expand_path(File.dirname(__FILE__)).to_s.length+1)..(one_file_name.length-1)]
|
12
|
+
|
13
|
+
if !one_file_name.include?("pkg")
|
14
|
+
if !File.directory? file_name
|
15
|
+
|
16
|
+
TryCatch.class_variable_get("@@spec_files").push file_name
|
17
|
+
STDOUT.puts file_name if $DEBUG
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/try-catch.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
module TryCatch
|
2
|
+
module EXT; end
|
3
|
+
|
4
|
+
module Memory
|
5
|
+
@@memoryspace = {}
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def save object_id, exception
|
9
|
+
|
10
|
+
begin
|
11
|
+
|
12
|
+
unless exception.class <= Exception
|
13
|
+
raise ArgumentError, "invalid exception attempt to be saved"
|
14
|
+
end
|
15
|
+
|
16
|
+
@@memoryspace[object_id] ||= []
|
17
|
+
|
18
|
+
if @@memoryspace[object_id].count >= 100
|
19
|
+
@@memoryspace[object_id].shift
|
20
|
+
end
|
21
|
+
|
22
|
+
@@memoryspace[object_id].push exception
|
23
|
+
|
24
|
+
return true
|
25
|
+
rescue ArgumentError
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
#loaded_exs= @@memoryspace[object_id]
|
33
|
+
#return nil if loaded_exs.nil?
|
34
|
+
#return loaded_exs.pop unless loaded_exs.class != Array
|
35
|
+
def load object_id
|
36
|
+
( @@memoryspace[object_id] || [] ).last
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module Function
|
44
|
+
class << self
|
45
|
+
|
46
|
+
def try( self_object, *exception_classes, &block )
|
47
|
+
|
48
|
+
exception_classes.each do |exception_class|
|
49
|
+
unless exception_class <= Exception
|
50
|
+
raise ArgumentError, "invalid Exception: #{exception_class}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
exception_classes.push(Exception) if exception_classes.empty?
|
55
|
+
|
56
|
+
begin
|
57
|
+
return block.call
|
58
|
+
rescue *exception_classes => ex
|
59
|
+
TryCatch::Memory.save( self_object.object_id, ex )
|
60
|
+
return ex
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
def catch( self_object, *exception_classes, &block )
|
66
|
+
|
67
|
+
exception_classes.each do |exception_class|
|
68
|
+
unless exception_class <= Exception
|
69
|
+
raise ArgumentError, "invalid Exception: #{exception_class}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
exception_classes.push(Exception) if exception_classes.empty?
|
74
|
+
|
75
|
+
if self_object.class <= Exception
|
76
|
+
exception_obj= self_object
|
77
|
+
else
|
78
|
+
exception_obj= TryCatch::Memory.load( self_object.object_id )
|
79
|
+
end
|
80
|
+
|
81
|
+
return nil if exception_obj.nil?
|
82
|
+
return exception_obj if block.nil?
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
if exception_classes.map{ |exc| exception_obj.class <= exc }.include?(true)
|
87
|
+
|
88
|
+
if block.parameters.empty?
|
89
|
+
return block.call
|
90
|
+
else
|
91
|
+
return block.call exception_obj
|
92
|
+
end
|
93
|
+
|
94
|
+
else
|
95
|
+
return exception_obj
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
module EXT::Object
|
104
|
+
|
105
|
+
def try *exception_classes, &block
|
106
|
+
::TryCatch::Function.try self, *exception_classes, &block
|
107
|
+
end
|
108
|
+
|
109
|
+
def catch *exception_classes, &block
|
110
|
+
::TryCatch::Function.catch self, *exception_classes, &block
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
Object.__send__ :include, TryCatch::EXT::Object
|
data/test/try_catch.rb
ADDED
data/try-catch.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__),"files.rb"))
|
4
|
+
|
5
|
+
### Specification for the new Gem
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
|
8
|
+
spec.name = "try-catch"
|
9
|
+
spec.version = File.open(File.join(File.dirname(__FILE__),"VERSION")).read.split("\n")[0].chomp.gsub(' ','')
|
10
|
+
spec.authors = ["Adam Luzsi"]
|
11
|
+
spec.email = ["adamluzsi@gmail.com"]
|
12
|
+
spec.description = %q{ try catch blocks for Ruby! }
|
13
|
+
spec.summary = %q{ try catch blocks for Ruby! }
|
14
|
+
spec.homepage = "https://github.com/adamluzsi/try-catch"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = TryCatch.class_variable_get("@@spec_files")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
%W[ rake bundler ].each{ |gem_name| spec.add_development_dependency(gem_name) }
|
23
|
+
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: try-catch
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Luzsi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: " try catch blocks for Ruby! "
|
42
|
+
email:
|
43
|
+
- adamluzsi@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- Gemfile
|
49
|
+
- Gemfile.lock
|
50
|
+
- LICENSE
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- VERSION
|
54
|
+
- files.rb
|
55
|
+
- lib/try-catch.rb
|
56
|
+
- test/try_catch.rb
|
57
|
+
- try-catch.gemspec
|
58
|
+
homepage: https://github.com/adamluzsi/try-catch
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.2.2
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: try catch blocks for Ruby!
|
82
|
+
test_files:
|
83
|
+
- test/try_catch.rb
|