quality_extensions 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/Readme +54 -0
  2. data/lib/qualitysmith_extensions/all.rb +4 -0
  3. data/lib/qualitysmith_extensions/array/all.rb +2 -0
  4. data/lib/qualitysmith_extensions/array/average.rb +44 -0
  5. data/lib/qualitysmith_extensions/array/classify.rb +97 -0
  6. data/lib/qualitysmith_extensions/array/expand_ranges.rb +52 -0
  7. data/lib/qualitysmith_extensions/array/group_by.rb +134 -0
  8. data/lib/qualitysmith_extensions/array/sequence.rb +66 -0
  9. data/lib/qualitysmith_extensions/array/shell_escape.rb +36 -0
  10. data/lib/qualitysmith_extensions/array/to_a_recursive.rb +41 -0
  11. data/lib/qualitysmith_extensions/array/to_query_string.rb +96 -0
  12. data/lib/qualitysmith_extensions/collection_extensions_for_cgi.rb +2 -0
  13. data/lib/qualitysmith_extensions/colored/toggleability.rb +62 -0
  14. data/lib/qualitysmith_extensions/console/command.facets.1.8.51.rb +749 -0
  15. data/lib/qualitysmith_extensions/console/command.facets.1.8.54.rb +748 -0
  16. data/lib/qualitysmith_extensions/console/command.rb +944 -0
  17. data/lib/qualitysmith_extensions/date/all.rb +2 -0
  18. data/lib/qualitysmith_extensions/date/deprecated.rb +40 -0
  19. data/lib/qualitysmith_extensions/date/iso8601.rb +31 -0
  20. data/lib/qualitysmith_extensions/date/month_ranges.rb +122 -0
  21. data/lib/qualitysmith_extensions/dir/each_child.rb +58 -0
  22. data/lib/qualitysmith_extensions/enumerable/enum.rb +69 -0
  23. data/lib/qualitysmith_extensions/enumerable/select_until.rb +4 -0
  24. data/lib/qualitysmith_extensions/enumerable/select_while.rb +109 -0
  25. data/lib/qualitysmith_extensions/exception/inspect_with_backtrace.rb +65 -0
  26. data/lib/qualitysmith_extensions/file/exact_match_regexp.rb +34 -0
  27. data/lib/qualitysmith_extensions/file_test/binary_file.rb +110 -0
  28. data/lib/qualitysmith_extensions/find/select.rb +68 -0
  29. data/lib/qualitysmith_extensions/global_variable_set.rb +153 -0
  30. data/lib/qualitysmith_extensions/hash/all.rb +2 -0
  31. data/lib/qualitysmith_extensions/hash/to_date.rb +34 -0
  32. data/lib/qualitysmith_extensions/hash/to_query_string.rb +121 -0
  33. data/lib/qualitysmith_extensions/kernel/all.rb +2 -0
  34. data/lib/qualitysmith_extensions/kernel/autoreload.rb +128 -0
  35. data/lib/qualitysmith_extensions/kernel/backtrace.rb +71 -0
  36. data/lib/qualitysmith_extensions/kernel/capture_output.rb +115 -0
  37. data/lib/qualitysmith_extensions/kernel/die.rb +49 -0
  38. data/lib/qualitysmith_extensions/kernel/example_printer.rb +81 -0
  39. data/lib/qualitysmith_extensions/kernel/filter_output.rb +108 -0
  40. data/lib/qualitysmith_extensions/kernel/remove_const.rb +178 -0
  41. data/lib/qualitysmith_extensions/kernel/remove_module.rb +127 -0
  42. data/lib/qualitysmith_extensions/kernel/require_all.rb +186 -0
  43. data/lib/qualitysmith_extensions/kernel/require_local_all.rb +4 -0
  44. data/lib/qualitysmith_extensions/kernel/require_once.rb +18 -0
  45. data/lib/qualitysmith_extensions/kernel/simulate_input.rb +52 -0
  46. data/lib/qualitysmith_extensions/kernel/trap_chain.rb +61 -0
  47. data/lib/qualitysmith_extensions/kernel/windows_platform.rb +46 -0
  48. data/lib/qualitysmith_extensions/module/alias_method.rb +6 -0
  49. data/lib/qualitysmith_extensions/module/alias_method_chain.rb +165 -0
  50. data/lib/qualitysmith_extensions/module/ancestry_of_instance_method.rb +43 -0
  51. data/lib/qualitysmith_extensions/module/attribute_accessors.rb +49 -0
  52. data/lib/qualitysmith_extensions/module/basename.rb +76 -0
  53. data/lib/qualitysmith_extensions/module/bool_attr_accessor.rb +497 -0
  54. data/lib/qualitysmith_extensions/module/class_methods.rb +87 -0
  55. data/lib/qualitysmith_extensions/module/create.rb +315 -0
  56. data/lib/qualitysmith_extensions/module/create_setter.rb +9 -0
  57. data/lib/qualitysmith_extensions/module/dirname.rb +4 -0
  58. data/lib/qualitysmith_extensions/module/guard_method.rb +312 -0
  59. data/lib/qualitysmith_extensions/module/includable_once.rb +10 -0
  60. data/lib/qualitysmith_extensions/module/join.rb +66 -0
  61. data/lib/qualitysmith_extensions/module/malias_method_chain.rb +92 -0
  62. data/lib/qualitysmith_extensions/module/module_methods.rb +4 -0
  63. data/lib/qualitysmith_extensions/module/namespace.rb +112 -0
  64. data/lib/qualitysmith_extensions/module/parents.rb +61 -0
  65. data/lib/qualitysmith_extensions/module/remove_const.rb +117 -0
  66. data/lib/qualitysmith_extensions/module/split.rb +55 -0
  67. data/lib/qualitysmith_extensions/month.rb +66 -0
  68. data/lib/qualitysmith_extensions/mutex/if_available.rb +75 -0
  69. data/lib/qualitysmith_extensions/object/ancestry_of_method.rb +257 -0
  70. data/lib/qualitysmith_extensions/object/default.rb +69 -0
  71. data/lib/qualitysmith_extensions/object/if_else.rb +157 -0
  72. data/lib/qualitysmith_extensions/object/ignore_access.rb +84 -0
  73. data/lib/qualitysmith_extensions/object/mcall.rb +92 -0
  74. data/lib/qualitysmith_extensions/object/methods.rb +63 -0
  75. data/lib/qualitysmith_extensions/object/send_if.rb +151 -0
  76. data/lib/qualitysmith_extensions/object/send_if_not_nil.rb +35 -0
  77. data/lib/qualitysmith_extensions/object/singleton_send.rb +129 -0
  78. data/lib/qualitysmith_extensions/regexp/join.rb +111 -0
  79. data/lib/qualitysmith_extensions/string/all.rb +2 -0
  80. data/lib/qualitysmith_extensions/string/constantize.rb +4 -0
  81. data/lib/qualitysmith_extensions/string/digits_only.rb +27 -0
  82. data/lib/qualitysmith_extensions/string/each_char_with_index.rb +41 -0
  83. data/lib/qualitysmith_extensions/string/md5.rb +29 -0
  84. data/lib/qualitysmith_extensions/string/shell_escape.rb +43 -0
  85. data/lib/qualitysmith_extensions/string/to_underscored_label.rb +37 -0
  86. data/lib/qualitysmith_extensions/string/with_knowledge_of_color.rb +64 -0
  87. data/lib/qualitysmith_extensions/symbol/constantize.rb +69 -0
  88. data/lib/qualitysmith_extensions/symbol/match.rb +157 -0
  89. data/lib/qualitysmith_extensions/template.rb +33 -0
  90. data/lib/qualitysmith_extensions/test/all.rb +2 -0
  91. data/lib/qualitysmith_extensions/test/assert_anything.rb +93 -0
  92. data/lib/qualitysmith_extensions/test/assert_changed.rb +66 -0
  93. data/lib/qualitysmith_extensions/test/assert_exception.rb +66 -0
  94. data/lib/qualitysmith_extensions/test/assert_includes.rb +36 -0
  95. data/lib/qualitysmith_extensions/test/assert_user_error.rb +37 -0
  96. data/lib/qualitysmith_extensions/test/difference_highlighting.rb +323 -0
  97. data/lib/qualitysmith_extensions/time/all.rb +2 -0
  98. data/lib/qualitysmith_extensions/time/deprecated.rb +31 -0
  99. data/test/all.rb +16 -0
  100. metadata +148 -0
