riel 1.1.16 → 1.1.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/README.md +2 -37
  2. data/lib/riel/log/log.rb +17 -24
  3. data/lib/riel/log/loggable.rb +13 -15
  4. data/lib/riel/log/logger.rb +34 -66
  5. data/lib/riel/log.rb +0 -63
  6. data/lib/riel/optproc.rb +0 -3
  7. data/lib/riel/string.rb +0 -2
  8. data/lib/riel.rb +1 -1
  9. data/test/riel/log/format_test.rb +48 -0
  10. data/test/riel/optproc_test.rb +1 -30
  11. data/test/riel/{log_stack_test.rb → testlog/log_stack_test.rb} +0 -0
  12. data/test/riel/testlog/log_test.rb +254 -0
  13. data/test/riel/testlog/loggable_test.rb +31 -0
  14. metadata +89 -133
  15. data/lib/riel/ansicolor.rb +0 -91
  16. data/lib/riel/asciitable/cell.rb +0 -82
  17. data/lib/riel/asciitable/column.rb +0 -26
  18. data/lib/riel/asciitable/row.rb +0 -105
  19. data/lib/riel/asciitable/table.rb +0 -295
  20. data/lib/riel/text/ansi/ansi_color.rb +0 -31
  21. data/lib/riel/text/ansi/ansi_colors.rb +0 -16
  22. data/lib/riel/text/ansi/ansi_highlight.rb +0 -69
  23. data/lib/riel/text/ansi/ansi_list.rb +0 -17
  24. data/lib/riel/text/ansi/ansi_palette.rb +0 -48
  25. data/lib/riel/text/ansi/attributes.rb +0 -21
  26. data/lib/riel/text/ansi/backgrounds.rb +0 -13
  27. data/lib/riel/text/ansi/color.rb +0 -62
  28. data/lib/riel/text/ansi/foregrounds.rb +0 -12
  29. data/lib/riel/text/ansi/grey.rb +0 -30
  30. data/lib/riel/text/ansi/grey_palette.rb +0 -36
  31. data/lib/riel/text/ansi/palette.rb +0 -18
  32. data/lib/riel/text/ansi/rgb_color.rb +0 -28
  33. data/lib/riel/text/ansi/rgb_highlighter.rb +0 -73
  34. data/lib/riel/text/ansi/rgb_palette.rb +0 -49
  35. data/lib/riel/text/highlight.rb +0 -130
  36. data/lib/riel/text/highlightable.rb +0 -85
  37. data/lib/riel/text/html_highlight.rb +0 -98
  38. data/lib/riel/text/non_highlight.rb +0 -17
  39. data/lib/riel/text/string.rb +0 -10
  40. data/lib/riel/text.rb +0 -4
  41. data/test/riel/asciitable/table_test.rb +0 -77
  42. data/test/riel/log_test.rb +0 -164
  43. data/test/riel/text/ansi/ansi_highlight_test.rb +0 -116
  44. data/test/riel/text/ansi/ansi_palette_test.rb +0 -65
  45. data/test/riel/text/ansi/grey_palette_test.rb +0 -39
  46. data/test/riel/text/ansi/rgb_highlighter_test.rb +0 -99
  47. data/test/riel/text/ansi/rgb_palette_test.rb +0 -122
  48. data/test/riel/text/highlightable_test.rb +0 -24
  49. data/test/riel/text/string_test.rb +0 -47
  50. data/test/riel/text_test.rb +0 -62
