ronin 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data.tar.gz.sig +2 -0
  2. data/History.txt +43 -0
  3. data/Manifest.txt +27 -10
  4. data/README.txt +2 -1
  5. data/Rakefile +12 -11
  6. data/TODO.txt +8 -0
  7. data/bin/{ronin-ls → ronin-list} +2 -2
  8. data/bin/{ronin-rm → ronin-remove} +2 -2
  9. data/lib/ronin/cacheable.rb +25 -4
  10. data/lib/ronin/code/reference.rb +0 -9
  11. data/lib/ronin/code/symbol_table.rb +5 -5
  12. data/lib/ronin/code/token.rb +1 -1
  13. data/lib/ronin/database/database.rb +3 -1
  14. data/lib/ronin/extensions/kernel.rb +25 -3
  15. data/lib/ronin/formatting/extensions/binary/file.rb +60 -0
  16. data/lib/ronin/formatting/extensions/text.rb +1 -0
  17. data/lib/ronin/formatting/extensions/text/array.rb +67 -0
  18. data/lib/ronin/model.rb +1 -40
  19. data/lib/ronin/{has_license.rb → model/has_description.rb} +16 -18
  20. data/lib/ronin/model/has_license.rb +53 -0
  21. data/lib/ronin/model/has_name.rb +49 -0
  22. data/lib/ronin/model/has_version.rb +46 -0
  23. data/lib/ronin/model/model.rb +64 -0
  24. data/lib/ronin/network/extensions/http/net.rb +580 -99
  25. data/lib/ronin/network/http.rb +54 -6
  26. data/lib/ronin/os.rb +7 -7
  27. data/lib/ronin/platform/extension.rb +4 -6
  28. data/lib/ronin/platform/maintainer.rb +1 -1
  29. data/lib/ronin/platform/object_cache.rb +10 -2
  30. data/lib/ronin/platform/overlay_cache.rb +1 -1
  31. data/lib/ronin/platform/platform.rb +5 -3
  32. data/lib/ronin/platform/ronin.rb +3 -3
  33. data/lib/ronin/scanners.rb +25 -0
  34. data/lib/ronin/scanners/exceptions.rb +24 -0
  35. data/lib/ronin/scanners/exceptions/unknown_category.rb +29 -0
  36. data/lib/ronin/scanners/scanner.rb +239 -0
  37. data/lib/ronin/sessions/http.rb +548 -7
  38. data/lib/ronin/{translators.rb → templates.rb} +1 -1
  39. data/lib/ronin/templates/erb.rb +56 -0
  40. data/lib/ronin/ui/command_line/command_line.rb +10 -1
  41. data/lib/ronin/ui/command_line/commands/{ls.rb → list.rb} +1 -1
  42. data/lib/ronin/ui/command_line/commands/{rm.rb → remove.rb} +1 -1
  43. data/lib/ronin/ui/command_line/commands/uninstall.rb +2 -2
  44. data/lib/ronin/ui/console.rb +66 -17
  45. data/lib/ronin/ui/shell.rb +16 -36
  46. data/lib/ronin/version.rb +1 -1
  47. data/spec/cacheable_spec.rb +1 -1
  48. data/spec/code/classes/thing.rb +4 -0
  49. data/spec/code/reference_spec.rb +4 -0
  50. data/spec/code/symbol_table_spec.rb +5 -1
  51. data/spec/extensions/kernel_spec.rb +45 -5
  52. data/spec/extensions/string_spec.rb +4 -0
  53. data/spec/formatting/binary/integer_spec.rb +3 -3
  54. data/spec/formatting/binary/string_spec.rb +5 -5
  55. data/spec/formatting/digest/string_spec.rb +5 -9
  56. data/spec/formatting/http/string_spec.rb +5 -9
  57. data/spec/formatting/text/array_spec.rb +64 -0
  58. data/spec/formatting/text/string_spec.rb +3 -3
  59. data/spec/model/classes/licensed_model.rb +12 -0
  60. data/spec/{has_license_spec.rb → model/has_license_spec.rb} +5 -5
  61. data/spec/network/http_spec.rb +197 -0
  62. data/spec/os_spec.rb +2 -5
  63. data/spec/platform/maintainer_spec.rb +30 -0
  64. data/spec/platform/ronin_spec.rb +2 -2
  65. data/spec/scanners/classes/another_scanner.rb +16 -0
  66. data/spec/scanners/classes/example_scanner.rb +22 -0
  67. data/spec/scanners/scanner_spec.rb +148 -0
  68. data/spec/spec_helper.rb +1 -1
  69. data/spec/templates/classes/uses_erb.rb +11 -0
  70. data/spec/templates/erb_spec.rb +20 -0
  71. data/static/ronin/platform/overlay.xsl +128 -49
  72. metadata +83 -30
  73. metadata.gz.sig +0 -0
  74. data/lib/ronin/translators/translator.rb +0 -75
  75. data/spec/classes/licensed_model.rb +0 -12
  76. data/spec/translators/translator_spec.rb +0 -61
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ ��� ���;�Pⵁ�3��ֈ-]�ա�:�6�I
2
+ x.7���#�֍�O��:����1d���j(�:�2ȱ��o�!,@��~"�Q��V����:�),₯�\x(ۨ1?��H�}t��c��6ף>��gh�X�#Xr�t�0f�S�(�\�Z��hez�6<�c1,:y@�܄ I1:s�e��L��u�YN֋�7pAoy�<�Z�fN��IvF�O� �LC����i$����I[g�|��YE
data/History.txt CHANGED
@@ -1,3 +1,45 @@
1
+ === 0.2.4 / 2009-07-02
2
+
3
+ * Require Hoe >= 2.0.0
4
+ * Require Parameters >= 0.1.6.
5
+ * Dropped dependency for dm-serializer.
6
+ * Added Kernel#catch_all.
7
+ * Added Array#bytes.
8
+ * Added Array#chars.
9
+ * Added Array#char_string.
10
+ * Added File.unhexdump.
11
+ * Added Ronin::Templates::Erb.
12
+ * Added Ronin::Model::HasName.
13
+ * Added Ronin::Model::HasDescription.
14
+ * Added Ronin::Model::HasVersion.
15
+ * Added Cacheable#prepared_for_cache?.
16
+ * Added Cacheable#original_loaded?.
17
+ * Added Network::HTTP.expand_options.
18
+ * Added Net.http_request.
19
+ * Added Sessions::HTTP#http_request.
20
+ * Added Ronin::Scanners::Scanner.
21
+ * Added Ronin::UI::Console.backtrace_depth.
22
+ * Added Ronin::UI::Console.backtrace_depth=.
23
+ * Moved Ronin::HasLicense into Ronin::Model.
24
+ * Renamed Kernel#try to Kernel#attempt.
25
+ * Renamed Ronin.method_missing to Ronin#method_missing.
26
+ * Renamed Ronin::UI::CommandLine::Commands::Ls to
27
+ Ronin::UI::CommandLine::Commands::List.
28
+ * Renamed Ronin::UI::CommandLine::Commands::Rm to
29
+ Ronin::UI::CommandLine::Commands::Remove.
30
+ * Refactored OS.define.
31
+ * Refactored Ronin::Shell as a module.
32
+ * Removed Ronin::Translators.
33
+ * Fixed a bug where if an object failed to be cached,
34
+ it would prevent an Overlay from being added to the
35
+ OverlayCache.
36
+ * Fixed a bug where Gem::LoadError was being rescued,
37
+ when only ::LoadError should be rescued.
38
+ * Fixed a typo in Maintainer#inspect.
39
+ * Updated the Overlay XSL file.
40
+ * Cleaned up CSS.
41
+ * Removed the jQuery expander plugin.
42
+
1
43
  === 0.2.3 / 2009-05-06
