dye 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +23 -0
- data/LICENSE +20 -0
- data/README.rdoc +132 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/dye.gemspec +26 -0
- data/lib/dye.rb +100 -0
- data/test/basic.irt +26 -0
- data/test/custom.irt +27 -0
- data/test/irt_helper.rb +4 -0
- data/test/module.irt +18 -0
- data/test/sgr.irt +16 -0
- metadata +95 -0
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010-2011 Domizio Demichelis
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
= colorer
|
2
|
+
|
3
|
+
Easy ANSI code coloring for strings in libraries.
|
4
|
+
|
5
|
+
== Synopsis
|
6
|
+
|
7
|
+
require 'dye'
|
8
|
+
|
9
|
+
# you can use directly use Dye.dye for basic styles
|
10
|
+
Dye.dye "a red bold underlined text on white background", :red, :bold, :underline, :onwhite
|
11
|
+
|
12
|
+
# you can define custom styles in your classes or modules
|
13
|
+
module MyModule
|
14
|
+
extend self
|
15
|
+
CUSTOM_STYLES = { :errorize => [ :red, :bold, :underline ],
|
16
|
+
:mysgr => [ :red, 8 ] }
|
17
|
+
define_dye_method CUSTOM_STYLES
|
18
|
+
end
|
19
|
+
|
20
|
+
# use the custom styles
|
21
|
+
MyModule.dye "an error string", :errorize
|
22
|
+
MyModule.dye "my native (Select Graphic Rendition) string", :mysgr
|
23
|
+
|
24
|
+
# and use also the basic styles
|
25
|
+
MyModule.dye "red bold string", :red, :bold
|
26
|
+
|
27
|
+
# or use mixed custom and basic
|
28
|
+
MyModule.dye "red bold string", :mysgr, :bold
|
29
|
+
|
30
|
+
# you can eventually modify/add to the custom styles
|
31
|
+
CUSTOM_STYLES[:another] = [:green, :bold]
|
32
|
+
# and the style will be available right away
|
33
|
+
MyModule.dye "another style", :another
|
34
|
+
|
35
|
+
# you can also define the dye method as an instance method
|
36
|
+
any_instance.class.define_dye_method custom_styles
|
37
|
+
|
38
|
+
# and use it on the instance
|
39
|
+
any_instance.dye "any string", :any_style
|
40
|
+
|
41
|
+
# back to plain text
|
42
|
+
plain_text = Dye.strip_ansi(ansi_string)
|
43
|
+
|
44
|
+
=== Feedback!!!
|
45
|
+
|
46
|
+
This is feedback-driven software. Just send me a line about you and/or what you think about it:
|
47
|
+
that will be a wonderful contribution that will help me to keep improving (and documenting) this software.
|
48
|
+
|
49
|
+
My email address is ddnexus at gmail.com ... waiting for your. Ciao.
|
50
|
+
|
51
|
+
== Features
|
52
|
+
|
53
|
+
* Does not define methods in String
|
54
|
+
* Allows you to define basic styles by just requiring the lib
|
55
|
+
* Allows you to easily add your own custom styles
|
56
|
+
* Allows extended (Select Graphic Rendition) parameters
|
57
|
+
|
58
|
+
=== Difference with the Colorer gem
|
59
|
+
|
60
|
+
The Colorer gem is meant for using in your own application, it's a cool way to style string, but it
|
61
|
+
is not the perfect fit for libraries. Indeed it defines an instance method for each style, and that
|
62
|
+
might clash if another library defines the same style. That's not a problem for applications.
|
63
|
+
|
64
|
+
The Dye gem instead does not have the same problem, although its syntax is not so cool as the Colorer's one.
|
65
|
+
|
66
|
+
==== Basic Styles List
|
67
|
+
|
68
|
+
* clear
|
69
|
+
* bold
|
70
|
+
* underline
|
71
|
+
* blinking
|
72
|
+
* reversed
|
73
|
+
|
74
|
+
* black
|
75
|
+
* red
|
76
|
+
* green
|
77
|
+
* yellow
|
78
|
+
* blue
|
79
|
+
* magenta
|
80
|
+
* cyan
|
81
|
+
* white
|
82
|
+
|
83
|
+
* onblack
|
84
|
+
* onred
|
85
|
+
* ongreen
|
86
|
+
* onyellow
|
87
|
+
* onblue
|
88
|
+
* onmagenta
|
89
|
+
* oncyan
|
90
|
+
* onwhite
|
91
|
+
|
92
|
+
=== Custom Styles
|
93
|
+
|
94
|
+
You can define your own custom styles by aggregating any basic styles names,
|
95
|
+
besides can also add native SGR (Select Graphic Rendition) parameters (0..109) to any style::
|
96
|
+
|
97
|
+
custom_styles = { :errorize => [ :red, :bold, :underline ],
|
98
|
+
:okize => [ :green, :bold ],
|
99
|
+
:crazyize => [ :magenta, :onyellow, :bold, :underline ],
|
100
|
+
:mysgr => [ :red, 8 ] }
|
101
|
+
define_dye_method custom_styles
|
102
|
+
|
103
|
+
See http://en.wikipedia.org/wiki/ANSI_colors for a complete list of SGR codes.
|
104
|
+
|
105
|
+
=== Strict ANSI
|
106
|
+
|
107
|
+
Some terminals don't parse composite SGR styles correctly, and need separate SGR for each.
|
108
|
+
|
109
|
+
puts "\e[7;31;46mSTRING\e[0m" # strict_ansi == true (may be difficult to parse)
|
110
|
+
puts "\e[7m\e[31m\e[46mSTRING\e[0m" # strict_ansi == false
|
111
|
+
|
112
|
+
On the other way most of the terminals that parse them correctly can parse also separate SGRs,
|
113
|
+
so Dye will output non strict ansi by default. If you want to have strict ansi you can do:
|
114
|
+
|
115
|
+
Dye.strict_ansi = true
|
116
|
+
|
117
|
+
or you can set the DYE_ANSI_STRICT environment variable for a system wide setting.
|
118
|
+
|
119
|
+
=== Color
|
120
|
+
|
121
|
+
The color is true by defealut on a non-dumb tty terminal, anyway you can force it
|
122
|
+
by explicitly setting it:
|
123
|
+
|
124
|
+
Dye.color? #=> true/false by default depending on your terminal
|
125
|
+
Dye.color = true # force true
|
126
|
+
Dye.color? #=> true
|
127
|
+
Dye.color = false # force false
|
128
|
+
Dye.color? #=> false
|
129
|
+
|
130
|
+
== Copyright
|
131
|
+
|
132
|
+
Copyright (c) 2010-2011 Domizio Demichelis. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
name = 'dye'
|
2
|
+
|
3
|
+
def ensure_clean(action, force=false)
|
4
|
+
if !force && ! `git status -s`.empty?
|
5
|
+
puts <<-EOS.gsub(/^ {6}/, '')
|
6
|
+
Rake task aborted: the working tree is dirty!
|
7
|
+
If you know what you are doing you can use \`rake #{action}[force]\`"
|
8
|
+
EOS
|
9
|
+
exit(1)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Install the gem"
|
14
|
+
task :install, :force do |t, args|
|
15
|
+
ensure_clean(:install, args.force)
|
16
|
+
orig_version = version = File.read('VERSION').strip
|
17
|
+
begin
|
18
|
+
commit_id = `git log -1 --format="%h" HEAD`.strip
|
19
|
+
version = "#{orig_version}.#{commit_id}"
|
20
|
+
File.open('VERSION', 'w') {|f| f.puts version }
|
21
|
+
gem_name = "#{name}-#{version}.gem"
|
22
|
+
sh %(gem build #{name}.gemspec)
|
23
|
+
sh %(gem install #{gem_name} --local)
|
24
|
+
puts <<-EOS.gsub(/^ {6}/, '')
|
25
|
+
|
26
|
+
*******************************************************************************
|
27
|
+
* NOTICE *
|
28
|
+
*******************************************************************************
|
29
|
+
* The version id of locally installed gems is comparable to a --pre version: *
|
30
|
+
* i.e. it is alphabetically ordered (not numerically ordered), besides it *
|
31
|
+
* includes the sah1 commit id which is not aphabetically ordered, so be sure *
|
32
|
+
* your application picks the version you really intend to use *
|
33
|
+
*******************************************************************************
|
34
|
+
|
35
|
+
EOS
|
36
|
+
ensure
|
37
|
+
remove_entry_secure gem_name, true
|
38
|
+
File.open('VERSION', 'w') {|f| f.puts orig_version }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc %(Remove all the "#{name}" installed gems and executables and install this version)
|
43
|
+
task :clean_install, :force do |t, args|
|
44
|
+
ensure_clean(:install, args.force)
|
45
|
+
sh %(gem uninstall #{name} --all --ignore-dependencies --executables)
|
46
|
+
Rake::Task['install'].invoke(args.force)
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Push the gem to rubygems.org"
|
50
|
+
task :push, :force do |t, args|
|
51
|
+
begin
|
52
|
+
ensure_clean(:push, args.force)
|
53
|
+
version = File.read('VERSION').strip
|
54
|
+
gem_name = "#{name}-#{version}.gem"
|
55
|
+
sh %(gem build #{name}.gemspec)
|
56
|
+
sh %(gem push #{gem_name})
|
57
|
+
ensure
|
58
|
+
remove_entry_secure gem_name, true
|
59
|
+
end
|
60
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/dye.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
name = File.basename( __FILE__, '.gemspec' )
|
2
|
+
version = File.read(File.expand_path('../VERSION', __FILE__)).strip
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
|
7
|
+
s.authors = ["Domizio Demichelis"]
|
8
|
+
s.email = 'dd.nexus@gmail.com'
|
9
|
+
s.homepage = 'http://github.com/ddnexus/dye'
|
10
|
+
s.summary = 'Easy ANSI code coloring for strings in libraries'
|
11
|
+
s.description = 'Dye adds the basic ANSI styles to any string, allowing also to define your own stiles'
|
12
|
+
|
13
|
+
s.add_development_dependency('irt', [">= 1.0.0"])
|
14
|
+
|
15
|
+
s.files = `git ls-files -z`.split("\0")
|
16
|
+
|
17
|
+
s.name = name
|
18
|
+
s.version = version
|
19
|
+
s.date = Date.today.to_s
|
20
|
+
|
21
|
+
s.required_rubygems_version = ">= 1.3.6"
|
22
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
end
|
26
|
+
|
data/lib/dye.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
class Object
|
2
|
+
|
3
|
+
def define_dye_method(custom_styles={})
|
4
|
+
define_method(:dye) do |string, *names|
|
5
|
+
return string unless Dye.color?
|
6
|
+
codes = names.map do |name|
|
7
|
+
case
|
8
|
+
when custom_styles.has_key?(name)
|
9
|
+
Dye.sgr_names_to_codes *custom_styles[name]
|
10
|
+
when Dye::BASIC_SGR.has_key?(name)
|
11
|
+
Dye::BASIC_SGR[name]
|
12
|
+
else
|
13
|
+
raise Dye::UnknownSgrCode.new(name)
|
14
|
+
end
|
15
|
+
end.flatten
|
16
|
+
Dye.apply_codes string, *codes
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
module Dye
|
24
|
+
|
25
|
+
extend self
|
26
|
+
|
27
|
+
VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
|
28
|
+
|
29
|
+
class UnknownSgrCode < Exception
|
30
|
+
def initialize(sgr)
|
31
|
+
super("#{sgr.inspect} is unknown")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Select Graphic Rendition
|
36
|
+
BASIC_SGR = {
|
37
|
+
:clear => 0,
|
38
|
+
:bold => 1,
|
39
|
+
:underline => 4,
|
40
|
+
:blinking => 5,
|
41
|
+
:reversed => 7,
|
42
|
+
|
43
|
+
:black => 30,
|
44
|
+
:red => 31,
|
45
|
+
:green => 32,
|
46
|
+
:yellow => 33,
|
47
|
+
:blue => 34,
|
48
|
+
:magenta => 35,
|
49
|
+
:cyan => 36,
|
50
|
+
:white => 37,
|
51
|
+
|
52
|
+
:onblack => 40,
|
53
|
+
:onred => 41,
|
54
|
+
:ongreen => 42,
|
55
|
+
:onyellow => 43,
|
56
|
+
:onblue => 44,
|
57
|
+
:onmagenta => 45,
|
58
|
+
:oncyan => 46,
|
59
|
+
:onwhite => 47
|
60
|
+
}
|
61
|
+
|
62
|
+
@color = !!STDOUT.tty? && !!ENV['TERM'] && ENV['TERM'] != 'dumb'
|
63
|
+
attr_accessor :color
|
64
|
+
alias_method :color?, :color
|
65
|
+
|
66
|
+
@strict_ansi = !!ENV['DYE_STRICT_ANSI']
|
67
|
+
attr_accessor :strict_ansi
|
68
|
+
|
69
|
+
def dye(string, *sgr_names)
|
70
|
+
return string unless color?
|
71
|
+
apply_codes string, sgr_names_to_codes(*sgr_names)
|
72
|
+
end
|
73
|
+
|
74
|
+
def strip_ansi(string)
|
75
|
+
string.gsub(/\e\[[\d;]+m/, '')
|
76
|
+
end
|
77
|
+
|
78
|
+
def sgr_names_to_codes(*names)
|
79
|
+
names.map do |n|
|
80
|
+
next if n.nil?
|
81
|
+
code = n.is_a?(Symbol) ? BASIC_SGR[n] : n
|
82
|
+
raise UnknownSgrCode.new(n) unless code.is_a?(Integer) && (0..109).include?(code)
|
83
|
+
code
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def apply_codes(string, *codes)
|
88
|
+
codes.compact!
|
89
|
+
return string if codes.empty?
|
90
|
+
if strict_ansi
|
91
|
+
string.match(/^\e\[[\d;]+m.*\e\[0m$/m) ?
|
92
|
+
string.sub(/^(\e\[[\d;]+)/, '\1;' + codes.join(';')) :
|
93
|
+
sprintf("\e[0;%sm%s\e[0m", codes.join(';'), string)
|
94
|
+
else
|
95
|
+
string.match(/^(?:\e\[\d+m)+.*\e\[0m$/m) ?
|
96
|
+
string.sub(/^((?:\e\[\d+m)+)/, '\1' + codes.map{|c| "\e[#{c}m" }.join) :
|
97
|
+
sprintf("\e[0m%s%s\e[0m", codes.map{|c| "\e[#{c}m" }.join, string)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/test/basic.irt
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
desc "red"
|
2
|
+
Dye.dye 'red', :red
|
3
|
+
puts _
|
4
|
+
_eql? "\e[0;31mred\e[0m"
|
5
|
+
|
6
|
+
desc "red bold"
|
7
|
+
Dye.dye 'red bold', :red, :bold
|
8
|
+
puts _
|
9
|
+
_eql? "\e[0;31;1mred bold\e[0m"
|
10
|
+
|
11
|
+
desc "red bold underline"
|
12
|
+
Dye.dye 'red bold underline', :red, :bold, :underline
|
13
|
+
puts _
|
14
|
+
_eql? "\e[0;31;1;4mred bold underline\e[0m"
|
15
|
+
|
16
|
+
desc "red bold underline reversed"
|
17
|
+
Dye.dye 'red bold underline reversed', :red, :bold, :underline, :reversed
|
18
|
+
puts _
|
19
|
+
_eql? "\e[0;31;1;4;7mred bold underline reversed\e[0m"
|
20
|
+
|
21
|
+
desc "red bold with \\n"
|
22
|
+
Dye.dye "red bold with\n", :red, :bold
|
23
|
+
puts _
|
24
|
+
_eql? "\e[0;31;1mred bold with\n\e[0m"
|
25
|
+
|
26
|
+
|
data/test/custom.irt
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
custom_styles = { :dummy => nil,
|
2
|
+
:errorize => [ :red, :bold, :underline ],
|
3
|
+
:okeyze => [ :green, :bold ] }
|
4
|
+
self.class.define_dye_method custom_styles
|
5
|
+
|
6
|
+
desc "errorize"
|
7
|
+
dye 'errorize', :errorize
|
8
|
+
puts _
|
9
|
+
_eql? "\e[0;31;1;4merrorize\e[0m"
|
10
|
+
|
11
|
+
desc "okeyze"
|
12
|
+
dye 'okeyize', :okeyze
|
13
|
+
puts _
|
14
|
+
_eql? "\e[0;32;1mokeyize\e[0m"
|
15
|
+
|
16
|
+
desc "allows dummy styles"
|
17
|
+
dye 'dummy', :dummy
|
18
|
+
puts _
|
19
|
+
_eql?( "dummy" )
|
20
|
+
|
21
|
+
custom_styles[:added] = :blue
|
22
|
+
|
23
|
+
desc "add to custom styles"
|
24
|
+
dye 'added', :added
|
25
|
+
puts _
|
26
|
+
_eql?( "\e[0;34madded\e[0m" )
|
27
|
+
|
data/test/irt_helper.rb
ADDED
data/test/module.irt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module MyModule
|
2
|
+
extend self
|
3
|
+
define_dye_method
|
4
|
+
end
|
5
|
+
|
6
|
+
desc 'module call'
|
7
|
+
MyModule.dye 'My Module', :green, :bold
|
8
|
+
puts _
|
9
|
+
_eql?( "\e[0;32;1mMy Module\e[0m" )
|
10
|
+
|
11
|
+
class MyInstance; end
|
12
|
+
|
13
|
+
desc 'instance call'
|
14
|
+
obj = MyInstance.new
|
15
|
+
obj.class.define_dye_method
|
16
|
+
obj.dye 'My Instance', :reversed, :yellow
|
17
|
+
puts _
|
18
|
+
_eql?( "\e[0;7;33mMy Instance\e[0m" )
|
data/test/sgr.irt
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
custom_styles = { :mixed_sgr => [ :bold, 7 ] }
|
2
|
+
|
3
|
+
self.class.define_dye_method custom_styles
|
4
|
+
|
5
|
+
desc "Mixed SGR parameters"
|
6
|
+
dye "Mixed SGR parameters", :mixed_sgr
|
7
|
+
puts _
|
8
|
+
_eql? "\e[0;1;7mMixed SGR parameters\e[0m"
|
9
|
+
|
10
|
+
desc "Basic and custom definition"
|
11
|
+
custom_styles.merge!({:goo => [7], :guu => 4})
|
12
|
+
dye "Basic and custom definition", :green, :goo, :guu
|
13
|
+
puts _
|
14
|
+
_eql? "\e[0;32;7;4mBasic and custom definition\e[0m"
|
15
|
+
|
16
|
+
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dye
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Domizio Demichelis
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-31 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: irt
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
version: 1.0.0
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
description: Dye adds the basic ANSI styles to any string, allowing also to define your own stiles
|
38
|
+
email: dd.nexus@gmail.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- .gitignore
|
47
|
+
- LICENSE
|
48
|
+
- README.rdoc
|
49
|
+
- Rakefile
|
50
|
+
- VERSION
|
51
|
+
- dye.gemspec
|
52
|
+
- lib/dye.rb
|
53
|
+
- test/basic.irt
|
54
|
+
- test/custom.irt
|
55
|
+
- test/irt_helper.rb
|
56
|
+
- test/module.irt
|
57
|
+
- test/sgr.irt
|
58
|
+
has_rdoc: true
|
59
|
+
homepage: http://github.com/ddnexus/dye
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options:
|
64
|
+
- --charset=UTF-8
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 23
|
82
|
+
segments:
|
83
|
+
- 1
|
84
|
+
- 3
|
85
|
+
- 6
|
86
|
+
version: 1.3.6
|
87
|
+
requirements: []
|
88
|
+
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.3.7
|
91
|
+
signing_key:
|
92
|
+
specification_version: 3
|
93
|
+
summary: Easy ANSI code coloring for strings in libraries
|
94
|
+
test_files: []
|
95
|
+
|