try-catch 1.0.0
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 +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
|