2
44
 
3
45
  * Require extlib >= 0.9.12.
@@ -49,6 +91,7 @@
49
91
  Ronin::UI::CommandLine::Commands::Rm.
50
92
  * Moved Ronin::UI::CommandLine::ParamParser into the Parameters library.
51
93
  * Refactored specs to run on Ruby 1.9.1-p0.
94
+ * Added more specs.
52
95
  * All specs now pass on Ruby 1.9.1-p0.
53
96
 
54
97
  === 0.2.2 / 2009-03-26
data/Manifest.txt CHANGED
@@ -9,8 +9,8 @@ bin/ronin-add
9
9
  bin/ronin-console
10
10
  bin/ronin-help
11
11
  bin/ronin-install
12
- bin/ronin-ls
13
- bin/ronin-rm
12
+ bin/ronin-list
13
+ bin/ronin-remove
14
14
  bin/ronin-uninstall
15
15
  bin/ronin-update
16
16
  lib/ronin.rb
@@ -18,6 +18,8 @@ lib/ronin/config.rb
18
18
  lib/ronin/static.rb
19
19
  lib/ronin/static/static.rb
20
20
  lib/ronin/static/finders.rb
21
+ lib/ronin/templates.rb
22
+ lib/ronin/templates/erb.rb
21
23
  lib/ronin/extensions.rb
