color_echo 2.0.4 → 3.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.
@@ -1,19 +1,36 @@
1
- @explain_v = %(Show version of color_echo.)
2
- @explain_s = %(Show symbol list that can to specify.)
3
- @explain_l = %(Show color index list that can to specify.)
4
- @explain_p = %(Decorate your specified wrods. You can use this option any number of times.)
5
- @explain_H = %(Highlight the match lines by -p options word. format -H "fg_color, bg_color, text_attribute[,...]")
6
- @explain_f = %(Specify the foreground color.)
7
- @explain_b = %(Specify the background color.)
8
- @explain_t = %(Specify the text attributes.)
9
- @explain_w = %(Interactive mode. Break word is -> exit, quit, bye; Or Ctl + c)
1
+ @padding = " " * 4
2
+ @header_s = %(-s, --symbol-list)
3
+ @explain_s = %(Shows symbol list that can to specify in foreground_color, background_color, text_attr.)
4
+ @header_l = %(-l, --index-list)
5
+ @explain_l = %(Shows color index list that can to specify in foreground_color, background_color.)
6
+ @header_p = %(-p, --pickup "pattern[,foreground_color[,background_color[,text_attribute]]]")
7
+ @explain_p = %(Decorates your specified pattern. You can use this option many times.)
8
+ @header_H = %(-H, --hightlight "foreground_color[,background_color[,text_attribute]]")
9
+ @explain_H = %(Highlight lines that match pattern which is specified by -p option.)
10
+ @header_f = %(-f, --fg color_name)
11
+ @explain_f = %(Specifies foreground color.)
12
+ @header_b = %(-b, --bg color_name)
13
+ @explain_b = %(Specifies background color.)
14
+ @header_t = %(-t, --tx text_attribute[,...])
15
+ @explain_t = %(Specifies background color.)
16
+ @header_w = %(-w, --watch)
17
+ @explain_w = %(Keeps wait for standard input.)
18
+ @header_stripe = %(--stripe)
19
+ @explain_stripe = %(Decorates on every other line.)
20
+ @header_r = %(-r, --refresh-match)
21
+ @explain_r = %(Tries to delete sequence code from input that matches -p option’s pattern)
22
+ @header_R = %(-R, --refresh)
23
+ @explain_R = %(Tries to delete sequence code from input.)
24
+ @header_c = %(-c file_name,...)
25
+ @explain_c = %(Reads options from your specify file. You can specify many files as -c foo,bar,baz.)
26
+ @header_n = %(-n)
10
27
  @explain_n = %(Do not output the trailing newline.)
28
+ @header_e = %(-e)
11
29
  @explain_e = %(Enable interpretation of line feed.)
12
- @explain_h = %(Show help message with example.)
13
- @explain_r = %(Try to remove the sequence code from the given before matching pickups.)
14
- @explain_R = %(Try to remove the sequence code from the given.)
15
- @explain_stripe = %(Decorate on every other line. pickup option is ignored.)
16
- @padding = " " * 4
30
+ @header_v = %(-v)
31
+ @explain_v = %(Shows version of color_echo.)
32
+ @header_h = %(-h, --help)
33
+ @explain_h = %(Shows help message.)
17
34
  @explain_usage = @padding * 2 + %(colorecho [options] message) + $/
18
35
  @explain_usage += @padding * 2 + %(colorecho [options] < /path/to/file) + $/
19
36
  @explain_usage += @padding * 2 + %(echo "message" | colorecho [options]) + $/
@@ -40,119 +57,104 @@ def usage
40
57
 
41
58
  EOS
42
59
 
43
- headers = ["* Usage", "* Options", "* Example"]
44
- headers_op = [
45
- "-v:", "--symbol-list:", "--index-list:", "--pickup word [--pickup word ...]:", "--fg color_name:", "--bg color_name:",
46
- "--tx text_attribute[,...]:", "--watch:", "--stripe:", %(--hightlight "foreground_color[,background_color[,text_attribute]]:"),
47
- "--refresh:", "--refresh-pre-match:", "--help:", "-n:", "-e:"
48
- ]
60
+ headers = ["* Usage", "* Options", "* Example"]
49
61
  CE.pickup(headers, :h_green)
50
- CE.pickup(headers_op, :cyan)
51
62
 
52
63
  puts @padding + "* Usage"