@@ -0,0 +1,254 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'pathname'
5
+ require 'test/unit'
6
+ require 'stringio'
7
+ require 'riel/log'
8
+ require 'riel/testlog/logtestee'
9
+
10
+ class LogTestCase < Test::Unit::TestCase
11
+ include Loggable
12
+
13
+ def test_no_output
14
+ # I could make this an instance variable, but I want to check the method
15
+ # names in the output string.
16
+
17
+ log = Proc.new {
18
+ Log.log "hello, world?"
19
+ Log.debug "hello, world?"
20
+ Log.info "hello, world?"
21
+ Log.warn "EXPECTED OUTPUT TO STDERR: hello, world." # will go to stderr
22
+ Log.error "EXPECTED OUTPUT TO STDERR: hello, world." # will go to stderr
23
+ Log.stack "hello, world?"
24
+ }
25
+
26
+ run_test @nonverbose_setup, log
27
+ end
28
+
29
+ def test_output_arg
30
+ log = Proc.new {
31
+ Log.log "hello, world?"
32
+ Log.debug "hello, world?"
33
+ Log.info "hello, world?"
34
+ Log.warn "hello, world?"
35
+ Log.error "hello, world?"
36
+ Log.stack "hello, world?"
37
+ }
38
+
39
+ methname = if RUBY_VERSION == "1.8.7" then "test_output_arg" else "block in test_output_arg" end
40
+
41
+ expected = Array.new
42
+ (1 .. 6).each do |lnum|
43
+ expected << sprintf("[ ...testlog/log_test.rb: %2d] {%-20s} hello, world?", 30 + lnum, methname[0 .. 19])
44
+ end
45
+ expected << "[ ...testlog/log_test.rb: 234] {call } "
46
+ expected << "[ ...testlog/log_test.rb: 234] {run_test } "
47
+ expected << "[ ...testlog/log_test.rb: 49] {test_output_arg } "
48
+
49
+ run_test @verbose_setup, log, *expected
50
+ end
51
+
52
+ def test_output_block
53
+ log = Proc.new {
54
+ Log.log { "output block" }
55
+ }
56
+
57
+ Log.set_default_widths
58
+ # run_test @verbose_setup, log, "[ ...test/riel/log_test.rb: 73] {test_output_block } output block"
59
+
60
+ info_setup = Proc.new {
61
+ Log.level = Log::INFO
62
+ Log.output = StringIO.new
63
+ }
64
+
65
+ evaluated = false
66
+ log = Proc.new {
67
+ Log.debug { evaluated = true; "hello, world?" }
68
+ }
69
+
70
+ # run_test info_setup, log
71
+
72
+ assert_equal false, evaluated
73
+ end
74
+
75
+ def test_instance_log
76
+ log = Proc.new {
77
+ log "hello, world?"
78
+ }
79
+
80
+ Log.set_widths(-15, 4, -40)
81
+ # the class name is different in 1.8 and 1.9, so we won't test it.
82
+ # run_test(@verbose_setup, log, "[ ...log_test.rb: 96] {LogTestCase#test_instance_log } hello, world?")
83
+ run_test @verbose_setup, log, nil
84
+
85
+ Log.set_default_widths
86
+ end
87
+
88
+ def test_colors
89
+ log = Proc.new {
90
+ white "white wedding"
91
+ blue "blue iris"
92
+ on_cyan "red"
93
+ }
94
+
95
+ # test_col has become 'block in test colors' in 1.9
96
+ # run_test(@verbose_setup, log,
97
+ # "[ ...test/riel/log_test.rb: 107] {LogTestCase#test_col} \e[37mwhite wedding\e[0m",
98
+ # "[ ...test/riel/log_test.rb: 108] {LogTestCase#test_col} \e[34mblue iris\e[0m",
99
+ # "[ ...test/riel/log_test.rb: 109] {LogTestCase#test_col} \e[46mred\e[0m")
100
+
101
+ Log.set_default_widths
102
+ end
103
+
104
+ def run_format_test(expected, &blk)
105
+ Log.verbose = true
106
+ io = StringIO.new
107
+ Log.output = io
108
+ Log.set_default_widths
109
+
110
+ blk.call
111
+
112
+ lt = LogTestee.new
113
+ lt.format_test
114
+
115
+ puts io.string
116
+
117
+ assert_equal expected.join(''), io.string
118
+
119
+ Log.set_default_widths
120
+ end
121
+
122
+ def test_format_default
123
+ puts "test_format_default"
124
+
125
+ expected = Array.new
126
+ expected << "[ ...testlog/logtestee.rb: 10] {format_test } tamrof\n"
127
+
128
+ run_format_test expected do
129
+ Log.set_default_widths
130
+ end
131
+ end
132
+
133
+ def test_format_flush_filename_left
134
+ puts "test_format_flush_filename_left"
135
+
136
+ expected = Array.new
137
+ expected << "[ ...test/riel/testlog/logtestee.rb: 10] {format_test } tamrof\n"
138
+
139
+ run_format_test expected do
140
+ Log.set_widths(-35, Log::DEFAULT_LINENUM_WIDTH, Log::DEFAULT_FUNCTION_WIDTH)
141
+ end
142
+ end
143
+
144
+ def test_format_flush_linenum_left
145
+ puts "test_format_flush_linenum_left"
146
+
147
+ expected = Array.new
148
+ expected << "[ ...testlog/logtestee.rb:10 ] {format_test } tamrof\n"
149
+
150
+ run_format_test expected do
151
+ Log.set_widths(Log::DEFAULT_FILENAME_WIDTH, -10, Log::DEFAULT_FUNCTION_WIDTH)
152
+ end
153
+ end
154
+
155
+ def test_format_flush_function_right
156
+ puts "test_format_flush_function_right"
157
+
158
+ expected = Array.new
159
+ expected << "[ ...testlog/logtestee.rb: 10] { format_test} tamrof\n"
160
+
161
+ run_format_test expected do
162
+ Log.set_widths(Log::DEFAULT_FILENAME_WIDTH, Log::DEFAULT_LINENUM_WIDTH, 35)
163
+ end
164
+ end
165
+
166
+ def test_format_pad_linenum_zeros
167
+ puts "test_format_pad_linenum_zeros"
168
+
169
+ expected = Array.new
170
+ expected << "[ ...testlog/logtestee.rb:00000010] {format_test } tamrof\n"
171
+
172
+ run_format_test expected do
173
+ Log.set_widths(Log::DEFAULT_FILENAME_WIDTH, "08", Log::DEFAULT_FUNCTION_WIDTH)
174
+ end
175
+ end
176
+
177
+ def test_color
178
+ Log.verbose = true
179
+ io = StringIO.new
180
+ Log.output = io
181
+ Log.set_default_widths
182
+
183
+ expected = Array.new
184
+ expected << "[ ...testlog/logtestee.rb: 6] {color_test } azul\n"
185
+
186
+ lt = LogTestee.new
187
+ lt.color_test
188
+
189
+ puts io.string
190
+
191
+ assert_equal expected.join(''), io.string
192
+ end
193
+
194
+ # the ctor is down here so the lines above are less likely to change.
195
+ def initialize test, name = nil
196
+ @nonverbose_setup = Proc.new {
197
+ Log.verbose = false
198
+ Log.output = StringIO.new
199
+ }
200
+
201
+ @verbose_setup = Proc.new {
202
+ Log.verbose = true
203
+ Log.output = StringIO.new
204
+ }
205
+
206
+ super test
207
+ end
208
+
209
+ def exec_test setup, log, expected = Array.new
210
+ io = setup.call
211
+
212
+ log.call
213
+
214
+ assert_not_nil io
215
+ str = io.string
216
+ assert_not_nil str
217
+
218
+ lines = str.split "\n"
219
+
220
+ unless expected.empty?
221
+ (0 ... expected.size).each do |idx|
222
+ if expected[idx]
223
+ assert_equal expected[idx], lines[idx], "index: #{idx}"
224
+ end
225
+ end
226
+ end
227
+
228
+ Log.output = io
229
+ end
230
+
231
+ def run_test setup, log, *expected
232
+ io = setup.call
233
+
234
+ log.call
235
+
236
+ assert_not_nil io
237
+ str = io.string
238
+ assert_not_nil str
239
+
240
+ lines = str.split "\n"
241
+
242
+ (0 ... expected.size).each do |idx|
243
+ if expected[idx]
244
+ assert_equal expected[idx], lines[idx], "index: #{idx}"
245
+ end
246
+ end
247
+
248
+ Log.output = io
249
+ end
250
+
251
+ def test_respond_to_color
252
+ assert Log.respond_to? :blue
253
+ end
254
+ end
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'pathname'
5
+ require 'test/unit'
6
+ require 'stringio'
7
+ require 'riel/log/log'
8
+ require 'riel/log/loggable'
9
+ require 'riel/testlog/lgbl_testee'
10
+
11
+ class LoggableTestCase < Test::Unit::TestCase
12
+ include RIEL::Loggable
13
+
14
+ def test_instance_colors
15
+ RIEL::Log.verbose = true
16
+ io = StringIO.new
17
+ RIEL::Log.output = io
18
+
19
+ expected = Array.new
20
+ expected << "[...testlog/lgbl_testee.rb: 11] {LgblTestee#crystal } hello!\n"
21
+ expected << "[...testlog/lgbl_testee.rb: 12] {LgblTestee#crystal } azul ... \n"
22
+ expected << "[...testlog/lgbl_testee.rb: 13] {LgblTestee#crystal } rojo?\n"
23
+
24
+ te = LgblTestee.new
25
+ te.crystal
26
+
27
+ # puts io.string
28
+
29
+ assert_equal expected.join(''), io.string
30
+ end
31
+ end
metadata CHANGED
@@ -1,184 +1,140 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: riel
3
- version: !ruby/object:Gem::Version
4
- hash: 51
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.17
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 1
9
- - 16
10
- version: 1.1.16
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jeff Pace
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-12-15 00:00:00 -05:00
19
- default_executable:
20
- dependencies: []
21
-
12
+ date: 2013-03-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rainbow
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.4
22
30
  description: This library extends the core Ruby libraries.