22
24
  lib/ronin/extensions/meta.rb
23
25
  lib/ronin/extensions/meta/object.rb
@@ -41,12 +43,12 @@ lib/ronin/formatting/extensions/digest/string.rb
41
43
  lib/ronin/formatting/extensions/binary.rb
42
44
  lib/ronin/formatting/extensions/binary/integer.rb
43
45
  lib/ronin/formatting/extensions/binary/string.rb
46
+ lib/ronin/formatting/extensions/binary/file.rb
44
47
  lib/ronin/formatting/extensions/text.rb
45
48
  lib/ronin/formatting/extensions/text/string.rb
49
+ lib/ronin/formatting/extensions/text/array.rb
46
50
  lib/ronin/formatting/extensions/http.rb
47
51
  lib/ronin/formatting/extensions/http/string.rb
48
- lib/ronin/translators.rb
49
- lib/ronin/translators/translator.rb
50
52
  lib/ronin/path.rb
51
53
  lib/ronin/network.rb
52
54
  lib/ronin/network/extensions.rb
@@ -92,6 +94,10 @@ lib/ronin/rpc/client.rb
92
94
  lib/ronin/rpc/service.rb
93
95
  lib/ronin/rpc/console.rb
94
96
  lib/ronin/rpc/shell.rb
97
+ lib/ronin/scanners.rb
98
+ lib/ronin/scanners/exceptions.rb
99
+ lib/ronin/scanners/exceptions/unknown_category.rb
100
+ lib/ronin/scanners/scanner.rb
95
101
  lib/ronin/sessions.rb
96
102
  lib/ronin/sessions/exceptions.rb
97
103
  lib/ronin/sessions/exceptions/variable_missing.rb
@@ -109,9 +115,13 @@ lib/ronin/database/exceptions.rb
109
115
  lib/ronin/database/exceptions/invalid_config.rb
110
116
  lib/ronin/database/database.rb
111
117
  lib/ronin/model.rb
118
+ lib/ronin/model/model.rb
119
+ lib/ronin/model/has_name.rb
120
+ lib/ronin/model/has_description.rb
121
+ lib/ronin/model/has_version.rb
122
+ lib/ronin/model/has_license.rb
112
123
  lib/ronin/author.rb
113
124
  lib/ronin/license.rb
114
- lib/ronin/has_license.rb
115
125
  lib/ronin/arch.rb
116
126
  lib/ronin/os.rb
117
127
  lib/ronin/product.rb
@@ -149,9 +159,9 @@ lib/ronin/ui/command_line/options.rb
149
159
  lib/ronin/ui/command_line/commands/console.rb
150
160
  lib/ronin/ui/command_line/commands/add.rb
151
161
  lib/ronin/ui/command_line/commands/install.rb
152
- lib/ronin/ui/command_line/commands/ls.rb
162
+ lib/ronin/ui/command_line/commands/list.rb
153
163
  lib/ronin/ui/command_line/commands/update.rb
154
- lib/ronin/ui/command_line/commands/rm.rb
164
+ lib/ronin/ui/command_line/commands/remove.rb
155
165
  lib/ronin/ui/command_line/commands/uninstall.rb
156
166
  lib/ronin/ui/command_line/commands/help.rb
157
167
  lib/ronin/ui/command_line/command_line.rb
@@ -159,7 +169,6 @@ lib/ronin/ronin.rb
159
169
  lib/ronin/version.rb
160
170
  tasks/spec.rb
161
171
  spec/spec_helper.rb
162
- spec/classes/licensed_model.rb
163
172
  spec/classes/cacheable_model.rb
164
173
  spec/helpers/database.rb
165
174
  spec/helpers/cacheable.rb
