wirb 0.2.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/CHANGELOG.rdoc ADDED
@@ -0,0 +1,2 @@
1
+ == 0.2.0
2
+ * Initial release.
data/COPYING ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (C) 2011 Jan Lelis <mail@janlelis.de>
2
+ Copyright (C) 2006-2009 Paul Duncan <pabs@pablotron.org>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a
5
+ copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included
13
+ in all copies or substantial portions of the of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,52 @@
1
+ == Wavy Interactive Ruby
2
+ *Wirb* colorizes your inspected Ruby objects. It is based on Wirble[http://pablotron.org/software/wirble/], but only provides result highlighting.
3
+
4
+ It fixes some displaying bugs and extends the original tokenizer.
5
+
6
+ == Install
7
+ Install the gem with:
8
+
9
+ gem install wirb
10
+
11
+ == Usage
12
+ Add to your <tt>~/.irbrc</tt>
13
+
14
+ require 'rubygems' unless defined? Gem
15
+ require 'wirb'
16
+ Wirb.start
17
+
18
+ == Improvements and fixed Wirble bugs
19
+ * Basic support for regexes (Wirble displayed them as keywords)
20
+ * Support for generic objects, especially sets and enumerators
21
+ * Fixes some symbol bugs (e.g. :+, :*, ...)
22
+ * Does not change the inspect value (e.g. ranges with 4 instead of 3 dots)
23
+ * Comes with tests
24
+ * Can be used without irb
25
+
26
+ == Customize
27
+ The color schema can be changed with:
28
+
29
+ Wirb.schema = { :comma => :purple, ... }
30
+
31
+ Wirb color schemas are (almost) compatible with those from the original Wirble, but there are many extensions. Take a look at wirb/schema.rb or </tt>Wirb.schema</tt> for a list of available token descriptions. See wirb/colors.rb or <tt>Wirb::COLORS</tt> for the available colors.
32
+
33
+ Color schemas wanted! You've got a good looking alternative color schema? Please post it on the wiki[https://github.com/janlelis/wirb/wiki/schemas], it may be bundled with a next version ;)
34
+
35
+ == wp
36
+ You can colorize any object with <tt>wp</tt> (wavy_print):
37
+ require 'wirb/wp'
38
+ wp some_object
39
+ wp some_object, :light_red
40
+
41
+ == Also see
42
+ * hirb[https://github.com/cldwalker/hirb]
43
+ * irbtools[https://github.com/janlelis/irbtools]
44
+ * ripl-color_result[https://github.com/janlelis/ripl-color_result]
45
+
46
+ == Credits
47
+ Copyright (c) 2011 Jan Lelis <http://rbjl.net>, see COPYING for details.
48
+
49
+ Contains code from (and thanks to)
50
+ * Copyright (C) 2006-2009 Paul Duncan <pabs@pablotron.org>
51
+
52
+ J-_-L
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ require 'rake'
2
+ require 'rake/rdoctask'
3
+ require 'fileutils'
4
+ require "rspec/core/rake_task"
5
+ task :default => :spec
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.rspec_opts = [
9
+ # '--color',
10
+ '-r ' + File.expand_path( File.join( 'spec', 'spec_helper') ),
11
+ ]
12
+ end
13
+
14
+ def gemspec
15
+ @gemspec ||= eval(File.read('wirb.gemspec'), binding, 'wirb.gemspec')
16
+ end
17
+
18
+ desc "Build the gem"
19
+ task :gem => :gemspec do
20
+ sh "gem build wirb.gemspec"
21
+ FileUtils.mkdir_p 'pkg'
22
+ FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
23
+ end
24
+
25
+ desc "Install the gem locally"
26
+ task :install => :gem do
27
+ sh %{gem install pkg/#{gemspec.name}-#{gemspec.version} --no-rdoc --no-ri}
28
+ end
29
+
30
+ desc "Generate the gemspec"
31
+ task :generate do
32
+ puts gemspec.to_ruby
33
+ end
34
+
35
+ desc "Validate the gemspec"
36
+ task :gemspec do
37
+ gemspec.validate
38
+ end
39
+
40
+ Rake::RDocTask.new do |rdoc|
41
+ require File.expand_path( File.join( 'lib', 'wirb') )
42
+
43
+ rdoc.rdoc_dir = 'doc'
44
+ rdoc.title = "Wirb #{Wirb::VERSION}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
data/lib/wirb.rb ADDED
@@ -0,0 +1,45 @@
1
+ module Wirb
2
+ VERSION = '0.2.0'
3
+ end
4
+
5
+ require File.dirname(__FILE__) + '/wirb/colors'
6
+ require File.dirname(__FILE__) + '/wirb/schema'
7
+ require File.dirname(__FILE__) + '/wirb/tokenizer'
8
+
9
+ class << Wirb
10
+ attr_accessor :schema
11
+
12
+ # Return the escape code for a given color
13
+ def get_color(key)
14
+ if key.is_a? String
15
+ color = key
16
+ elsif Wirb::COLORS.key?(key)
17
+ color = Wirb::COLORS[key]
18
+ end
19
+
20
+ color ? "\033[#{ color }m" : ''
21
+ end
22
+
23
+ # Colorize a string
24
+ def colorize_string(string, color)
25
+ get_color(color) + string.to_s + get_color(:nothing)
26
+ end
27
+
28
+ # Colorize a result string
29
+ def colorize_result(str, custom_schema = schema)
30
+ tokenize(str).map{ |kind, token|
31
+ colorize_string token, custom_schema[kind]
32
+ }.join
33
+ end
34
+
35
+ # Colorize results in irb/ripl (or whatever might be supported in future)
36
+ def start
37
+ require File.dirname(__FILE__) + '/wirb/irb'
38
+ rescue LoadError
39
+ warn "Couldn't activate Wirb for #{which}"
40
+ end
41
+ alias activate start
42
+ alias enable start
43
+ end
44
+
45
+ # J-_-L
@@ -0,0 +1,47 @@
1
+ module Wirb
2
+ COLORS = {
3
+ :nothing => '0;0',
4
+
5
+ # light
6
+ :black => '0;30',
7
+ :red => '0;31',
8
+ :green => '0;32',
9
+ :brown => '0;33',
10
+ :blue => '0;34',
11
+ :purple => '0;35',
12
+ :cyan => '0;36',
13
+ :light_gray => '0;37',
14
+
15
+ # bold
16
+ :dark_gray => '1;30',
17
+ :light_red => '1;31',
18
+ :light_green => '1;32',
19
+ :yellow => '1;33',
20
+ :light_blue => '1;34',
21
+ :light_purple => '1;35',
22
+ :light_cyan => '1;36',
23
+ :white => '1;37',
24
+
25
+ # underline
26
+ :black_underline => '4;30',
27
+ :red_underline => '4;31',
28
+ :green_underline => '4;32',
29
+ :brown_underline => '4;33',
30
+ :blue_underline => '4;34',
31
+ :purple_underline => '4;35',
32
+ :cyan_underline => '4;36',
33
+ :white_underline => '4;37',
34
+
35
+ # background
36
+ :black_background => '7;30',
37
+ :red_background => '7;31',
38
+ :green_background => '7;32',
39
+ :brown_background => '7;33',
40
+ :blue_background => '7;34',
41
+ :purple_background => '7;35',
42
+ :cyan_background => '7;36',
43
+ :white_background => '7;37',
44
+ }
45
+ end
46
+
47
+ # J-_-L
data/lib/wirb/irb.rb ADDED
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../wirb' unless defined? Wirb
2
+
3
+ class IRB::Irb
4
+ alias :output_value_without_wirb :output_value
5
+
6
+ def output_value
7
+ if @context.inspect?
8
+ printf @context.return_format, ::Wirb.colorize_result( @context.last_value.inspect )
9
+ else
10
+ printf @context.return_format, @context.last_value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,68 @@
1
+ module Wirb
2
+ @schema = { # you can also use escape codes directly, e.g. "4;31"
3
+
4
+ # container
5
+ :open_hash => :light_green,
6
+ :close_hash => :light_green,
7
+ :open_array => :light_green,
8
+ :close_array => :light_green,
9
+
10
+ :open_set => :green,
11
+ :close_set => :green,
12
+ :open_enumerator => :green,
13
+ :close_enumerator => :green,
14
+
15
+ # delimiter colors
16
+ :comma => :green,
17
+ :refers => :green,
18
+
19
+ # class
20
+ :class => :light_green,
21
+ :class_separator => :green,
22
+ :object_class => :light_green,
23
+
24
+ # object
25
+ :open_object => :green,
26
+ :object_description_prefix => :green,
27
+ :object_description => :brown,
28
+ :object_addr_prefix => :brown_underline,
29
+ :object_addr => :brown_underline,
30
+ :object_line_prefix => :brown_underline,
31
+ :object_line => :brown_underline,
32
+ :object_line_number => :brown_underline,
33
+ :close_object => :green,
34
+
35
+ # symbol
36
+ :symbol_prefix => :yellow,
37
+ :symbol => :yellow,
38
+ :open_symbol_string => :brown,
39
+ :symbol_string => :yellow,
40
+ :close_symbol_string => :brown,
41
+
42
+ # string
43
+ :open_string => :light_gray,
44
+ :string => :dark_gray,
45
+ :close_string => :light_gray,
46
+
47
+ # regexp
48
+ :open_regexp => :light_blue,
49
+ :regexp => :dark_gray,
50
+ :close_regexp => :light_blue,
51
+ :regexp_flags => :light_red,
52
+
53
+ # number
54
+ :number => :cyan,
55
+ :range => :red,
56
+ :open_rational => :light_cyan,
57
+ :rational_separator => :light_cyan,
58
+ :close_rational => :light_cyan,
59
+
60
+ # misc
61
+ :keyword => nil, # rename to default?
62
+ :nil => :light_red,
63
+ :false => :red,
64
+ :true => :green,
65
+ }
66
+ end
67
+
68
+ # J-_-L
@@ -0,0 +1,307 @@
1
+ class << Wirb
2
+ # This is an extended version of the original wirble tokenizer.
3
+ # Almost everyone would say that 300 lines long case statements need refactoring, but
4
+ # ...sometimes it just doesn't matter ;)
5
+ def tokenize(str)
6
+ raise ArgumentError, 'Tokenizer needs an inspect-string' unless str.is_a? String
7
+ return enum_for(:tokenize, str) unless block_given?
8
+
9
+ chars = str.split(//)
10
+
11
+ @state, @token, i = [], '', 0
12
+
13
+ # helpers
14
+ pass_custom_state = lambda{ |kind, *options|
15
+ yield kind, @token unless @token.empty?
16
+ @state.pop if options.include?(:remove)
17
+ @token = '' unless options.include?(:keep_token)
18
+ @repeat = true if options.include?(:repeat)
19
+ }
20
+
21
+ pass_state = lambda{ |*options| pass_custom_state[ @state[-1], *options ] }
22
+
23
+ pass = lambda{ |kind, string| yield kind, string }
24
+
25
+ set_state = lambda{ |state| @state[-1] = state }
26
+
27
+ get_state = lambda{ |state| @state[-1] == state }
28
+
29
+ get_previous_state =
30
+ lambda{ |state| @state[-2] == state }
31
+
32
+ push_state = lambda{ |state, *options|
33
+ @state << state
34
+ @repeat = true if options.include? :repeat
35
+ }
36
+
37
+ pop_state = lambda{ |*options|
38
+ @state.pop
39
+ @repeat = true if options.include? :repeat
40
+ }
41
+
42
+ # action!
43
+ while i <= chars.size
44
+ @repeat = false
45
+ llc, lc, c, nc = lc, c, chars[i], chars[i+1]
46
+
47
+ # warn "char = #{c} state = #{@state*':'}"
48
+
49
+ case @state[-1]
50
+ when nil, :hash, :array, :enumerator, :set # "default" state
51
+ case c
52
+ when ':' then push_state[:symbol]
53
+ when '"' then push_state[:string]
54
+ when '/' then push_state[:regexp]
55
+ when '#' then push_state[:object]
56
+ when /[A-Z]/ then push_state[:class, :repeat]
57
+ when /[a-z]/ then push_state[:keyword, :repeat]
58
+ when /[0-9-]/ then push_state[:number, :repeat]
59
+ when '(' then push_state[:rational, :repeat]
60
+ when '.' then push_state[:range, :repeat]
61
+ when /\s/ then pass[:whitespace, c]
62
+ when ',' then pass[:comma, ',']
63
+ when '>' then pass[:refers, '=>'] if lc == '='
64
+
65
+ when '{'
66
+ if get_state[:set]
67
+ pass[:open_set, '{']; push_state[nil]
68
+ else
69
+ pass[:open_hash, '{']; push_state[:hash]
70
+ end
71
+
72
+ when '['
73
+ if get_state[:enumerator]
74
+ pass[:open_enumerator, '[']; push_state[nil]
75
+ else
76
+ pass[:open_array, '[']; push_state[:array]
77
+ end
78
+
79
+ when ']'
80
+ if get_state[:array]
81
+ pass[:close_array, ']']; pop_state[]
82
+ elsif get_previous_state[:enumerator]
83
+ pass[:close_enumerator, ']']; pop_state[]
84
+ set_state[:object_description]
85
+ end
86
+
87
+ when '}'
88
+ if get_state[:hash]
89
+ pass[:close_hash, '}']; pop_state[]
90
+ elsif get_previous_state[:set]
91
+ pass[:close_set, '}']; pop_state[]
92
+ set_state[:object_description]
93
+ end
94
+
95
+ # else
96
+ # warn "ignoring char #{c.inspect}" if @debug
97
+ end
98
+
99
+ when :class
100
+ case c
101
+ when /[a-z0-9_]/i
102
+ @token << c
103
+ else
104
+ if c ==':' && nc == ':'
105
+ pass_state[]
106
+ pass[:class_separator, '::']
107
+ elsif !(c == ':' && lc == ':')
108
+ pass_state[:remove, :repeat]
109
+ end
110
+ end
111
+
112
+ when :symbol
113
+ case c
114
+ when /"/
115
+ pass[:symbol_prefix, ':']
116
+ set_state[:symbol_string]
117
+ @token = ''
118
+ when /[^"., }\])=]/
119
+ @token << c
120
+ else
121
+ if ( c == '=' && !(nc == '>' && lc != '<' ) ) ||
122
+ ( c == ']' && lc == '[' )
123
+ @token << c
124
+ else
125
+ pass[:symbol_prefix, ':']
126
+ pass_state[:remove, :repeat]
127
+ end
128
+ end
129
+
130
+ when :symbol_string
131
+ if c == '"' && lc != '\\'
132
+ pass[:open_symbol_string, '"']
133
+ pass_state[:remove]
134
+ pop_state[]
135
+ pass[:close_symbol_string, '"']
136
+ else
137
+ @token << c
138
+ end
139
+
140
+ when :string
141
+ if c == '"' && lc != '\\'
142
+ pass[:open_string, '"']
143
+ pass_state[:remove]
144
+ pass[:close_string, '"']
145
+ else
146
+ @token << c
147
+ end
148
+
149
+ when :regexp
150
+ if c == '/' && lc != '\\'
151
+ pass[:open_regexp, '/']
152
+ pass_state[:remove]
153
+ pass[:close_regexp, '/']
154
+ push_state[:regexp_flags]
155
+ else
156
+ @token << c
157
+ end
158
+
159
+ when :regexp_flags
160
+ if c =~ /[a-z]/i #*%w[m i x o n e u s]
161
+ @token << c
162
+ else
163
+ pass_state[:remove, :repeat]
164
+ end
165
+
166
+ when :keyword
167
+ if c =~ /[a-z0-9_]/i
168
+ @token << c
169
+ pass_custom_state[@token.to_sym, :remove] if %w[nil false true].include?(@token)
170
+ else
171
+ pass_state[:remove, :repeat]
172
+ end
173
+
174
+ when :number
175
+ if c =~ /[0-9e+.-]/ && !(c == '.' && nc == '.')
176
+ @token << c
177
+ else
178
+ pass_state[:remove, :repeat]
179
+ end
180
+
181
+ when :range
182
+ if c == '.'
183
+ @token << c
184
+ else
185
+ pass_state[:remove, :repeat]
186
+ end
187
+
188
+ when :rational
189
+ case c
190
+ when '('
191
+ pass[:open_rational, '(']
192
+ when /[0-9e-]/
193
+ push_state[:number, :repeat]
194
+ when '/', ','
195
+ pass[:rational_separator, c]
196
+ when ' '
197
+ pass[:whitespace, c]
198
+ when ')'
199
+ pass[:close_rational, ')']
200
+ pop_state[]
201
+ end
202
+
203
+ when :object
204
+ case c
205
+ when '<'
206
+ pass[:open_object, '#<']
207
+ push_state[:object_class]
208
+ open_brackets = 0
209
+ when '>'
210
+ pass[:close_object, '>']
211
+ pop_state[]; @token = ''
212
+ end
213
+
214
+ when :object_class
215
+ case c
216
+ when /[a-z0-9_]/i
217
+ @token << c
218
+ when '>'
219
+ pass_state[:remove, :repeat]
220
+ else
221
+ if c == ':' && nc == ':'
222
+ pass_state[]
223
+ pass[:class_separator, '::']
224
+ elsif !(c == ':' && lc == ':')
225
+ pass_state[:keep_token]
226
+ pass[:object_description_prefix, c]
227
+ if %w[set].include? @token = @token.downcase
228
+ set_state[@token.to_sym]
229
+ else
230
+ set_state[:object_description]
231
+ end
232
+ @token = ''
233
+ end
234
+ end
235
+
236
+ when :object_description
237
+ case c
238
+ when '>', nil
239
+ if open_brackets == 0
240
+ pass_state[:remove, :repeat]
241
+ else
242
+ open_brackets -= 1
243
+ @token << c
244
+ end
245
+ when '<'
246
+ open_brackets += 1
247
+ @token << c
248
+ when '['
249
+ pass_state[:repeat]
250
+ set_state[:enumerator]
251
+ when '"'
252
+ pass_state[]
253
+ push_state[:string]
254
+ when /[0-9]/
255
+ if c == '0' && nc == 'x'
256
+ pass_state[:repeat]
257
+ push_state[:object_addr]
258
+ else
259
+ # push_state[:number, :repeat]
260
+ @token << c
261
+ end
262
+ else
263
+ @token << c
264
+ end
265
+
266
+ when :object_addr
267
+ if c =~ /[x0-9a-f]/
268
+ @token << c
269
+ else
270
+ if c == '@'
271
+ pass_state[:remove]
272
+ push_state[:object_line]
273
+ pass[:object_line_prefix, '@']
274
+ else
275
+ pass_state[:remove, :repeat]
276
+ end
277
+ end
278
+
279
+ when :object_line
280
+ if c == ':' && nc =~ /[0-9]/
281
+ @token << ':'
282
+ pass_state[:remove]
283
+ push_state[:object_line_number]
284
+ else
285
+ @token << c
286
+ end
287
+
288
+ when :object_line_number
289
+ if c =~ /[0-9]/
290
+ @token << c
291
+ else
292
+ pass_state[:remove, :repeat]
293
+ end
294
+
295
+ # else
296
+ # raise "unknown state #{@state[-1]} #{@state.inspect}"
297
+ end
298
+
299
+ # TODO infinite recursion detection and catch errors?
300
+
301
+ # next round :)
302
+ i += 1 unless @repeat
303
+ end
304
+ end
305
+ end
306
+
307
+ # J-_-L
data/lib/wirb/wp.rb ADDED
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../wirb' unless defined? Wirb
2
+
3
+ module Kernel
4
+ private
5
+
6
+ def wp(object, color = nil)
7
+ if color
8
+ puts Wirb.colorize_string object.inspect, color
9
+ else
10
+ puts Wirb.colorize_result object.inspect
11
+ end
12
+ end
13
+ end
data/wirb.gemspec ADDED
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'rubygems' unless defined? Gem
3
+ require File.dirname(__FILE__) + "/lib/wirb"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "wirb"
7
+ s.version = Wirb::VERSION
8
+ s.authors = ["Jan Lelis"]
9
+ s.email = "mail@janlelis.de"
10
+ s.homepage = "http://github.com/janlelis/wirb"
11
+ s.summary = "Colorizes your irb results."
12
+ s.description = "Colorizes your irb results. It's based on Wirble but only provides result highlighting. Just call Wirb.start and enjoy the colors ;)."
13
+ s.required_rubygems_version = '>= 1.3.6'
14
+ s.required_ruby_version = '>= 1.8.7'
15
+ s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} ext/**/*.{rb,c} **/deps.rip]) + %w{Rakefile wirb.gemspec}
16
+ s.extra_rdoc_files = ["README.rdoc", "COPYING"]
17
+ s.license = 'MIT'
18
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wirb
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
+ platform: ruby
11
+ authors:
12
+ - Jan Lelis
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-27 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Colorizes your irb results. It's based on Wirble but only provides result highlighting. Just call Wirb.start and enjoy the colors ;).
22
+ email: mail@janlelis.de
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - README.rdoc
29
+ - COPYING
30
+ files:
31
+ - lib/wirb.rb
32
+ - lib/wirb/schema.rb
33
+ - lib/wirb/tokenizer.rb
34
+ - lib/wirb/wp.rb
35
+ - lib/wirb/colors.rb
36
+ - lib/wirb/irb.rb
37
+ - README.rdoc
38
+ - CHANGELOG.rdoc
39
+ - Rakefile
40
+ - wirb.gemspec
41
+ - COPYING
42
+ has_rdoc: true
43
+ homepage: http://github.com/janlelis/wirb
44
+ licenses:
45
+ - MIT
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 1
58
+ - 8
59
+ - 7
60
+ version: 1.8.7
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 1
68
+ - 3
69
+ - 6
70
+ version: 1.3.6
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.7
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Colorizes your irb results.
78
+ test_files: []
79
+