dye 0.1.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.
- 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
|
+
|