@@ -171,9 +180,10 @@ spec/static/helpers/static2/dir/two.txt
171
180
  spec/static/helpers/static.rb
172
181
  spec/static/finders_spec.rb
173
182
  spec/static/static_spec.rb
183
+ spec/templates/classes/uses_erb.rb
184
+ spec/templates/erb_spec.rb
174
185
  spec/arch_spec.rb
175
186
  spec/author_spec.rb
176
- spec/translators/translator_spec.rb
177
187
  spec/extensions/kernel_spec.rb
178
188
  spec/extensions/array_spec.rb
179
189
  spec/extensions/hash_spec.rb
@@ -207,15 +217,21 @@ spec/formatting/binary/string_spec.rb
207
217
  spec/formatting/digest/string_spec.rb
208
218
  spec/formatting/http/string_spec.rb
209
219
  spec/formatting/text/string_spec.rb
220
+ spec/formatting/text/array_spec.rb
221
+ spec/network/http_spec.rb
210
222
  spec/code/classes/thing.rb
211
223
  spec/code/reference_spec.rb
212
224
  spec/code/symbol_table_spec.rb
225
+ spec/model/classes/licensed_model.rb
226
+ spec/model/has_license_spec.rb
213
227
  spec/license_spec.rb
214
- spec/has_license_spec.rb
215
228
  spec/path_spec.rb
216
229
  spec/os_spec.rb
217
230
  spec/product_spec.rb
218
231
  spec/cacheable_spec.rb
232
+ spec/scanners/classes/example_scanner.rb
233
+ spec/scanners/classes/another_scanner.rb
234
+ spec/scanners/scanner_spec.rb
219
235
  spec/sessions/classes/test_session.rb
220
236
  spec/sessions/classes/uses_test_session.rb
221
237
  spec/sessions/session_spec.rb
@@ -232,6 +248,7 @@ spec/platform/helpers/overlays/hello/lib/stuff/another_test.rb
232
248
  spec/platform/helpers/overlays/hello/hello/extension.rb
233
249
  spec/platform/helpers/overlays/random/ronin.xml
234
250
  spec/platform/helpers/overlays/random/random/extension.rb
251
+ spec/platform/maintainer_spec.rb
235
252
  spec/platform/extension_spec.rb
236
253
  spec/platform/overlay_spec.rb
237
254
  spec/platform/overlay_cache_spec.rb
data/README.txt CHANGED
@@ -67,6 +67,7 @@ of Ronin.
67
67
 
68
68
  == REQUIREMENTS:
69
69
 