23
31
  email: jeugenepace@gmail.com
24
32
  executables: []
25
-
26
33
  extensions: []
27
-
28
- extra_rdoc_files:
34
+ extra_rdoc_files:
29
35
  - README.md
30
- files:
36
+ files:
37
+ - lib/riel.rb
31
38
  - lib/riel/array.rb
32
- - lib/riel/size_converter.rb
39
+ - lib/riel/command.rb
40
+ - lib/riel/date.rb
41
+ - lib/riel/dir.rb
33
42
  - lib/riel/enumerable.rb
34
- - lib/riel/timer.rb
35
- - lib/riel/hash.rb
43
+ - lib/riel/env.rb
36
44
  - lib/riel/fdprocessor.rb
37
- - lib/riel/dir.rb
38
- - lib/riel/matchdata.rb
39
- - lib/riel/regexp.rb
40
- - lib/riel/text.rb
41
- - lib/riel/setdiff.rb
42
- - lib/riel/asciitable/column.rb
43
- - lib/riel/asciitable/cell.rb
44
- - lib/riel/asciitable/table.rb
45
- - lib/riel/asciitable/row.rb
46
- - lib/riel/io.rb
47
- - lib/riel/tempfile.rb
48
- - lib/riel/string.rb
49
- - lib/riel/command.rb
50
- - lib/riel/text/non_highlight.rb
51
- - lib/riel/text/html_highlight.rb
52
- - lib/riel/text/string.rb
53
- - lib/riel/text/highlightable.rb
54
- - lib/riel/text/highlight.rb
55
- - lib/riel/text/ansi/backgrounds.rb
56
- - lib/riel/text/ansi/color.rb
57
- - lib/riel/text/ansi/ansi_color.rb
58
- - lib/riel/text/ansi/rgb_color.rb
59
- - lib/riel/text/ansi/attributes.rb
60
- - lib/riel/text/ansi/rgb_highlighter.rb
61
- - lib/riel/text/ansi/ansi_highlight.rb
62
- - lib/riel/text/ansi/grey_palette.rb
63
- - lib/riel/text/ansi/ansi_palette.rb
64
- - lib/riel/text/ansi/rgb_palette.rb
65
- - lib/riel/text/ansi/foregrounds.rb
66
- - lib/riel/text/ansi/ansi_colors.rb
67
- - lib/riel/text/ansi/palette.rb
68
- - lib/riel/text/ansi/grey.rb
69
- - lib/riel/text/ansi/ansi_list.rb
70
- - lib/riel/pathname.rb
71
45
  - lib/riel/file.rb