53
64
 
54
65
  CE.ch :h_blue
55
- puts @explain_usage + $/ + $/
66
+ puts @explain_usage + $/ * 2
56
67
  CE.off :fg
57
68
 
69
+ headers_op = [
70
+ @header_l,
71
+ @header_p,
72
+ @header_H,
73
+ @header_f,
74
+ @header_b,
75
+ @header_t,
76
+ @header_w,
77
+ @header_n,
78
+ @header_e,
79
+ @header_h,
80
+ @header_stripe,
81
+ @header_r,
82
+ @header_R,
83
+ @header_c,
84
+ @header_v,
85
+ @header_s
86
+ ]
87
+ CE.pickup(headers_op, :cyan)
88
+
58
89
  puts @padding + "* Options"
59
90
 
60
- puts @padding * 2 + "--symbol-list:"
61
- puts @padding * 3 + @explain_s
62
- puts @padding * 3 + "short option is -s." + $/ + $/
91
+ puts @padding * 2 + @header_s
92
+ puts @padding * 3 + @explain_s + $/ * 2
63
93
 
64
- puts @padding * 2 + "--index-list:"
65
- puts @padding * 3 + @explain_l
66
- puts @padding * 3 + "short option is -l." + $/ + $/
67
-
68
- puts @padding * 2 + "--pickup word [--pickup word ...]:"
69
- puts @padding * 3 + @explain_p
70
- puts @padding * 3 + "Regular expressions can be used; like that -> /^foo/i"
71
- puts @padding * 3 + "short option is -p." + $/ + $/
72
-
73
- puts @padding * 2 + %(--hightlight "foreground_color[,background_color[,text_attribute]]:")
74
- puts @padding * 3 + @explain_H
75
- puts @padding * 3 + %(example -> echo "some message" | colorecho -H "nil,gray" -p /some patturn/ -f h_yellow)
76
- puts @padding * 3 + "short option is -H." + $/ + $/
77
-
78
- puts @padding * 2 + "--fg color_name:"
79
- puts @padding * 3 + @explain_f
80
- puts @padding * 3 + "short option is -f." + $/ + $/
81
-
82
- puts @padding * 2 + "--bg color_name:"
83
- puts @padding * 3 + @explain_b
84
- puts @padding * 3 + "short option is -b." + $/ + $/
85
-
86
- puts @padding * 2 + "--tx text_attribute[,...]:"
87
- puts @padding * 3 + @explain_t
88
- puts @padding * 3 + "short option is -t." + $/ + $/
89
-
90
- puts @padding * 2 + "--watch:"
91
- puts @padding * 3 + @explain_w
92
- puts @padding * 3 + "short option is -w." + $/ + $/
93
-
94
- puts @padding * 2 + "--stripe:"
95
- puts @padding * 3 + @explain_stripe + $/ + $/
96
-
97
- puts @padding * 2 + "--refresh-pre-match:"
98
- puts @padding * 3 + @explain_r
99
- puts @padding * 3 + "If it matches, Try to remove sequence code from it."
100
- puts @padding * 3 + "short option is -r." + $/ + $/
101
-
102
- puts @padding * 2 + "--refresh:"
103
- puts @padding * 3 + @explain_R
104
- puts @padding * 3 + "short option is -R." + $/ + $/
105
-
106
- puts @padding * 2 + "-n:"
107
- puts @padding * 3 + @explain_n + $/ + $/
108
-
109
- puts @padding * 2 + "-e:"
110
- puts @padding * 3 + @explain_e + $/ + $/
111
-
112
- puts @padding * 2 + "-v:"
113
- puts @padding * 3 + @explain_v + $/ + $/
114
-
115
- puts @padding * 2 + "--help:"
116
- puts @padding * 3 + @explain_h
117
- puts @padding * 3 + "short option is -h." + $/ + $/
118
-
119
- puts @padding + "* Example"
120
-
121
- CE.once.ch :h_magenta
122
- puts @padding * 2 + %(* color_echo can to highlight even when you following the log file by tailf, tail -f.)
123
- puts @padding * 3 + %(tailf /var/log/httpd/access_log | colorecho -w -p "127.0.0.1" -t bold)
124
- puts @padding * 3 + %(tailf /var/log/php/php_error.log | colorecho -w -p "foo.php" -p "Fatal error:" -f h_blue) + $/ + $/
125
-
126
- CE.once.ch :h_magenta
127
- puts @padding * 2 + %(* color_echo is useful to read the access log, etc.)
128
- puts @padding * 3 + %(cat /var/log/httpd/access_log | colorecho -p "Sun Jan 18" -f h_cyan -t underscore | less -R)
129
- puts @padding * 3 + %(colorecho -p "Sun Jan 18" -f h_cyan -t underscore < /var/log/httpd/access_log | less -R)
130
- puts @padding * 3 + %((colorecho -f cyan -p /\\\\s2..\\\\s/ | colorecho -f h_red -p /\\\\s5..\\\\s/ | less -R) < /var/log/httpd/access_log)
131
- puts @padding * 3 + %(sed -n 1,1000p /var/log/httpd/access_log | colorecho -f cyan -p /\\\\s2..\\\\s/ | colorecho -f h_red -p /\\\\s5..\\\\s/ | less -R) + $/ + $/
132
-
133
- CE.once.ch :h_magenta
134
- puts @padding * 2 + %(* It is a simple to use.)
135
- puts @padding * 3 + %(colorecho Hello\\!\\! -f h_white -b index199)
136
- puts @padding * 3 + %(colorecho Hello\\!\\! -t blink,bold -f magenta) + $/ + $/
137
-
138
- CE.once.ch :h_magenta
139
- puts @padding * 2 + %(* color_echo can to receive the standard input.)
140
- puts @padding * 3 + %(echo FooFoOfOO | colorecho -t reverse_video)
141
- puts @padding * 3 + %(echo FooFoOfOO | colorecho -f index130 -p /foo$/i | colorecho -f index180 -p /^foo/i)
142
- puts @padding * 3 + %(netstat -na | colorecho -p ":80" | colorecho -p "127.0.0.1" -f h_cyan) + $/ + $/
143
-
144
- CE.once.ch :h_magenta
145
- puts @padding * 2 + %(* color_echo can to decorate on every other line.)
146
- puts @padding * 3 + %(colorecho -f gray -t bold --stripe < /path/to/file)
147
- puts @padding * 3 + %(tailf /var/log/httpd/access_log | colorecho -w -f black -b index150 -t bold --stripe) + $/ + $/
94
+ puts @padding * 2 + @header_l
95
+ puts @padding * 3 + @explain_l + $/ * 2
148
96
 