@@ -0,0 +1,121 @@
1
+ #--
2
+ # Author:: Anthony Kaufman, Tyler Rick
3
+ # Copyright:: Copyright (c) 2007 QualitySmith, Inc.
4
+ # License:: Ruby License
5
+ # Submit to Facets?:: Yes.
6
+ #++
7
+
8
+ autoload :CGI, 'cgi'
9
+ require 'rubygems'
10
+ require 'facets/core/kernel/require_local'
11
+ require_local '../array/to_query_string.rb'
12
+
13
+ class Hash
14
+
15
+ =begin rdoc
16
+ Converts into a string that can be used as the {query string}[http://en.wikipedia.org/wiki/Query_string] of a URL (for example, <tt>?key1=val1&key2=val2</tt>).
17
+
18
+ Example:
19
+ {
20
+ 'colors' => ['red', 'blue'],
21
+ 'username' => 'pineapple'
22
+ }.to_query_string('data')
23
+ ==> "data[username]=pineapple&data[colors][]=red&data[colors][]=blue"
24
+
25
+ The hash can be nested as deeply as you want and can also contain arrays.
26
+
27
+ <tt>key</tt> is the name of the key in params that will receive this hash when you load the page. So, for example, if you go to page with this query string (key = "name"): <tt>?name[first]=Fred&name[last]=Fredson</tt>, params will be have a key "name", like so: <tt>{"name"=>{"last"=>"Fredson", "first"=>"Fred"}}</tt>.
28
+
29
+ {
30
+ 'colors' => ['red', 'blue'],
31
+ 'username' => 'pineapple'
32
+ }.to_query_string('data')
33
+
34
+ is equivalent to just writing your hash like so:
35
+
36
+ {
37
+ 'data' => {
38
+ 'colors' => ['red', 'blue'],
39
+ 'username' => 'pineapple'
40
+ }
41
+ }.to_query_string()
42
+ =end
43
+ def to_query_string(key = '')
44
+ prefix = key.dup
45
+ elements = []
46
+
47
+ self.each_pair do |key, value|
48
+ key = CGI.escape key.to_s
49
+ key = prefix.length > 1 ? "#{prefix}[#{key}]" : key
50
+ if value.respond_to? :to_query_string
51
+ valuepre = value.dup
52
+ value = value.to_query_string(key)
53
+ #puts "#{key}#{valuepre.inspect} => #{value}"
54
+ elements << value
55
+ else
56
+ value = CGI.escape value.to_s
57
+ elements << key + '=' + value
58
+ end
59
+ end
60
+
61
+ elements.join('&')
62
+ end
63
+ end
64
+
65
+ # _____ _
66
+ # |_ _|__ ___| |_
67
+ # | |/ _ \/ __| __|
68
+ # | | __/\__ \ |_
69
+ # |_|\___||___/\__|
70
+ #
71
+ =begin test
72
+ class TheTest < Test::Unit::TestCase
73
+ def test_hash_to_query_string_nesting
74
+ data = {
75
+ 'foo' => 'bar',
76
+ 'names' => {
77
+ 'common' => 'smith',
78
+ 'uncommon' => {
79
+ :first => 'lance',
80
+ :last => 'wilheiminkauf'
81
+ }
82
+ }
83
+ }
84
+ assert_equal 'foo=bar&names[common]=smith&names[uncommon][first]=lance&names[uncommon][last]=wilheiminkauf', data.to_query_string
85
+ end
86
+ def test_hash_to_query_string_nesting_2
87
+ data = {
88
+ 'common' => 'smith',
89
+ 'uncommon' => [
90
+ 'frankenwatzel',
91
+ 'wilheiminkauf'
92
+ ]
93
+ }
94
+ assert_equal 'names[common]=smith&names[uncommon][]=frankenwatzel&names[uncommon][]=wilheiminkauf', data.to_query_string('names')
95
+ assert_equal( {'names' => data}.to_query_string(),
96
+ data.to_query_string('names') )
97
+ end
98
+
99
+ def test_hash_to_query_string_encoding
100
+ data = {'f&r' => 'a w$'}
101
+
102
+ assert_equal 'f%26r=a+w%24', data.to_query_string
103
+ end
104
+ end
105
+ =end
106
+
107
+ =begin examples
108
+ require 'irb/xmp'
109
+ xmp <<End
110
+ {
111
+ 'colors' => ['red', 'blue'],
112
+ 'username' => 'pineapple'
113
+ }.to_query_string('data')
114
+ {
115
+ 'data' => {
116
+ 'colors' => ['red', 'blue'],
117
+ 'username' => 'pineapple'
118
+ }
119
+ }.to_query_string()
120
+ End
121
+ =end
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__) + "/../kernel/require_all"
2
+ require_all File.dirname(__FILE__), :exclude_files => 'all.rb'
@@ -0,0 +1,128 @@
1
+ # CREDIT Michael Neumann
2
+ # CREDIT George Moschovitis
3
+
4
+ module Kernel
5
+
6
+ # Autoreload feature files.
7
+ #
8
+ # Automatically reload, at regular intervals, any previously loaded features,
9
+ # and/or other files not already loaded, if they have been modified since the last
10
+ # interval check. A numeric parameter sets the reload interval in seconds
11
+ # and the file parameter can either be a glob string or an array
12
+ # of file paths. If a glob string, it is expanded only once on the initial
13
+ # method call. Supplying a boolean parameter of 'false' will force autreload to
14
+ # skip previously loaded features and only reload the specified files.
15
+ # Also keeps a "dirty" flag.
16
+
17
+ def autoreload( *args )
18
+
19
+ check_interval=10
20
+ include_features = true
21
+ files = nil
22
+
23
+ args.each do |arg|
24
+ case arg
25
+ when Numeric
26
+ check_interval = arg
27
+ when String
28
+ files = Dir.glob( arg )
29
+ when Array
30
+ files = arg
31
+ when TrueClass, FalseClass
32
+ include_features = arg
33
+ end
34
+ end
35
+
36
+ file_mtime = {}
37
+
38
+ Thread.new(Time.now) do |start_time|
39
+ loop do
40
+ sleep check_interval
41
+
42
+ if include_features
43
+ feature_files = $LOADED_FEATURES.collect { |feature|
44
+ $LOAD_PATH.each { |lp| file = File.join(lp, feature) }
45
+ }.flatten
46
+ p feature_files
47
+
48
+ feature_files.each { |file|
49
+ if File.exists?(file) and (mtime = File.stat(file).mtime) > (file_mtime[file] || start_time)
50
+ $autoreload_dirty = true
51
+ file_mtime[file] = mtime
52
+ STDERR.puts "File '#{ file }' reloaded"
53
+ begin
54
+ load(file)
55
+ rescue Exception => e
56
+ STDERR.puts e.inspect
57
+ end
58
+ end
59
+ }
60
+ end
61
+
62
+ if files
63
+ files.each do |file|
64
+ if File.exists?(file) and (mtime = File.stat(file).mtime) > (file_mtime[file] || start_time)
65
+ $autoreload_dirty = true
66
+ file_mtime[file] = mtime
67
+ STDERR.puts "File '#{ file }' changed"
68
+ begin
69
+ load(file)
70
+ rescue Exception => e
71
+ STDERR.puts e.inspect
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+
83
+ # Same as #autoreload, but does not include previously loaded features.
84
+ # This is equivalent to as adding a 'false' parameter to #autoreload.
85
+
86
+ def autoreload_files( *args )
87
+ autoreload( false, *args )
88
+ end
89
+
90
+ # deprecate
91
+ alias_method :autoreload_glob, :autoreload_files
92
+
93
+ end
94
+
95
+ #--
96
+ # # OLD VERSION
97
+ # def autoreload(check_interval=10)
98
+ # Thread.new(Time.now) { |start_time|
99
+ # file_mtime = {}
100
+ # loop {
101
+ # sleep check_interval
102
+ # $LOADED_FEATURES.each { |feature|
103
+ # $LOAD_PATH.each { |lp|
104
+ # file = File.join(lp, feature)
105
+ # if (File.exists?(file) and
106
+ # File.stat(file).mtime > (file_mtime[file] || start_time))
107
+ # file_mtime[file] = File.stat(file).mtime
108
+ # STDERR.puts "reload #{ file }"
109
+ # begin
110
+ # load(file)
111
+ # rescue Exception => e
112
+ # STDERR.puts e.inspect
113
+ # end
114
+ # end
115
+ # }
116
+ # }
117
+ # }
118
+ # }
119
+ # end
120
+ #++
121
+
122
+ # _____ _
123
+ # |_ _|__ ___| |_
124
+ # | |/ _ \/ __| __|
125
+ # | | __/\__ \ |_
126
+ # |_|\___||___/\__|
127
+ #
128
+ # TODO
@@ -0,0 +1,71 @@
1
+ #--
2
+ # Author:: Tyler Rick
3
+ # Copyright:: Copyright (c) 2007 QualitySmith, Inc.
4
+ # License:: Ruby License
5
+ # Submit to Facets?:: Not sure. This might not be necessary if caller() actually works reliably.
6
+ #++
7
+
8
+ require "rubygems"
9
+ require "facet/string/lines"
10
+
11
+ module Kernel
12
+ # Equivalent to calling caller(0)
13
+ def backtrace
14
+ full_backtrace = caller(0)
15
+ return full_backtrace[1..-1] # We don't want this call to backtrace showing up in the backtrace, so skip top 1 frame.
16
+ end
17
+
18
+ # Returns a human-readable backtrace
19
+ def pretty_backtrace
20
+ "Backtrace:\n" +
21
+ backtrace[1..-1].map{|frame| "* " + frame}.join("\n")
22
+ end
23
+
24
+ # I thought I ran into some case where it didn't work to use caller(0)...which prompted me to do it this way (raise and rescue an exception)...but now I can't duplicate that problem, so I will deprecate this method.
25
+ def backtrace_using_exception
26
+ begin
27
+ raise "Where am I?"
28
+ rescue Exception => exception
29
+ full_backtrace = exception.backtrace
30
+ return full_backtrace[1..-1] # We don't want this call to backtrace showing up in the backtrace, so skip top 1 frame.
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ # _____ _
37
+ # |_ _|__ ___| |_
38
+ # | |/ _ \/ __| __|
39
+ # | | __/\__ \ |_
40
+ # |_|\___||___/\__|
41
+ #
42
+ =begin test
43
+ class TheTest < Test::Unit::TestCase
44
+ def test_1_level
45
+ assert_match /^.*backtrace.rb:\d*:in `test_1_level'$/, backtrace[0]
46
+ assert_match /^.*testcase.rb:\d*:in `__send__'$/, backtrace[1]
47
+ end
48
+
49
+ def test_pretty_backtrace
50
+ assert_match /^Backtrace:$/, pretty_backtrace.lines[0]
51
+ assert_match /^.*backtrace.rb:\d*:in `test_pretty_backtrace'$/, pretty_backtrace.lines[1]
52
+ assert_match /^.*testcase.rb:\d*:in `__send__'$/, pretty_backtrace.lines[2]
53
+ end
54
+
55
+ def test_2_levels
56
+ assert_match /^.*backtrace.rb:\d*:in `a_method_that_returns_a_backtrace'$/, a_method_that_returns_a_backtrace[0]
57
+ assert_match /^.*backtrace.rb:\d*:in `test_2_levels'$/, a_method_that_returns_a_backtrace[1]
58
+ assert_match /^.*testcase.rb:\d*:in `__send__'$/, a_method_that_returns_a_backtrace[2]
59
+ end
60
+
61
+ def a_method_that_returns_a_backtrace
62
+ backtrace
63
+ end
64
+
65
+ def test_all_methods_of_getting_backtrace_are_equivalent
66
+ assert_equal backtrace_using_exception, backtrace
67
+ assert_equal backtrace_using_exception, caller(0)
68
+ end
69
+
70
+ end
71
+ =end
@@ -0,0 +1,115 @@
1
+ #--
2
+ # Author:: Tyler Rick
3
+ # Copyright:: Copyright (c) 2007 QualitySmith, Inc.
4
+ # License:: Ruby License
5
+ # Submit to Facets?:: Yes
6
+ #++
7
+
8
+ # :todo: Can we find a simpler way to do this based on facets' silence_stream?
9
+ #
10
+ # File lib/facets/core/kernel/silence_stream.rb, line 13
11
+ # def silence_stream(stream)
12
+ # old_stream = stream.dup
13
+ # stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
14
+ # stream.sync = true
15
+ # yield
16
+ # ensure
17
+ # stream.reopen(old_stream)
18
+ # end
19
+
20
+ require 'stringio'
21
+ require 'rubygems'
22
+ require 'facets/more/dictionary'
23
+
24
+ module Kernel
25
+
26
+ # Captures the output (stdout by default) that +block+ tries to generate and returns it as a string.
27
+ #
28
+ # output = capture_output($stderr) { noisy_command }
29
+ #
30
+ # output = capture_output([$stdout, $stderr]) do
31
+ # noisy_command
32
+ # end
33
+ #
34
+ # *Note*: If you specify more than one output stream, the entire results of each will be concatenated <i>in the order you listed them</i>, not necessarily in the order that you wrote _to_ those streams.
35
+ def capture_output(output_streams = $stdout, &block)
36
+ output_streams = [output_streams] unless output_streams.is_a? Array
37
+
38
+ saved_output_streams = Dictionary.new
39
+ output_streams.each do |output_stream|
40
+ case output_stream.object_id
41
+ when $stdout.object_id
42
+ saved_output_streams[:$stdout] = $stdout
43
+ $stdout = StringIO.new
44
+ when $stderr.object_id
45
+ saved_output_streams[:$stderr] = $stderr
46
+ $stderr = StringIO.new
47
+ end
48
+ end
49
+
50
+ what_they_tried_to_output = ''
51
+ begin
52
+ yield
53
+ rescue Exception
54
+ raise
55
+ ensure
56
+ saved_output_streams.each do |name, output_stream|
57
+ case name
58
+ when :$stdout
59
+ what_they_tried_to_output += $stdout.string
60
+ when :$stderr
61
+ what_they_tried_to_output += $stderr.string
62
+ end
63
+
64
+ # Restore the original output_stream that we saved.
65
+ case name
66
+ when :$stdout
67
+ $stdout = saved_output_streams[:$stdout]
68
+ when :$stderr
69
+ $stderr = saved_output_streams[:$stderr]
70
+ end
71
+ end
72
+ end
73
+ return what_they_tried_to_output
74
+ end
75
+
76
+ end
77
+
78
+ # _____ _
79
+ # |_ _|__ ___| |_
80
+ # | |/ _ \/ __| __|
81
+ # | | __/\__ \ |_
82
+ # |_|\___||___/\__|
83
+ #
84
+ =begin test
85
+ require 'test/unit'
86
+
87
+ def noisy_command
88
+ puts "Some lovely message"
89
+ $stderr.puts "Some lovely error message"
90
+ end
91
+ def noisy_command_with_error
92
+ puts "Some lovely message"
93
+ $stderr.puts "Some lovely error message"
94
+ raise 'an error'
95
+ end
96
+
97
+ class TheTest < Test::Unit::TestCase
98
+ def test_capture_all
99
+ assert_equal "Some lovely message\nSome lovely error message\n", capture_output([$stdout, $stderr]) { noisy_command }
100
+ end
101
+ def test_capture_all__different_order
102
+ # This is, I suppose a limitation of StingIO. This behavior may change in a future version if a workaround is found. (Creating a new IO subclass, +TimestampedStringIO+, that keeps a timestamp for every thing you add to it so that the results of two such objects can be merged to yield chronological output.)
103
+ assert_equal "Some lovely error message\nSome lovely message\n", capture_output([$stderr, $stdout]) { noisy_command }
104
+ end
105
+ def test_capture_stdout
106
+ assert_equal "Some lovely message\n", capture_output($stdout) { noisy_command }
107
+ end
108
+ def test_capture_stderr
109
+ assert_equal "Some lovely error message\n", capture_output($stderr) { noisy_command }
110
+ end
111
+ def test_when_an_error_is_raised_from_block
112
+ assert_raise(RuntimeError) { capture_output() { noisy_command_with_error } }
113
+ end
114
+ end
115
+ =end
@@ -0,0 +1,49 @@
1
+ #--
2
+ # Author:: Tyler Rick
3
+ # Copyright:: Copyright (c) 2007 QualitySmith, Inc.
4
+ # License:: Ruby License
5
+ # Submit to Facets?:: No.
6
+ # Deprecated. Because I discovered Kernel::abort !
7
+ #++
8
+
9
+ module Kernel
10
+ def die(message, exit_code = 1)
11
+ $stderr.puts message
12
+ exit exit_code
13
+ end
14
+ end
15
+
16
+ # _____ _
17
+ # |_ _|__ ___| |_
18
+ # | |/ _ \/ __| __|
19
+ # | | __/\__ \ |_
20
+ # |_|\___||___/\__|
21
+ #
22
+ =begin test
23
+ require 'rubygems'
24
+ require 'qualitysmith_extensions/kernel/capture_output'
25
+ #require 'facets/core/kernel/require_local'
26
+ #require_local './capture_output'
27
+
28
+ class TheTest < Test::Unit::TestCase
29
+
30
+ def test_1
31
+ stderr = capture_output $stderr do
32
+ assert_raise(SystemExit) do
33
+ die "Aggh! I'm dying!"
34
+ end
35
+ end
36
+ assert_equal "Aggh! I'm dying!", stderr.chomp
37
+ end
38
+
39
+ def test_abort
40
+ stderr = capture_output $stderr do
41
+ assert_raise(SystemExit) do
42
+ abort "Aggh! I'm dying!"
43
+ end
44
+ end
45
+ assert_equal "Aggh! I'm dying!", stderr.chomp
46
+ end
47
+
48
+ end
49
+ =end