46
+ - lib/riel/filetype.rb
47
+ - lib/riel/hash.rb
72
48
  - lib/riel/integer.rb
73
- - lib/riel/ansicolor.rb
74
- - lib/riel/optproc.rb
49
+ - lib/riel/io.rb
50
+ - lib/riel/log.rb
51
+ - lib/riel/log/log.rb
75
52
  - lib/riel/log/loggable.rb
76
- - lib/riel/log/severity.rb
77
53
  - lib/riel/log/logger.rb
78
- - lib/riel/log/log.rb
79
- - lib/riel/env.rb
80
- - lib/riel/filetype.rb
54
+ - lib/riel/log/severity.rb
55
+ - lib/riel/matchdata.rb
56
+ - lib/riel/optproc.rb
57
+ - lib/riel/pathname.rb
81
58
  - lib/riel/rcfile.rb
82
- - lib/riel/log.rb
83
- - lib/riel/date.rb
84
- - lib/riel.rb
85
- - test/riel/date_test.rb
86
- - test/riel/size_converter_test.rb
87
- - test/riel/env_test.rb
59
+ - lib/riel/regexp.rb
60
+ - lib/riel/setdiff.rb
61
+ - lib/riel/size_converter.rb
62
+ - lib/riel/string.rb
63
+ - lib/riel/tempfile.rb
64
+ - lib/riel/timer.rb
88
65
  - test/riel/array_test.rb