70
+ * {libxml2}[http://xmlsoft.org/]
70
71
  * {libsqlite3}[http://sqlite.org/]
71
72
  * {nokogiri}[http://nokogiri.rubyforge.org/] >= 1.2.0
72
73
  * {DataMapper}[http://datamapper.org/]:
@@ -95,7 +96,7 @@ of Ronin.
95
96
 
96
97
  * List installed Overlays:
97
98
 
98
- $ ronin ls
99
+ $ ronin list
99
100
 
100
101
  * Update all installed Overlays:
101
102
 
data/Rakefile CHANGED
@@ -2,25 +2,26 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
+ require 'hoe/signing'
5
6
  require './tasks/spec.rb'
6
- require './lib/ronin/version.rb'
7
7
 
8
- Hoe.new('ronin', Ronin::VERSION) do |p|
9
- p.rubyforge_name = 'ronin'
10
- p.developer('Postmodern','postmodern.mod3@gmail.com')
11
- p.remote_rdoc_dir = 'docs/ronin'
12
- p.extra_deps = [
8
+ Hoe.spec('ronin') do
9
+ self.rubyforge_name = 'ronin'
10
+ self.developer('Postmodern','postmodern.mod3@gmail.com')
11
+ self.remote_rdoc_dir = 'docs/ronin'
12
+ self.extra_deps = [
13
+ ['hoe', '>=2.0.0'],
13
14
  ['nokogiri', '>=1.2.0'],
15
+ ['addressable', '=2.0.2'],
14
16
  ['extlib', '>=0.9.12'],
17
+ ['data_objects', '>=0.9.12'],
18
+ ['do_sqlite3', '>=0.9.12'],
15
19
  ['dm-core', '>=0.9.11'],
16
- ['data_objects', '>=0.9.11'],
17
- ['do_sqlite3', '>=0.9.11'],
18
20
  ['dm-types', '>=0.9.11'],
19
- ['dm-serializer', '>=0.9.11'],
20
21
  ['dm-validations', '>=0.9.11'],
21
- ['dm-predefined', '>=0.1.0'],
22
+ ['dm-predefined', '>=0.1.1'],
22
23
  ['chars', '>=0.1.1'],
23
- ['parameters', '>=0.1.5'],
24
+ ['parameters', '>=0.1.7'],
24
25
  ['contextify', '>=0.1.2'],
25
26
  ['reverse-require', '>=0.3.1'],
26
27
  ['repertoire', '>=0.2.1']
data/TODO.txt CHANGED
@@ -1,5 +1,13 @@
1
1
  == TODO:
2
2
 
3
+ === Ronin 0.2.5:
4
+
5
+ * Move Ronin::RPC code into ronin-exploits.
6
+
7
+ === Longterm:
8
+
9
+ * Move to YARD for API documentation.
10
+ * Develop a custom YARD Template for Ronin libraries.
3
11
  * Look into using Ronin over Tor/i2p.
4
12
  * Discuss ideas for a Web UI:
5
13
  * Configurable menu-bar / side-bar.
@@ -7,6 +7,6 @@ unless $LOAD_PATH.include?(lib_dir)
7
7
  $LOAD_PATH << lib_dir
8
8
  end
9
9
 
10
- require 'ronin/ui/command_line/commands/ls'
10
+ require 'ronin/ui/command_line/commands/list'
11
11
 
12
- Ronin::UI::CommandLine::Commands::LS.run(*ARGV)
12
+ Ronin::UI::CommandLine::Commands::List.run(*ARGV)
@@ -7,6 +7,6 @@ unless $LOAD_PATH.include?(lib_dir)
7
7
  $LOAD_PATH << lib_dir
8
8
  end
9
9
 
10
- require 'ronin/ui/command_line/commands/rm'
10
+ require 'ronin/ui/command_line/commands/remove'
11
11
 
12
- Ronin::UI::CommandLine::Commands::RM.run(*ARGV)
12
+ Ronin::UI::CommandLine::Commands::Remove.run(*ARGV)
@@ -98,14 +98,18 @@ module Ronin
98
98
  # Loads all objects with the matching _attributes_.
99
99
  #
100
100
  def self.load_all(attributes={})
101
- self.all(attributes).map { |obj| obj.load_original }
101
+ self.all(attributes).map { |obj| obj.load_original! }
102
102
  end
103
103
 
104
104
  #
105
105
  # Loads the first object with the matching _attributes_.
106
106
  #
107
107
  def self.load_first(attributes={})
108
- self.first(attributes).load_original!
108
+ if (obj = self.first(attributes))
109
+ obj.load_original!
110
+ end
111
+
112
+ return obj
109
113
  end
110
114
  end
111
115
 
@@ -154,6 +158,14 @@ module Ronin
154
158
  end
155
159
  end
156
160
 
161
+ #
162
+ # Returns +true+ if the original code has been loaded, returns +false+
163
+ # otherwise.
164
+ #
165
+ def original_loaded?
166
+ @original_loaded == true
167
+ end
168
+
157
169
  #
158
170
  # Load the code from the cached file for the object.
159
171
  #
@@ -179,7 +191,7 @@ module Ronin
179
191
  self.class.all(:cached_path => self.cached_path).destroy!
180
192
 
181
193
  self.cached_timestamp = File.mtime(self.cached_path)
182
- return save!
194
+ return save
183
195
  end
184
196
 
185
197
  return false
@@ -211,6 +223,14 @@ module Ronin
211
223
  return false
212
224
  end
213
225
 
226
+ #
227
+ # Returns +true+ if the object has been prepared to be cached,
228
+ # returns +false+ otherwise.
229
+ #
230
+ def prepared_for_cache?
231
+ @cache_prepared == true
232
+ end
233
+
214
234
  #
215
235
  # Prepares the object for caching.
216
236
  #
@@ -235,8 +255,9 @@ module Ronin
235
255
  # method again.
236
256
  #
237
257
  def method_missing(name,*arguments,&block)
238
- unless @original_loaded
258
+ if (self.cached_path && !(@original_loaded))
239
259
  load_original!
260
+
240
261
  return self.send(name,*arguments,&block)
241
262
  else
242
263
  return super(name,*arguments,&block)
@@ -83,15 +83,6 @@ module Ronin
83
83
  return self
84
84
  end
85
85
 
86
- #
87
- # Evaluates the given _code_ within the referenced object. If a
88
- # _block_ is given, it will be evaluated within the referenced
89
- # object.
90
- #
91
- def eval(code,&block)
92
- @value.eval(code,&block)
93
- end
94
-
95
86
  #
96
87
  # Evaluates the given _block_ within the referenced object.
97
88
  #
@@ -42,14 +42,14 @@ module Ronin
42
42
  # _name_, returns +false+ otherwise.
43
43
  #
44
44
  def has_symbol?(name)
45
- @table.has_key?(name.to_s)
45
+ @table.has_key?(name.to_sym)
46
46
  end
47
47
 
48
48
  #
49
49
  # Returns the symbol with the specified _name_.
50
50
  #
51
51
  def symbol(name)
52
- @table[name.to_s]
52
+ @table[name.to_sym]
53
53
  end
54
54
 
55
55
  #
@@ -71,7 +71,7 @@ module Ronin
71
71
  #
72
72
  def symbols=(hash)
73
73
  hash.each do |name,value|
74
- self[name] = value
74
+ self[name.to_sym] = value
75
75
  end
76
76
  end
77
77
 
@@ -79,14 +79,14 @@ module Ronin
79
79
  # Returns the value of the symbol with the specified _name_.
80
80
  #
81
81
  def [](name)
82
- @table[name.to_s].value
82
+ @table[name.to_sym].value
83
83
  end
84
84
 
85
85
  #
86
86
  # Sets the _value_ of the symbol with the specified _name_.
87
87
  #
88
88
  def []=(name,value)
89
- @table[name.to_s].value = value
89
+ @table[name.to_sym].value = value
90
90
  end
91
91
 
92
92
  #
@@ -58,7 +58,7 @@ module Ronin
58
58
  # Inspects the token.
59
59
  #
60
60
  def inspect
61
- "#<Token:#{@value.inspect}>"
61
+ "#<#{self.class}: #{@value.inspect}>"
62
62
  end
63
63
 
64
64
  #
@@ -21,6 +21,8 @@
21
21
  #++
22
22
  #
23
23
 
24
+ gem 'addressable', '2.0.2'
25
+
24
26
  require 'ronin/database/exceptions/invalid_config'
25
27
  require 'ronin/model'
26
28
  require 'ronin/arch'
@@ -46,7 +48,7 @@ module Ronin
46
48
 
47
49
  # Default configuration of the database
48
50
  DEFAULT_CONFIG = {
49
- :adapter => :sqlite3,
51
+ :adapter => 'sqlite3',
50
52
  :database => File.join(Config::PATH,'database.sqlite3')
51
53
  }
52
54
 
@@ -26,14 +26,36 @@ module Kernel
26
26
  # Calls the given _block_ and ignores any raised exceptions.
27
27
  # If an exception is raised, +nil+ will be returned.
28
28
  #
29
- # try do
29
+ # attempt do
30
30
  # Resolv.getaddress('might.not.exist.com')
31
31
  # end
32
32
  #
33
- def try(&block)
33
+ def attempt(&block)
34
34
  begin
35
35
  block.call if block
36
- rescue
36
+ rescue Exception
37
+ return nil
38
+ end
39
+ end
40
+
41
+ #
42
+ # Attempts to run the given _block_ and catches any SyntaxError,
43
+ # RuntimeError or StandardError exceptions. If any exceptions are
44
+ # caught, they will be printed out and +nil+ will be returned.
45
+ #
46
+ # catch_all do
47
+ # load 'suspicious.rb'
48
+ # end
49
+ #
50
+ def catch_all(verbose=true,&block)
51
+ begin
52
+ block.call if block
53
+ rescue Exception => e
54
+ if verbose
55
+ STDERR.puts "#{e.class}: #{e}"
56
+ e.backtrace[0,5].each { |trace| STDERR.puts "\t#{trace}" }
57
+ end
58
+
37
59
  return nil
38
60
  end
39
61
  end