jamescook-pow 0.1.3 → 0.1.4
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.
- data/README +11 -4
- data/jamescook-pow.gemspec +3 -3
- data/lib/pow.rb +63 -17
- data/rakefile.rb +2 -2
- data/test/pow_test.rb +15 -1
- metadata +3 -3
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
P O W !
|
1
|
+
P O W !
|
2
2
|
|
3
3
|
Override your 'puts' for fun shell coloring.
|
4
4
|
|
@@ -13,12 +13,19 @@ Examples:
|
|
13
13
|
puts.red "Hello world in red"
|
14
14
|
puts.red! "Hello world in red, but with boldness"
|
15
15
|
puts.red_ "Hello world in red, but with underscore"
|
16
|
-
puts.rainbow "
|
16
|
+
puts.rainbow "Hello world, but more silly."
|
17
|
+
|
18
|
+
puts_ "Hello world, underscored."
|
19
|
+
puts! "Hello world, bold."
|
20
|
+
|
21
|
+
puts "Hello world, and I can highlight matches.", :match => "can"
|
22
|
+
puts "Hello world, and I can highlight matches with a specific color.", :match => "can", :match_color => :purple
|
17
23
|
|
18
24
|
p.red "Hello world, but less typing .. also red."
|
19
25
|
p! "Hello world, in bold"
|
20
26
|
p! "Mix and match", :color => :purple, :background => :black
|
21
27
|
|
22
28
|
|
23
|
-
|
24
|
-
|
29
|
+
You can also set defaults in your ~/.irbrc or wherever.
|
30
|
+
require 'pow'
|
31
|
+
Pow.defaults = {:bold => true} # Now any puts will default to bold
|
data/jamescook-pow.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jamescook-pow}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Cook"]
|
12
|
-
s.date = %q{2009-11-
|
13
|
-
s.description = %q{'puts' with shell colors.}
|
12
|
+
s.date = %q{2009-11-23}
|
13
|
+
s.description = %q{Ruby 'puts' with shell colors.}
|
14
14
|
s.email = %q{jamecook@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README"
|
data/lib/pow.rb
CHANGED
@@ -1,12 +1,25 @@
|
|
1
1
|
module Pow
|
2
2
|
# Override puts on include to allow coloring (but also retain existing function)
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
class << self
|
4
|
+
def included(base)
|
5
|
+
@@defaults = {}
|
6
|
+
base.send(:define_method, :puts){ |*args| Puts.new(*args) }
|
7
|
+
base.send(:define_method, :puts!){ |*args| opts=(args.detect{|a| a.is_a?(Hash)} || {}).merge(:misc => {:bold => true}); args.reject!{|a| a.is_a?(Hash)}; args = [args.push(opts)].flatten; Puts.new(*args) } # Now that's just self-explanatory ..
|
8
|
+
base.send(:define_method, :puts_){ |*args| opts=(args.detect{|a| a.is_a?(Hash)} || {}).merge(:misc => {:underline => true}); args.reject!{|a| a.is_a?(Hash)}; args = [args.push(opts)].flatten; Puts.new(*args) } # Now that's just self-explanatory ..
|
9
|
+
|
10
|
+
base.send(:alias_method, :p, :puts)
|
11
|
+
base.send(:alias_method, :p!, :puts!)
|
12
|
+
base.send(:alias_method, :p_, :puts_)
|
13
|
+
end
|
14
|
+
def defaults
|
15
|
+
@@defaults
|
16
|
+
end
|
6
17
|
|
7
|
-
|
8
|
-
|
18
|
+
def defaults=(val)
|
19
|
+
@@defaults.merge!(val)
|
20
|
+
end
|
9
21
|
end
|
22
|
+
|
10
23
|
CODES = {
|
11
24
|
:clear => 0,
|
12
25
|
:reset => 0, #clear
|
@@ -54,6 +67,7 @@ module Pow
|
|
54
67
|
attr_accessor :writer
|
55
68
|
def initialize(*args)
|
56
69
|
options = args[0].is_a?(Hash) ? args[0] : {:text => args[0].to_s}.merge(args[1] || {})
|
70
|
+
@@match_color = :red
|
57
71
|
CODES.keys.each do |key|
|
58
72
|
# Color
|
59
73
|
self.class.send(:define_method, key.to_sym) { |*args| Puts.new({:color => key.to_sym, :text => args[0], :misc => args[1]}).out! }
|
@@ -68,12 +82,30 @@ module Pow
|
|
68
82
|
options[:negative] ||= options[:misc][:negative]
|
69
83
|
options[:underline] ||= options[:misc][:underline]
|
70
84
|
options[:background] ||= (options[:misc][:background] || options[:misc][:on])
|
85
|
+
options[:on] ||= options[:background]
|
71
86
|
options[:strikethrough] ||= options[:misc][:strikethrough]
|
87
|
+
options[:match] ||= options[:misc][:match]
|
88
|
+
options[:match_color] ||= options[:misc][:match_color]
|
72
89
|
end
|
73
|
-
|
90
|
+
@@color = options[:color] || :white
|
91
|
+
@writer = options[:writer] || STDOUT
|
74
92
|
@formatted_text = format_string(options)
|
75
93
|
out!(@formatted_text)
|
76
94
|
end
|
95
|
+
|
96
|
+
class << self
|
97
|
+
def color
|
98
|
+
@@color
|
99
|
+
end
|
100
|
+
|
101
|
+
def match_color=(val)
|
102
|
+
@@match_color = val.to_sym
|
103
|
+
end
|
104
|
+
|
105
|
+
def match_color
|
106
|
+
@@match_color
|
107
|
+
end
|
108
|
+
end
|
77
109
|
|
78
110
|
# Write the coloured text to IO
|
79
111
|
def out!(string=nil)
|
@@ -93,9 +125,7 @@ module Pow
|
|
93
125
|
out!(text.to_s.split("").inject(""){|m, word| m+= format_string(:text => word, :bold => true, :newline => "", :color => painbow_keys.sort_by{|k| rand}[0]) + " " } + "\n")
|
94
126
|
end
|
95
127
|
|
96
|
-
def inspect
|
97
|
-
nil
|
98
|
-
end
|
128
|
+
def inspect; ''; end
|
99
129
|
|
100
130
|
protected
|
101
131
|
def painbow_keys
|
@@ -110,19 +140,26 @@ module Pow
|
|
110
140
|
newline = options.fetch(:newline){ "\n" }
|
111
141
|
color = options.fetch(:color){ :white }
|
112
142
|
text = options.fetch(:text){ '' }
|
113
|
-
bold = options.fetch(:bold){
|
114
|
-
negative = options.fetch(:negative){
|
115
|
-
italic = options.fetch(:italic){
|
116
|
-
underline = options.fetch(:underline){
|
117
|
-
background = options.fetch(:background){
|
143
|
+
bold = options.fetch(:bold){ Pow.defaults[:bold] }
|
144
|
+
negative = options.fetch(:negative){ Pow.defaults[:negative] }
|
145
|
+
italic = options.fetch(:italic){ Pow.defaults[:italic] }
|
146
|
+
underline = options.fetch(:underline){ Pow.defaults[:underline] }
|
147
|
+
background = options.fetch(:background){ Pow.defaults[:background] } || options.fetch(:on){ Pow.defaults[:on]}
|
118
148
|
concealed = options.fetch(:concealed){ false }
|
119
|
-
strikethrough = options.fetch(:strikethrough){
|
120
|
-
underscore = options.fetch(:underscore){
|
149
|
+
strikethrough = options.fetch(:strikethrough){ Pow.defaults[:strikethrough] }
|
150
|
+
underscore = options.fetch(:underscore){ Pow.defaults[:underscore] }
|
151
|
+
match = options.fetch(:match){ false }
|
152
|
+
|
153
|
+
if options[:match_color]
|
154
|
+
Puts.match_color = options[:match_color]
|
155
|
+
end
|
121
156
|
|
122
157
|
if text != ""
|
123
158
|
result = [escape_sequence(color), text, escape_sequence(:reset), newline].join
|
124
159
|
end
|
125
160
|
|
161
|
+
result ||= ""
|
162
|
+
|
126
163
|
if bold
|
127
164
|
result.insert(0, escape_sequence(:bold))
|
128
165
|
end
|
@@ -151,7 +188,11 @@ module Pow
|
|
151
188
|
result.insert(0, escape_sequence(:underscore))
|
152
189
|
end
|
153
190
|
|
154
|
-
|
191
|
+
if match.is_a?(Regexp) || match.is_a?(String)
|
192
|
+
result = wrap_match(result, match, Puts.match_color, false)
|
193
|
+
end
|
194
|
+
|
195
|
+
return result + escape_sequence(:clear)
|
155
196
|
end
|
156
197
|
|
157
198
|
def escape_sequence(code)
|
@@ -165,6 +206,11 @@ module Pow
|
|
165
206
|
return "\e[#{CODES[code]}m"
|
166
207
|
end
|
167
208
|
end
|
209
|
+
|
210
|
+
def wrap_match(text, match, match_color, negative=false)
|
211
|
+
#TODO use the negative sequence when the text color is the same as the match color.
|
212
|
+
text.gsub(match, [escape_sequence(match_color), match, escape_sequence(Puts.color)].join(''))
|
213
|
+
end
|
168
214
|
end
|
169
215
|
end
|
170
216
|
|
data/rakefile.rb
CHANGED
@@ -3,9 +3,9 @@ begin
|
|
3
3
|
require 'jeweler'
|
4
4
|
Jeweler::Tasks.new do |gemspec|
|
5
5
|
gemspec.name = "jamescook-pow"
|
6
|
-
gemspec.version = "0.1.
|
6
|
+
gemspec.version = "0.1.4"
|
7
7
|
gemspec.summary = "puts with colors"
|
8
|
-
gemspec.description = "'puts' with shell colors."
|
8
|
+
gemspec.description = "Ruby 'puts' with shell colors."
|
9
9
|
gemspec.email = "jamecook@gmail.com"
|
10
10
|
gemspec.homepage = "http://github.com/jamescook/pow"
|
11
11
|
gemspec.authors = ["James Cook"]
|
data/test/pow_test.rb
CHANGED
@@ -15,10 +15,24 @@ class PowTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal "\e[37mTEST\e[0m\n", @writer.gets # White text
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_puts_with_bold_default
|
19
|
+
Pow.defaults = {:bold => true}
|
20
|
+
@puts.new(:text => "TEST", :writer => @writer).out!
|
21
|
+
@writer.rewind
|
22
|
+
Pow.defaults = {:bold => false}
|
23
|
+
assert_equal "\e[1m\e[37mTEST\e[0m\n", @writer.gets
|
24
|
+
end
|
25
|
+
|
18
26
|
def test_puts_with_non_string
|
19
27
|
@puts.new(:text => 1, :writer => @writer).out!
|
20
28
|
@writer.rewind
|
21
|
-
assert_equal "\e[37m1\e[0m\n", @writer.gets
|
29
|
+
assert_equal "\e[37m1\e[0m\n", @writer.gets
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_puts_with_match
|
33
|
+
@puts.new(:text => "TEST", :match => 'E', :writer => @writer).out!
|
34
|
+
@writer.rewind
|
35
|
+
assert_equal "\e[37mT\e[31mE\e[37mST\e[0m\n", @writer.gets
|
22
36
|
end
|
23
37
|
|
24
38
|
def test_puts_with_red
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jamescook-pow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Cook
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-23 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description: Ruby 'puts' with shell colors.
|
17
17
|
email: jamecook@gmail.com
|
18
18
|
executables: []
|
19
19
|
|