89
- - test/riel/matchdata_test.rb
90
- - test/riel/text_test.rb
66
+ - test/riel/command_test.rb
67
+ - test/riel/date_test.rb
91
68
  - test/riel/dir_test.rb
92
- - test/riel/file_test.rb
93
- - test/riel/regexp_test.rb
94
69
  - test/riel/enumerable_test.rb
95
- - test/riel/asciitable/table_test.rb
96
- - test/riel/pathname_test.rb
97
- - test/riel/optproc_test.rb
98
- - test/riel/io_test.rb
99
- - test/riel/tempfile_test.rb
70
+ - test/riel/env_test.rb
71
+ - test/riel/file_test.rb
100
72
  - test/riel/filetype_test.rb
101
- - test/riel/log_test.rb
102
- - test/riel/text/ansi/ansi_palette_test.rb
103
- - test/riel/text/ansi/rgb_palette_test.rb
104
- - test/riel/text/ansi/grey_palette_test.rb
105
- - test/riel/text/ansi/ansi_highlight_test.rb
106
- - test/riel/text/ansi/rgb_highlighter_test.rb
107
- - test/riel/text/string_test.rb
108
- - test/riel/text/highlightable_test.rb
73
+ - test/riel/hash_test.rb
109
74
  - test/riel/integer_test.rb
75
+ - test/riel/io_test.rb
76
+ - test/riel/log/format_test.rb
77
+ - test/riel/matchdata_test.rb
78
+ - test/riel/optproc_test.rb
79
+ - test/riel/pathname_test.rb
110
80
  - test/riel/rcfile_test.rb
111
- - test/riel/log_stack_test.rb
112
- - test/riel/hash_test.rb
81
+ - test/riel/regexp_test.rb
113
82
  - test/riel/setdiff_test.rb
83
+ - test/riel/size_converter_test.rb
114
84
  - test/riel/string_test.rb
115
- - test/riel/command_test.rb
85
+ - test/riel/tempfile_test.rb
86
+ - test/riel/testlog/log_stack_test.rb
87
+ - test/riel/testlog/log_test.rb
88
+ - test/riel/testlog/loggable_test.rb
116
89
  - test/riel/timer_test.rb
117
90
  - README.md
118
- has_rdoc: true
119
91
  homepage: http://www.incava.org/projects/riel
120
92
  licenses: []
121
-
122
93
  post_install_message:
123
94
  rdoc_options: []
124
-
125
- require_paths:
95
+ require_paths:
126
96
  - lib
127
- required_ruby_version: !ruby/object:Gem::Requirement
97
+ required_ruby_version: !ruby/object:Gem::Requirement
128
98
  none: false
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- hash: 3
133
- segments:
134
- - 0
135
- version: "0"
136
- required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
104
  none: false
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- hash: 3
142
- segments:
143
- - 0
144
- version: "0"
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
145
109
  requirements: []
146
-
147
110
  rubyforge_project:
148
- rubygems_version: 1.4.2
111
+ rubygems_version: 1.8.23
149
112
  signing_key:
150
113
  specification_version: 3
151
114
  summary: Extensions to core Ruby code.
152
- test_files:
153
- - test/riel/date_test.rb
154
- - test/riel/size_converter_test.rb
155
- - test/riel/env_test.rb
115
+ test_files:
156
116
  - test/riel/array_test.rb
157
- - test/riel/matchdata_test.rb
158
- - test/riel/text_test.rb
117
+ - test/riel/command_test.rb
118
+ - test/riel/date_test.rb
159
119
  - test/riel/dir_test.rb
160
- - test/riel/file_test.rb
161
- - test/riel/regexp_test.rb
162
120
  - test/riel/enumerable_test.rb
163
- - test/riel/asciitable/table_test.rb
164
- - test/riel/pathname_test.rb
165
- - test/riel/optproc_test.rb
166
- - test/riel/io_test.rb
167
- - test/riel/tempfile_test.rb
121
+ - test/riel/env_test.rb
122
+ - test/riel/file_test.rb
168
123
  - test/riel/filetype_test.rb
