dolzenko 0.0.10 → 0.0.11
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/dolzenko.gemspec +0 -0
- data/lib/dolzenko/django_f_object.rb +213 -0
- data/lib/dolzenko/django_q_object.rb +176 -0
- data/lib/dolzenko/error_print.rb +169 -0
- data/lib/dolzenko/gist_readme.rb +20 -0
- data/lib/dolzenko/includable_with_options.rb +106 -0
- data/lib/dolzenko/io_interceptor.rb +64 -0
- data/lib/dolzenko/remote_download.rb +90 -0
- data/lib/dolzenko/shell_out.rb +386 -0
- data/lib/dolzenko/try_block.rb +189 -0
- data/lib/dolzenko-light.rb +11 -0
- data/lib/dolzenko.rb +1 -11
- metadata +13 -3
@@ -0,0 +1,189 @@
|
|
1
|
+
module TryBlock
|
2
|
+
def self.install!
|
3
|
+
unless Object.include?(self)
|
4
|
+
Object.send(:include, self)
|
5
|
+
Object.send(:public, :try_block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def try_block(&block)
|
10
|
+
raise ArgumentError, "should be given block" unless block
|
11
|
+
|
12
|
+
return if self.nil?
|
13
|
+
|
14
|
+
caller_size = caller.size
|
15
|
+
|
16
|
+
# JRuby reports this weird ":1" line in caller
|
17
|
+
if RUBY_PLATFORM =~ /\bjava\b/ && caller[-1] == ":1"
|
18
|
+
caller_size -= 1
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
self.instance_eval(&block)
|
23
|
+
rescue NoMethodError => e
|
24
|
+
if e.backtrace.size - caller_size == 3 &&
|
25
|
+
e.message =~ /^undefined method.+for nil:NilClass$/
|
26
|
+
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
raise
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def TryBlock(&block)
|
35
|
+
raise ArgumentError, "should be given block" unless block
|
36
|
+
|
37
|
+
return if self.nil?
|
38
|
+
|
39
|
+
caller_size = caller.size
|
40
|
+
|
41
|
+
# JRuby reports this weird ":1" line in caller
|
42
|
+
if RUBY_PLATFORM =~ /\bjava\b/ && caller[-1] == ":1"
|
43
|
+
caller_size -= 1
|
44
|
+
end
|
45
|
+
|
46
|
+
begin
|
47
|
+
yield
|
48
|
+
rescue NoMethodError => e
|
49
|
+
if e.backtrace.size - caller_size == 2 &&
|
50
|
+
e.message =~ /^undefined method.+for nil:NilClass$/
|
51
|
+
return nil
|
52
|
+
end
|
53
|
+
raise
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
if $PROGRAM_NAME == __FILE__
|
58
|
+
require "test/unit"
|
59
|
+
|
60
|
+
class TestBlockTry < Test::Unit::TestCase
|
61
|
+
def setup
|
62
|
+
TryBlock.install!
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_properly_eats_exception_on_nil_object_from_call_site
|
66
|
+
some_nil = nil
|
67
|
+
|
68
|
+
assert_nil TryBlock { some_nil.something_else }
|
69
|
+
|
70
|
+
assert_nil "qwerty".try_block { some_nil.something_else }
|
71
|
+
|
72
|
+
assert_nil some_nil.try_block { something_else }
|
73
|
+
|
74
|
+
assert_nil [false].try_block { detect { |e| e }.something }
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_name_error_in_block
|
78
|
+
assert_raises NameError do
|
79
|
+
TryBlock { no_such_name }
|
80
|
+
end
|
81
|
+
|
82
|
+
assert_raises NameError do
|
83
|
+
"qwerty".try_block { no_such_name }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_doesnt_eat_general_exception
|
88
|
+
assert_raises RuntimeError do
|
89
|
+
TryBlock { raise "FAIL" }
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_raises RuntimeError do
|
93
|
+
"qwerty".try_block { raise "FAIL" }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_doesnt_eat_general_exception_originated_from_somewhere_else
|
98
|
+
proc_raiser = proc { raise "FAIL" }
|
99
|
+
obj_raiser = "qwerty".tap { |obj| def obj.raiser; raise "FAIL" end }
|
100
|
+
|
101
|
+
assert_raises RuntimeError do
|
102
|
+
TryBlock { proc_raiser[] }
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_raises RuntimeError do
|
106
|
+
obj_raiser.try_block { raiser }
|
107
|
+
end
|
108
|
+
|
109
|
+
assert_raises RuntimeError do
|
110
|
+
[1].try_block { detect { |e| raise "FAIL" } }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_doesnt_eat_nil_object_exception_originated_from_somewhere_else
|
115
|
+
some_nil = nil
|
116
|
+
no_method_raiser = proc { some_nil.doesnt_exist_on_nil }
|
117
|
+
obj_no_method_raiser = "qwerty".tap { |obj| def obj.raiser; doesnt_exist_on_string() end }
|
118
|
+
|
119
|
+
if RUBY_VERSION < '1.9'
|
120
|
+
# ["try_block.rb:97",
|
121
|
+
# "try_block.rb:118:in `[]'",
|
122
|
+
# "try_block.rb:118:in `test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
|
123
|
+
# "try_block.rb:37:in `BlockTry'",
|
124
|
+
# "try_block.rb:118:in `test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'", <= call site
|
125
|
+
assert_raises(NoMethodError) do
|
126
|
+
TryBlock do
|
127
|
+
no_method_raiser[]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
else
|
131
|
+
# ["try_block.rb:97:in `block in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
|
132
|
+
# "try_block.rb:112:in `[]'",
|
133
|
+
# "try_block.rb:112:in `block (2 levels) in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
|
134
|
+
# "try_block.rb:37:in `BlockTry'",
|
135
|
+
# "try_block.rb:112:in `block in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'", <= call site
|
136
|
+
# ...
|
137
|
+
assert_raises(NoMethodError) { TryBlock { no_method_raiser[] } } # this will only work in 1.9
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
assert_raises NoMethodError do
|
142
|
+
obj_no_method_raiser.try_block { raiser }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_hash_digging
|
147
|
+
h = { :asd => 123, :rty => 456}
|
148
|
+
assert_nil TryBlock { h[:qwe][:asd][:zxc] }
|
149
|
+
assert_equal 123, TryBlock { h[:asd] }
|
150
|
+
|
151
|
+
assert_nil h.try_block { self[:qwe][:asd][:zxc] }
|
152
|
+
assert_nil h.try_block { |ha| ha[:qwe][:asd][:zxc] }
|
153
|
+
assert_equal 456, h.try_block { |ha| ha[:rty] }
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_asserts_passed_block
|
157
|
+
assert_raises ArgumentError do
|
158
|
+
TryBlock.try_block
|
159
|
+
end
|
160
|
+
|
161
|
+
assert_raises ArgumentError do
|
162
|
+
"qwerty".try_block
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_core_ext
|
167
|
+
assert_nil nil.try_block { 42 }
|
168
|
+
assert_equal 6, "qwerty".try_block { length }
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_meta_method
|
172
|
+
obj_raiser = Class.new.tap { |c| c.module_eval("def raiser; raise 'FAIL' end ") }
|
173
|
+
|
174
|
+
assert_raises(RuntimeError) { TryBlock { obj_raiser.new.raiser } }
|
175
|
+
assert_raises(RuntimeError) { obj_raiser.new.try_block { raiser } }
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_eval
|
179
|
+
assert_raises(NoMethodError) { eval("TryBlock { 'qwerty'.doesnt_exist_on_string }") }
|
180
|
+
assert_nil(eval("TryBlock { nil.doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/
|
181
|
+
|
182
|
+
assert_raises(NoMethodError) { eval("'qwerty'.try_block { doesnt_exist_on_string() }") }
|
183
|
+
assert_nil(eval("'qwerty'.try_block { nil.doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/
|
184
|
+
|
185
|
+
assert_equal 6, eval("'qwerty'.try_block { length }")
|
186
|
+
assert_nil(eval("[false].try_block { detect { |e| e }.doesnt_exist_on_nil.also_doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "English"
|
2
|
+
require "yaml"
|
3
|
+
require "open-uri"
|
4
|
+
|
5
|
+
# These can be autoloaded consistently (i.e. define single constant)
|
6
|
+
autoload :FileUtils, "fileutils"
|
7
|
+
autoload :OptionParser, "optparse"
|
8
|
+
autoload :OpenStruct, "ostruct"
|
9
|
+
module Net
|
10
|
+
autoload :HTTP, "net/http"
|
11
|
+
end
|
data/lib/dolzenko.rb
CHANGED
@@ -1,14 +1,4 @@
|
|
1
|
-
require "
|
2
|
-
require "yaml"
|
3
|
-
require "open-uri"
|
4
|
-
|
5
|
-
# These can be autoloaded consistently (i.e. define single constant)
|
6
|
-
autoload :FileUtils, "fileutils"
|
7
|
-
autoload :OptionParser, "optparse"
|
8
|
-
autoload :OpenStruct, "ostruct"
|
9
|
-
module Net
|
10
|
-
autoload :HTTP, "net/http"
|
11
|
-
end
|
1
|
+
require "dolzenko-light"
|
12
2
|
|
13
3
|
require "active_support/all"
|
14
4
|
require "facets"
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 11
|
9
|
+
version: 0.0.11
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Evgeniy Dolzhenko
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-28 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -56,6 +56,16 @@ extensions: []
|
|
56
56
|
extra_rdoc_files: []
|
57
57
|
|
58
58
|
files:
|
59
|
+
- lib/dolzenko/django_f_object.rb
|
60
|
+
- lib/dolzenko/django_q_object.rb
|
61
|
+
- lib/dolzenko/error_print.rb
|
62
|
+
- lib/dolzenko/gist_readme.rb
|
63
|
+
- lib/dolzenko/includable_with_options.rb
|
64
|
+
- lib/dolzenko/io_interceptor.rb
|
65
|
+
- lib/dolzenko/remote_download.rb
|
66
|
+
- lib/dolzenko/shell_out.rb
|
67
|
+
- lib/dolzenko/try_block.rb
|
68
|
+
- lib/dolzenko-light.rb
|
59
69
|
- lib/dolzenko.rb
|
60
70
|
- dolzenko.gemspec
|
61
71
|
has_rdoc: true
|