loquacious 1.2.0 → 1.3.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,3 +1,8 @@
1
+ == 1.3.0 / 2009-04-05
2
+
3
+ * 1 minor enhancement
4
+ - Adding colorization options to the Help object
5
+
1
6
  == 1.2.0 / 2009-04-05
2
7
 
3
8
  * 1 minor enhancement
@@ -2,7 +2,7 @@
2
2
  module Loquacious
3
3
 
4
4
  # :stopdoc:
5
- VERSION = '1.2.0'
5
+ VERSION = '1.3.0'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
@@ -18,7 +18,14 @@ class Loquacious::Configuration
18
18
  :name_leader => ' - '.freeze,
19
19
  :name_length => 0,
20
20
  :name_value_sep => ' => '.freeze,
21
- :desc_leader => ' '.freeze
21
+ :desc_leader => ' '.freeze,
22
+ :colorize => false,
23
+ :colors => {
24
+ :name => :white,
25
+ :value => :cyan,
26
+ :description => :green,
27
+ :leader => :yellow
28
+ }.freeze
22
29
  }.freeze
23
30
 
24
31
  class Error < StandardError; end
@@ -34,6 +41,12 @@ class Loquacious::Configuration
34
41
  # :name_value_sep String separating the attribute name from the value
35
42
  # :desc_leader String appearing before the description
36
43
  # :io The IO object where help will be written
44
+ # :colorize Flag to colorize the output or not
45
+ # :colors Hash of colors for the name, value, description
46
+ # :name Name color
47
+ # :value Value color
48
+ # :description Description color
49
+ # :leader Leader and spacer color
37
50
  #
38
51
  # The description is printed before each attribute name and value on its
39
52
  # own line.
@@ -46,6 +59,8 @@ class Loquacious::Configuration
46
59
  @io = opts[:io]
47
60
  @name_length = Integer(opts[:name_length])
48
61
  @desc_leader = opts[:desc_leader]
62
+ @colorize = opts[:colorize]
63
+ @colors = opts[:colors]
49
64
 
50
65
  unless @name_length > 0
51
66
  Iterator.new(@config).each do |node|
@@ -64,12 +79,33 @@ class Loquacious::Configuration
64
79
  @format = "#{name_leader}%-#{@name_length}s#{name_value_sep}%s"
65
80
  @name_format = "#{name_leader}%s"
66
81
 
82
+ if colorize?
83
+ @desc_leader = self.__send__(@colors[:leader], @desc_leader)
84
+ name_leader = self.__send__(@colors[:leader], name_leader)
85
+ name_value_sep = self.__send__(@colors[:leader], name_value_sep)
86
+
87
+ @format = name_leader.dup
88
+ @format << self.__send__(@colors[:name], "%-#{@name_length}s")
89
+ @format << name_value_sep.dup
90
+ @format << self.__send__(@colors[:value], "%s")
91
+
92
+ @name_format = name_leader.dup
93
+ @name_format << self.__send__(@colors[:name], "%s")
94
+ end
95
+
67
96
  @desc_leader.freeze
68
97
  @value_leader.freeze
69
98
  @format.freeze
70
99
  @name_format.freeze
71
100
  end
72
101
 
102
+ # Returns +true+ if the help instance is configured to colorize the
103
+ # output messages. Returns +false+ otherwise.
104
+ #
105
+ def colorize?
106
+ @colorize
107
+ end
108
+
73
109
  # call-seq:
74
110
  # show_attribute( name = nil, opts = {} )
75
111
  #
@@ -128,7 +164,15 @@ class Loquacious::Configuration
128
164
  def print_node( node, show_description, show_value )
129
165
  desc = node.desc.to_s.dup
130
166
  show_description = false if desc.empty?
131
- @io.puts(desc.indent(@desc_leader)) if show_description
167
+
168
+ if show_description
169
+ if colorize?
170
+ desc = desc.gsub(%r/([^\n]+)/,
171
+ self.__send__(@colors[:description], '\1'))
172
+ end
173
+ @io.puts(desc.indent(@desc_leader))
174
+ end
175
+
132
176
  @io.puts(format_name(node, show_value))
133
177
  @io.puts if show_description
134
178
  end
@@ -148,6 +192,42 @@ class Loquacious::Configuration
148
192
  @format % [name, obj]
149
193
  end
150
194
 
195
+ [ [ :clear , 0 ],
196
+ [ :reset , 0 ], # synonym for :clear
197
+ [ :bold , 1 ],
198
+ [ :dark , 2 ],
199
+ [ :italic , 3 ], # not widely implemented
200
+ [ :underline , 4 ],
201
+ [ :underscore , 4 ], # synonym for :underline
202
+ [ :blink , 5 ],
203
+ [ :rapid_blink , 6 ], # not widely implemented
204
+ [ :negative , 7 ], # no reverse because of String#reverse
205
+ [ :concealed , 8 ],
206
+ [ :strikethrough, 9 ], # not widely implemented
207
+ [ :black , 30 ],
208
+ [ :red , 31 ],
209
+ [ :green , 32 ],
210
+ [ :yellow , 33 ],
211
+ [ :blue , 34 ],
212
+ [ :magenta , 35 ],
213
+ [ :cyan , 36 ],
214
+ [ :white , 37 ],
215
+ [ :on_black , 40 ],
216
+ [ :on_red , 41 ],
217
+ [ :on_green , 42 ],
218
+ [ :on_yellow , 43 ],
219
+ [ :on_blue , 44 ],
220
+ [ :on_magenta , 45 ],
221
+ [ :on_cyan , 46 ],
222
+ [ :on_white , 47 ] ].each do |name,code|
223
+
224
+ class_eval <<-CODE
225
+ def #{name.to_s}( str )
226
+ "\e[#{code}m\#{str}\e[0m"
227
+ end
228
+ CODE
229
+ end
230
+
151
231
  end # class Help
152
232
  end # module Loquacious
153
233
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{loquacious}
5
- s.version = "1.2.0"
5
+ s.version = "1.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Tim Pease"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loquacious
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Pease