169
- - test/riel/log_test.rb
170
- - test/riel/text/ansi/ansi_palette_test.rb
171
- - test/riel/text/ansi/rgb_palette_test.rb
172
- - test/riel/text/ansi/grey_palette_test.rb
173
- - test/riel/text/ansi/ansi_highlight_test.rb
174
- - test/riel/text/ansi/rgb_highlighter_test.rb
175
- - test/riel/text/string_test.rb
176
- - test/riel/text/highlightable_test.rb
124
+ - test/riel/hash_test.rb
177
125
  - test/riel/integer_test.rb
126
+ - test/riel/io_test.rb
127
+ - test/riel/log/format_test.rb
128
+ - test/riel/matchdata_test.rb
129
+ - test/riel/optproc_test.rb
130
+ - test/riel/pathname_test.rb
178
131
  - test/riel/rcfile_test.rb
179
- - test/riel/log_stack_test.rb
180
- - test/riel/hash_test.rb
132
+ - test/riel/regexp_test.rb
181
133
  - test/riel/setdiff_test.rb
134
+ - test/riel/size_converter_test.rb
182
135
  - test/riel/string_test.rb
183
- - test/riel/command_test.rb
136
+ - test/riel/tempfile_test.rb
137
+ - test/riel/testlog/log_stack_test.rb
138
+ - test/riel/testlog/log_test.rb
139
+ - test/riel/testlog/loggable_test.rb
184
140
  - test/riel/timer_test.rb
@@ -1,91 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- # Attribute codes:
5
- # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
6
- # Text color codes:
7
- # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
8
- # Background color codes:
9
- # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
10
-
11
- module ANSIColor
12
- ATTRIBUTES = Hash[
13
- 'none' => '0',
14
- 'reset' => '0',
15
- 'bold' => '1',
16
- 'underscore' => '4',
17
- 'underline' => '4',
18
- 'blink' => '5',
19
- 'reverse' => '7',
20
- 'concealed' => '8',
21
- 'black' => '30',
22
- 'red' => '31',
23
- 'green' => '32',
24
- 'yellow' => '33',
25
- 'blue' => '34',
26
- 'magenta' => '35',
27
- 'cyan' => '36',
28
- 'white' => '37',
29
- 'on_black' => '40',
30
- 'on_red' => '41',
31
- 'on_green' => '42',
32
- 'on_yellow' => '43',
33
- 'on_blue' => '44',
34
- 'on_magenta' => '45',
35
- 'on_cyan' => '46',
36
- 'on_white' => '47',
37
- ]
38
-
39
- ATTRIBUTES.each do |name, val|
40
- eval <<-EODEF
41
- def ANSIColor.#{name}
42
- "\\e[#{val}m"
43
- end
44
- EODEF
45
- end
46
-
47
- def ANSIColor.attributes
48
- ATTRIBUTES.collect { |name, val| name }
49
- end
50
-
51
- # returns the code for the given color string, which is in the format:
52
- # [foreground] on [background]. Note that the foreground and background sections
53
- # can have modifiers (attributes). Examples:
54
- # black
55
- # blue on white
56
- # bold green on yellow
57
- # underscore bold magenta on cyan
58
- # underscore red on bold cyan
59
-
60
- def ANSIColor.code str
61
- fg, bg = str.split(/\s*\bon_?\s*/)
62
- (fg ? foreground(fg) : "") + (bg ? background(bg) : "")
63
- end
64
-
65
- # returns the code for the given background color(s)
66
- def ANSIColor.background bgcolor
67
- make_code "on_" + bgcolor
68
- end
69
-
70
- # returns the code for the given foreground color(s)
71
- def ANSIColor.foreground fgcolor
72
- make_code fgcolor
73
- end
74
-
75
- protected
76
-
77
- def ANSIColor.make_code str
78
- if str
79
- str.split.collect do |s|
80
- if attr = ATTRIBUTES[s]
81
- "\e[#{attr}m"
82
- else
83
- $stderr.puts "WARNING: ANSIColor::make_code(" + str + "): unknown color: " + s
84
- return ""
85
- end
86
- end.join ""
87
- else
88
- ""
89
- end
90
- end
91
- end