149
- CE.once.rainbow
150
- puts @padding * 2 + %(* Enjoy colors!!)
151
- puts @padding * 3 + %(tailf /var/log/httpd/access_log | colorecho -w -f index235 -r | colorecho -w -p "pattern1" -f index3 -t underscore,bold -H index85 -r | colorecho -w -p "pattern2" -f index28,nil -t underscore,bold -H index46 -r | colorecho -w -p "pattern3" -t bold,underscore -f index198 -H index178 -r) + $/ + $/
97
+ puts @padding * 2 + @header_p
98
+ puts @padding * 3 + @explain_p + $/ * 2
99
+
100
+ puts @padding * 2 + @header_H
101
+ puts @padding * 3 + @explain_H + $/ * 2
102
+
103
+ puts @padding * 2 + @header_f
104
+ puts @padding * 3 + @explain_f + $/ * 2
105
+
106
+ puts @padding * 2 + @header_b
107
+ puts @padding * 3 + @explain_b + $/ * 2
108
+
109
+ puts @padding * 2 + @header_t
110
+ puts @padding * 3 + @explain_t + $/ * 2
111
+
112
+ puts @padding * 2 + @header_w
113
+ puts @padding * 3 + @explain_w + $/ * 2
152
114
 
115
+ puts @padding * 2 + @header_stripe
116
+ puts @padding * 3 + @explain_stripe + $/ * 2
117
+
118
+ puts @padding * 2 + @header_r
119
+ puts @padding * 3 + @explain_r + $/ * 2
120
+
121
+ puts @padding * 2 + @header_R
122
+ puts @padding * 3 + @explain_R + $/ * 2
123
+
124
+ puts @padding * 2 + @header_c
125
+ puts @padding * 3 + @explain_c + $/ * 2
126
+
127
+ puts @padding * 2 + @header_n
128
+ puts @padding * 3 + @explain_n + $/ * 2
129
+
130
+ puts @padding * 2 + @header_e
131
+ puts @padding * 3 + @explain_e + $/ * 2
132
+
133
+ puts @padding * 2 + @header_v
134
+ puts @padding * 3 + @explain_v + $/ * 2
135
+
136
+ puts @padding * 2 + @header_h
137
+ puts @padding * 3 + @explain_h + $/ * 2
138
+
139
+ CE.once.rainbow
140
+ puts @padding * 2 + %(Let's enjoy colors!!) + $/ * 2
153
141
  exit 0
154
142
  end
155
143
 
144
+ def warn_display(msg, header="Runtime")
145
+ warn(%(#{header} Warning:))
146
+ warn(" " * 4 + msg + $/ * 2)
147
+ end
148
+
149
+ def error_display(msg, header="Runtime")
150
+ msgls = msg.is_a?(Array) ? msg : [msg]
151
+ warn(%(#{header} Error:))
152
+ msgls.each do |msg|
153
+ warn(" " * 4 + msg + $/)
154
+ end
155
+ exit 1
156
+ end
157
+
156
158
  # TODO need pager like 'less'?
157
159
  def display_color_index
158
160
  require_color_echo_get
@@ -174,7 +176,7 @@ def display_color_index
174
176
  mes += " " * 3
175
177
 
176
178
  if num % 8 == 0
177
- mes += $/ + $/
179
+ mes += $/ * 2
178
180
  mes += @padding if num != 256
179
181
  end
180
182
  end
@@ -206,7 +208,7 @@ def display_symbol_list
206
208
  ]
207
209
  symbols_text_attr = [
208
210
  :bold,
209
- :underscore,
211
+ :underline,
210
212
  :blink,
211
213
  :reverse_video,
212
214
  :concealed
@@ -222,7 +224,7 @@ def display_symbol_list
222
224
 
223
225
  header_colors = "* foreground or background colors"
224
226
  header_text_attrs = "* text attributes"
225
- CE.pickup([header_colors, header_text_attrs], :cyan, nil, [:underscore, :bold])
227
+ CE.pickup([header_colors, header_text_attrs], :cyan, nil, [:underline, :bold])
226
228
 
227
229
  puts @padding + header_colors
228
230
  symbols_color.each do |color_name|
@@ -233,7 +235,7 @@ def display_symbol_list
233
235
  end
234
236
 
235
237
  CE.off [:bg, :fg]
236
- print $/ + $/
238
+ print $/ * 2
237
239
 
238
240
  puts @padding + header_text_attrs
239
241
  symbols_text_attr.each do |tx_name|
@@ -1,8 +1,8 @@
1
1
  module CE
2
2
  LIBS_NAME = "color_echo"
3
- VERSION = "2.0.4"
4
- SUMMARY = "Decorate the command line output with ANSI escape sequence."
5
- DOCS_PAGE = "https://github.com/khotta/color_echo"
3
+ VERSION = "3.0.0"
4
+ SUMMARY = "Decorates command line output with ANSI escape sequence."
5
+ HOMEPAGE = "http://colorecho.net"
6
6
  DESCRIPTION = <<EOS
7
7
  #{SUMMARY}
8
8
  Text that output by "print, puts, p" method is decorated.
@@ -22,7 +22,7 @@ module CE
22
22
  reset_bg
23
23
  reset_tx
24
24
  reset_pickup
25
- reset_hitline
25
+ reset_highlight
26
26
  reset_rainbow
27
27
  when :fg
28
28
  reset_fg
@@ -32,8 +32,8 @@ module CE
32
32
  reset_tx
33
33
  when :pickup
34
34
  reset_pickup
35
- when :hitline
36
- reset_hitline
35
+ when :highlight
36
+ reset_highlight
37
37
  when :rainbow
38
38
  reset_rainbow
39
39
  end
@@ -108,7 +108,7 @@ module CE
108
108
  # @param symbol bg
109
109
  # @param symbol tx
110
110
  # @return self
111
- def pickup(target, fg=:red, bg=nil, *txs)
111
+ def pickup(target, fg=:cyan, bg=nil, *txs)
112
112
  key = target.object_id.to_s
113
113
  @@pickup_list[key] = {}
114
114
 
@@ -139,7 +139,9 @@ module CE
139
139
  end
140
140
  end
141
141
 
142
- @@pickup_list[key][:code] = code_fg + code_bg + code_tx
142
+ @@pickup_list[key][:code] = code_fg + code_bg + code_tx
143
+ @@pickup_list[key][:index] = @@cnt_pickups
144
+ @@cnt_pickups += 1
143
145
 
144
146
  return self
145
147
  end
@@ -155,49 +157,39 @@ module CE
155
157
 
156
158
  # change hit lines decoration
157
159
  # @return void
158
- def hitline(fg=nil, bg=nil, *txs)
159
- if fg.instance_of?(Symbol)
160
- @@code_hitline_fg_color = convert_to_code("ForeGround", fg)
161
- else
162
- @@code_hitline_fg_color = ""
163
- end
164
-
165
- if bg.instance_of?(Symbol)
166
- @@code_hitline_bg_color = convert_to_code("BackGround", bg)
167
- else
168
- @@code_hitline_bg_color = ""
169
- end
160
+ def highlight(fg=nil, bg=nil, *txs)
161
+ fg = convert_to_code("ForeGround", fg)
162
+ bg = convert_to_code("BackGround", bg)
163
+ tx = ""
170
164
 
171
165
  if txs.size > 0
166
+ # if text attribute has input as array
172
167
  txs = txs[0] if txs[0].instance_of?(Array)
168
+
173
169
  txs.each do |name|
174
170
  next if !name.is_a?(Symbol)
175
- @@code_hitline_text_attr += convert_to_code("TextAttr", name)
171
+ tx += convert_to_code("TextAttr", name)
176
172
  end
177
173
  end
174
+ @@code_highlights << fg + bg + tx
178
175
 
179
176
  return self
180
177
  end
181
178
 
182
- # get escape sequence code of that hit record line
183
- # @return string
184
- def get_hitline_code
185
- return @@code_hitline_fg_color + @@code_hitline_bg_color + @@code_hitline_text_attr
186
- end
187
-
188
179
  # get decorated text
189
180
  # require "color_echo/get"
190
181
  # @param string text
191
182
  def get(text)
192
183
  if @@allow_output
193
- warn (%([WARNING] CE.get; If you want to use this module function; You have to require "color_echo/get" only!))
184
+ caller()[0] =~ /(.*?):(\d+)/
185
+ warn (%([WARNING] #{$1} #{$2}: You can't call CE.get. You must to read like -> require 'color_echo/get' ))
194
186
  return text
195
187
  end
196
188
 
197
189
  if !text.is_a?(String)
198
190
  text = text.to_s
199
191
  end
200
-
192
+
201
193
  @@task.call(text)
202
194
  end
203
195
 
@@ -221,6 +213,19 @@ module CE
221
213
  return self
222
214
  end
223
215
 
216
+ # CE.get will be stateful
217
+ # @return self
218
+ def stateful
219
+ @@stateful_getter = true
220
+ return self
221
+ end
222
+
223
+ # CE.get will be stateless
224
+ def stateless
225
+ @@stateful_getter = false
226
+ return self
227
+ end
228
+
224
229
  # method alias
225
230
  alias_method :off, :reset
226
231
  alias_method :disable, :reset
@@ -1,7 +1,8 @@
1
1
  begin
2
2
  require "stringio"
3
3
  rescue LoadError
4
- warn "color_echo required 'stringio'."
4
+ warn "'stringio' is required for color_echo."
5
+ exit 1
5
6
  end
6
7
 
7
8
  require_relative "const"
@@ -42,15 +42,14 @@ module CE
42
42
  # @return self
43
43
  def reset_pickup
44
44
  @@pickup_list = {}
45
+ @@cnt_pickups = 0
45
46
  return self
46
47
  end
47
48
 
48
- # reset hitline code
49
+ # reset highlight code
49
50
  # @return self
50
- def reset_hitline
51
- @@code_hitline_bg_color = ""
52
- @@code_hitline_fg_color = ""
53
- @@code_hitline_text_attr = ""
51
+ def reset_highlight
52
+ @@code_highlights = []
54
53
  return self
55
54
  end
56
55
 
@@ -75,16 +74,31 @@ module CE
75
74
 
76
75
  # return start escape sequence code
77
76
  # @return string
78
- def get_start_code(type=nil)
77
+ def get_start_code
79
78
  if @@rainbow
80
79
  return @@code_rainbow
81
- elsif type == :hitline
82
- return @@code_hitline_fg_color + @@code_hitline_bg_color + @@code_hitline_text_attr
83
80
  else
84
81
  return @@code_fg_color + @@code_bg_color + @@code_text_attr
85
82
  end
86
83
  end
87
84
 
85
+ # return start escape sequence code
86
+ # @param int index
87
+ # @return string
88
+ def get_highlight_code(index=0)
89
+ if @@code_highlights[index] == nil
90
+ code = @@code_highlights[0]
91
+ if code == nil
92
+ # e.g. no specify any -H option
93
+ return ""
94
+ else
95
+ return code
96
+ end
97
+ end
98
+
99
+ return @@code_highlights[index]
100
+ end
101
+
88
102
  # @return String
89
103
  def get_reset_code
90
104
  return self::Off::ALL
@@ -148,37 +162,64 @@ module CE
148
162
  text = cleanup_text(text)
149
163
  end
150
164
 
151
- is_match = false
165
+ match_pattern_keys = []
166
+ # repeat as called pickup method
152
167
  @@pickup_list.each_pair do |key, hash|
153
168
  patterns = hash[:patterns]
154
169
  code_pickup = hash[:code]
170
+ index = hash[:index]
155
171
 
156
- # repeat to each specified pickup pattern
172
+ # repeat as patterns
157
173
  patterns.each do |pattern|
158
- # pattern is Regexp
159
174
  if pattern.is_a?(Regexp)
160
- after_text = ""
175
+ # pattern is Regexp
176
+ if (pattern =~ text && !match_pattern_keys.index(index))
177
+ match_pattern_keys << index
178
+ end
179
+
180
+ if match_pattern_keys.size > 1
181
+ code_highlight = get_highlight_code(0)
182
+ else
183
+ code_highlight = get_highlight_code(index)
184
+ end
185
+
161
186
  # global match
187
+ after_text = ""
162
188
  (text.scan(pattern)).size.times do
163
189
  pattern =~ text
164
- after_text += $` + get_reset_code + code_pickup + $& + get_reset_code + get_start_code + get_start_code(:hitline)
190
+ after_text += $` + get_reset_code + code_pickup + $& + get_reset_code + get_start_code + code_highlight
165
191
  text = $'
166
192
  end
167
- text = after_text + text
168
- is_match = ($& != nil) if (!is_match)
193
+ text = after_text + text
169
194
 
170
- # pattern is String
171
195
  else
172
- res = text.gsub!(pattern, get_reset_code + code_pickup + pattern + get_reset_code + get_start_code + get_start_code(:hitline))
173
- is_match = (res != nil) if (!is_match)
196
+ # pattern is String
197
+ if (text.index(pattern) != nil && !match_pattern_keys.index(index))
198
+ match_pattern_keys << index
199
+ end
200
+
201
+ if match_pattern_keys.size > 1
202
+ code_highlight = get_highlight_code(0)
203
+ else
204
+ code_highlight = get_highlight_code(index)
205
+ end
206
+
207
+ text.gsub!(pattern, get_reset_code + code_pickup + pattern + get_reset_code + get_start_code + code_highlight)
174
208
  end
175
209
  end
176
210
  end
177
211
 
178
- if is_match
179
- text = get_start_code(:hitline) + text + get_reset_code
180
- elsif @@refresh_pre_match
181
- text = orgtext
212
+ if match_pattern_keys.size == 0
213
+ # not match
214
+ text = orgtext if @@refresh_pre_match
215
+ return text
216
+ end
217
+
218
+ if match_pattern_keys.size == 1
219
+ text = get_highlight_code(match_pattern_keys[0]) + text + get_reset_code
220
+ else
221
+ # many pattern matched, use first -H option
222
+ text = get_highlight_code(0) + text + get_reset_code
182
223
  end
183
224
 
184
225
  return text
@@ -189,7 +230,7 @@ module CE
189
230
  # @param symbol name
190
231
  # @return string
191
232
  def convert_to_code(module_name, name)
192
- return "" if (name == nil || name == "")
233
+ return "" if (!name.is_a?(Symbol) || name == :nil)
193
234
 
194
235
  begin
195
236
  cname = name.to_s.swapcase