awesome_print 0.4.0 → 1.0.2
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 +22 -0
- data/CHANGELOG +18 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +26 -0
- data/README.md +64 -16
- data/Rakefile +2 -46
- data/lib/ap.rb +3 -17
- data/lib/{ap → awesome_print}/core_ext/class.rb +7 -2
- data/lib/{ap → awesome_print}/core_ext/kernel.rb +2 -2
- data/lib/awesome_print/core_ext/logger.rb +20 -0
- data/lib/{ap → awesome_print}/core_ext/object.rb +7 -2
- data/lib/{ap → awesome_print}/core_ext/string.rb +8 -5
- data/lib/awesome_print/ext/action_view.rb +18 -0
- data/lib/awesome_print/ext/active_record.rb +64 -0
- data/lib/awesome_print/ext/active_support.rb +47 -0
- data/lib/awesome_print/ext/mongo_mapper.rb +38 -0
- data/lib/awesome_print/ext/mongoid.rb +65 -0
- data/lib/awesome_print/ext/nokogiri.rb +45 -0
- data/lib/awesome_print/formatter.rb +384 -0
- data/lib/awesome_print/inspector.rb +140 -0
- data/{rails/init.rb → lib/awesome_print/version.rb} +5 -4
- data/lib/awesome_print.rb +16 -12
- data/spec/colors_spec.rb +106 -0
- data/spec/{awesome_print_spec.rb → formats_spec.rb} +187 -37
- data/spec/methods_spec.rb +30 -0
- data/spec/objects_spec.rb +79 -0
- data/spec/spec_helper.rb +1 -1
- metadata +49 -53
- data/VERSION +0 -1
- data/init.rb +0 -1
- data/lib/ap/awesome_print.rb +0 -352
- data/lib/ap/core_ext/logger.rb +0 -18
- data/lib/ap/mixin/action_view.rb +0 -17
- data/lib/ap/mixin/active_record.rb +0 -54
- data/lib/ap/mixin/active_support.rb +0 -46
- data/lib/ap/mixin/mongo_mapper.rb +0 -54
- data/spec/action_view_spec.rb +0 -25
- data/spec/active_record_spec.rb +0 -136
- data/spec/colorization_spec.rb +0 -84
- data/spec/logger_spec.rb +0 -43
- data/spec/mongo_mapper_spec.rb +0 -63
- data/spec/string_spec.rb +0 -20
- /data/lib/{ap → awesome_print}/core_ext/array.rb +0 -0
- /data/lib/{ap → awesome_print}/core_ext/method.rb +0 -0
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2010-2011 Michael Dvorkin
|
|
2
|
-
#
|
|
3
|
-
# Awesome Print is freely distributable under the terms of MIT license.
|
|
4
|
-
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
|
5
|
-
#------------------------------------------------------------------------------
|
|
6
|
-
module AwesomePrintMongoMapper
|
|
7
|
-
|
|
8
|
-
def self.included(base)
|
|
9
|
-
base.send :alias_method, :printable_without_mongo_mapper, :printable
|
|
10
|
-
base.send :alias_method, :printable, :printable_with_mongo_mapper
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Add MongoMapper class names to the dispatcher pipeline.
|
|
14
|
-
#------------------------------------------------------------------------------
|
|
15
|
-
def printable_with_mongo_mapper(object)
|
|
16
|
-
printable = printable_without_mongo_mapper(object)
|
|
17
|
-
return printable if !defined?(MongoMapper::Document)
|
|
18
|
-
|
|
19
|
-
if printable == :self
|
|
20
|
-
if object.is_a?(MongoMapper::Document) || object.is_a?(MongoMapper::EmbeddedDocument)
|
|
21
|
-
printable = :mongo_mapper_instance
|
|
22
|
-
end
|
|
23
|
-
elsif printable == :class && (object.ancestors & [MongoMapper::Document, MongoMapper::EmbeddedDocument]).size > 0
|
|
24
|
-
printable = :mongo_mapper_class
|
|
25
|
-
end
|
|
26
|
-
printable
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Format MongoMapper instance object.
|
|
30
|
-
#------------------------------------------------------------------------------
|
|
31
|
-
def awesome_mongo_mapper_instance(object)
|
|
32
|
-
return object.inspect if !defined?(ActiveSupport::OrderedHash)
|
|
33
|
-
|
|
34
|
-
data = object.keys.keys.sort_by{|k| k}.inject(ActiveSupport::OrderedHash.new) do |hash, name|
|
|
35
|
-
hash[name] = object[name]
|
|
36
|
-
hash
|
|
37
|
-
end
|
|
38
|
-
"#{object} " + awesome_hash(data)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Format MongoMapper class object.
|
|
42
|
-
#------------------------------------------------------------------------------
|
|
43
|
-
def awesome_mongo_mapper_class(object)
|
|
44
|
-
return object.inspect if !defined?(ActiveSupport::OrderedHash) || !object.respond_to?(:keys)
|
|
45
|
-
|
|
46
|
-
data = object.keys.sort_by{|k| k}.inject(ActiveSupport::OrderedHash.new) do |hash, c|
|
|
47
|
-
hash[c.first] = (c.last.type || "undefined").to_s.underscore.intern
|
|
48
|
-
hash
|
|
49
|
-
end
|
|
50
|
-
"class #{object} < #{object.superclass} " << awesome_hash(data)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
AwesomePrint.send(:include, AwesomePrintMongoMapper)
|
data/spec/action_view_spec.rb
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'action_view'
|
|
5
|
-
require 'ap/mixin/action_view'
|
|
6
|
-
|
|
7
|
-
describe "AwesomePrint ActionView extension" do
|
|
8
|
-
before(:each) do
|
|
9
|
-
@view = ActionView::Base.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "uses HTML and adds 'debug_dump' class to plain <pre> tag" do
|
|
13
|
-
markup = rand
|
|
14
|
-
@view.ap(markup, :plain => true).should == %Q|<pre class="debug_dump">#{markup}</pre>|
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "uses HTML and adds 'debug_dump' class to colorized <pre> tag" do
|
|
18
|
-
markup = ' &<hello>'
|
|
19
|
-
@view.ap(markup).should == '<pre class="debug_dump" style="color:brown">" &<hello>"</pre>'
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
rescue LoadError
|
|
24
|
-
puts "Skipping ActionView specs..."
|
|
25
|
-
end
|
data/spec/active_record_spec.rb
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'active_record'
|
|
5
|
-
require 'ap/mixin/active_record'
|
|
6
|
-
|
|
7
|
-
if defined?(::ActiveRecord)
|
|
8
|
-
|
|
9
|
-
# Create tableless ActiveRecord model.
|
|
10
|
-
#------------------------------------------------------------------------------
|
|
11
|
-
class User < ActiveRecord::Base
|
|
12
|
-
def self.columns()
|
|
13
|
-
@columns ||= []
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def self.column(name, sql_type = nil, default = nil, null = true)
|
|
17
|
-
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
column :id, :integer
|
|
21
|
-
column :name, :string
|
|
22
|
-
column :rank, :integer
|
|
23
|
-
column :admin, :boolean
|
|
24
|
-
column :created_at, :datetime
|
|
25
|
-
|
|
26
|
-
def self.table_exists?
|
|
27
|
-
true
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class SubUser < User
|
|
32
|
-
def self.columns
|
|
33
|
-
User.columns
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
describe "AwesomePrint/ActiveRecord" do
|
|
38
|
-
before(:each) do
|
|
39
|
-
stub_dotfile!
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
#------------------------------------------------------------------------------
|
|
43
|
-
describe "ActiveRecord instance" do
|
|
44
|
-
before(:each) do
|
|
45
|
-
ActiveRecord::Base.default_timezone = :utc
|
|
46
|
-
@diana = User.new(:name => "Diana", :rank => 1, :admin => false, :created_at => "1992-10-10 12:30:00")
|
|
47
|
-
@laura = User.new(:name => "Laura", :rank => 2, :admin => true, :created_at => "2003-05-26 14:15:00")
|
|
48
|
-
@ap = AwesomePrint.new(:plain => true)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "display single record" do
|
|
52
|
-
out = @ap.send(:awesome, @diana)
|
|
53
|
-
str = <<-EOS.strip
|
|
54
|
-
#<User:0x01234567> {
|
|
55
|
-
:id => nil,
|
|
56
|
-
:name => "Diana",
|
|
57
|
-
:rank => 1,
|
|
58
|
-
:admin => false,
|
|
59
|
-
:created_at => ?
|
|
60
|
-
}
|
|
61
|
-
EOS
|
|
62
|
-
if RUBY_VERSION.to_f < 1.9
|
|
63
|
-
str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
|
|
64
|
-
else
|
|
65
|
-
str.sub!('?', '1992-10-10 12:30:00 UTC')
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "display multiple records" do
|
|
72
|
-
out = @ap.send(:awesome, [ @diana, @laura ])
|
|
73
|
-
str = <<-EOS.strip
|
|
74
|
-
[
|
|
75
|
-
[0] #<User:0x01234567> {
|
|
76
|
-
:id => nil,
|
|
77
|
-
:name => "Diana",
|
|
78
|
-
:rank => 1,
|
|
79
|
-
:admin => false,
|
|
80
|
-
:created_at => ?
|
|
81
|
-
},
|
|
82
|
-
[1] #<User:0x01234567> {
|
|
83
|
-
:id => nil,
|
|
84
|
-
:name => "Laura",
|
|
85
|
-
:rank => 2,
|
|
86
|
-
:admin => true,
|
|
87
|
-
:created_at => !
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
EOS
|
|
91
|
-
if RUBY_VERSION.to_f < 1.9
|
|
92
|
-
str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
|
|
93
|
-
str.sub!('!', 'Mon May 26 14:15:00 UTC 2003')
|
|
94
|
-
else
|
|
95
|
-
str.sub!('?', '1992-10-10 12:30:00 UTC')
|
|
96
|
-
str.sub!('!', '2003-05-26 14:15:00 UTC')
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
#------------------------------------------------------------------------------
|
|
104
|
-
describe "ActiveRecord class" do
|
|
105
|
-
it "should print the class" do
|
|
106
|
-
@ap = AwesomePrint.new(:plain => true)
|
|
107
|
-
@ap.send(:awesome, User).should == <<-EOS.strip
|
|
108
|
-
class User < ActiveRecord::Base {
|
|
109
|
-
:id => :integer,
|
|
110
|
-
:name => :string,
|
|
111
|
-
:rank => :integer,
|
|
112
|
-
:admin => :boolean,
|
|
113
|
-
:created_at => :datetime
|
|
114
|
-
}
|
|
115
|
-
EOS
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should print the class for non-direct subclasses of AR::Base" do
|
|
119
|
-
@ap = AwesomePrint.new(:plain => true)
|
|
120
|
-
@ap.send(:awesome, SubUser).should == <<-EOS.strip
|
|
121
|
-
class SubUser < User {
|
|
122
|
-
:id => :integer,
|
|
123
|
-
:name => :string,
|
|
124
|
-
:rank => :integer,
|
|
125
|
-
:admin => :boolean,
|
|
126
|
-
:created_at => :datetime
|
|
127
|
-
}
|
|
128
|
-
EOS
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
rescue LoadError
|
|
135
|
-
puts "Skipping ActiveRecord specs..."
|
|
136
|
-
end
|
data/spec/colorization_spec.rb
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "AwesomePrint" do
|
|
4
|
-
before(:each) do
|
|
5
|
-
stub_dotfile!
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe "colorization" do
|
|
9
|
-
PLAIN = '[ 1, :two, "three", [ nil, [ true, false ] ] ]'
|
|
10
|
-
COLORIZED = "[ \e[1;34m1\e[0m, \e[0;36m:two\e[0m, \e[0;33m\"three\"\e[0m, [ \e[1;31mnil\e[0m, [ \e[1;32mtrue\e[0m, \e[1;31mfalse\e[0m ] ] ]"
|
|
11
|
-
|
|
12
|
-
before(:each) do
|
|
13
|
-
AwesomePrint.force_colors!(false)
|
|
14
|
-
ENV['TERM'] = "xterm-colors"
|
|
15
|
-
ENV.delete('ANSICON')
|
|
16
|
-
@arr = [ 1, :two, "three", [ nil, [ true, false] ] ]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "colorizes tty processes by default" do
|
|
20
|
-
stub_tty!(STDOUT, true)
|
|
21
|
-
|
|
22
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "colorizes tty processes by default" do
|
|
26
|
-
stub_tty!(STDOUT, true)
|
|
27
|
-
|
|
28
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
it "colorizes processes with ENV['ANSICON'] by default" do
|
|
33
|
-
stub_tty!(STDOUT, true)
|
|
34
|
-
ENV['ANSICON'] = "1"
|
|
35
|
-
|
|
36
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "does not colorize tty processes running in dumb terminals by default" do
|
|
40
|
-
stub_tty!(STDOUT, true)
|
|
41
|
-
ENV['TERM'] = "dumb"
|
|
42
|
-
|
|
43
|
-
@arr.ai(:multiline => false).should == PLAIN
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "does not colorize subprocesses by default" do
|
|
47
|
-
stub_tty!(STDOUT, false)
|
|
48
|
-
|
|
49
|
-
@arr.ai(:multiline => false).should == PLAIN
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe "forced" do
|
|
53
|
-
before(:each) do
|
|
54
|
-
AwesomePrint.force_colors!
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "still colorizes tty processes" do
|
|
58
|
-
stub_tty!(STDOUT, true)
|
|
59
|
-
|
|
60
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "colorizes dumb terminals" do
|
|
64
|
-
stub_tty!(STDOUT, true)
|
|
65
|
-
ENV["TERM"] = "dumb"
|
|
66
|
-
|
|
67
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "colorizes subprocess" do
|
|
71
|
-
stub_tty!(STDOUT, true)
|
|
72
|
-
@arr.ai(:multiline => false).should == COLORIZED
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def stub_tty!(stream, value)
|
|
78
|
-
eval(%{class << stream
|
|
79
|
-
def tty?
|
|
80
|
-
#{value}
|
|
81
|
-
end
|
|
82
|
-
end})
|
|
83
|
-
end
|
|
84
|
-
end
|
data/spec/logger_spec.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'logger'
|
|
5
|
-
require 'ap/core_ext/logger'
|
|
6
|
-
|
|
7
|
-
describe "AwesomePrint logging extensions" do
|
|
8
|
-
before(:all) do
|
|
9
|
-
@logger = Logger.new('/dev/null') rescue Logger.new('nul')
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe "ap method" do
|
|
13
|
-
it "should awesome_inspect the given object" do
|
|
14
|
-
object = mock
|
|
15
|
-
object.should_receive(:ai)
|
|
16
|
-
@logger.ap object
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
describe "the log level" do
|
|
20
|
-
before(:each) do
|
|
21
|
-
AwesomePrint.defaults = { }
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should fallback to the default :debug log level" do
|
|
25
|
-
@logger.should_receive(:debug)
|
|
26
|
-
@logger.ap(nil)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should use the global user default if no level passed" do
|
|
30
|
-
AwesomePrint.defaults = { :log_level => :info }
|
|
31
|
-
@logger.should_receive(:info)
|
|
32
|
-
@logger.ap(nil)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should use the passed in level" do
|
|
36
|
-
@logger.should_receive(:warn)
|
|
37
|
-
@logger.ap(nil, :warn)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
|
data/spec/mongo_mapper_spec.rb
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require "mongo_mapper"
|
|
5
|
-
require "ap/mixin/mongo_mapper"
|
|
6
|
-
|
|
7
|
-
describe "AwesomePrint/MongoMapper" do
|
|
8
|
-
before :all do
|
|
9
|
-
class MongoUser
|
|
10
|
-
include MongoMapper::Document
|
|
11
|
-
|
|
12
|
-
key :first_name, String
|
|
13
|
-
key :last_name, String
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
before :each do
|
|
18
|
-
@ap = AwesomePrint.new(:plain => true)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should print for a class instance" do
|
|
22
|
-
user = MongoUser.new(:first_name => "Al", :last_name => "Capone")
|
|
23
|
-
out = @ap.send(:awesome, user)
|
|
24
|
-
str = <<-EOS.strip
|
|
25
|
-
#<MongoUser:0x01234567> {
|
|
26
|
-
"_id" => BSON::ObjectId('4d9183739a546f6806000001'),
|
|
27
|
-
"first_name" => "Al",
|
|
28
|
-
"last_name" => "Capone"
|
|
29
|
-
}
|
|
30
|
-
EOS
|
|
31
|
-
out.gsub!(/'([\w]+){23}'/, "'4d9183739a546f6806000001'")
|
|
32
|
-
out.gsub!(/0x([a-f\d]+)/, "0x01234567")
|
|
33
|
-
out.should == str
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should print for a class" do
|
|
37
|
-
@ap.send(:awesome, MongoUser).should == <<-EOS.strip
|
|
38
|
-
class MongoUser < Object {
|
|
39
|
-
"_id" => :object_id,
|
|
40
|
-
"first_name" => :string,
|
|
41
|
-
"last_name" => :string
|
|
42
|
-
}
|
|
43
|
-
EOS
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should print for a class when type is undefined" do
|
|
47
|
-
class Chamelion
|
|
48
|
-
include MongoMapper::Document
|
|
49
|
-
key :last_attribute
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
@ap.send(:awesome, Chamelion).should == <<-EOS.strip
|
|
53
|
-
class Chamelion < Object {
|
|
54
|
-
"_id" => :object_id,
|
|
55
|
-
"last_attribute" => :undefined
|
|
56
|
-
}
|
|
57
|
-
EOS
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
rescue LoadError
|
|
62
|
-
puts "Skipping MongoMapper specs..."
|
|
63
|
-
end
|
data/spec/string_spec.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "String extensions" do
|
|
4
|
-
[ :gray, :red, :green, :yellow, :blue, :purple, :cyan, :white ].each_with_index do |color, i|
|
|
5
|
-
it "should have #{color} color" do
|
|
6
|
-
color.to_s.send(color).should == "\033[1;#{30+i}m#{color}\033[0m"
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should have #{color}ish color" do
|
|
10
|
-
color.to_s.send(:"#{color}ish").should == "\033[0;#{30+i}m#{color}\033[0m"
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should have black and pale colors" do
|
|
15
|
-
"black".send(:black).should == "black".send(:grayish)
|
|
16
|
-
"pale".send(:pale).should == "pale".send(:whiteish)
|
|
17
|
-
"pale".send(:pale).should == "\e[0;37mpale\e[0m"
|
|
18
|
-
"whiteish".send(:whiteish).should == "\e[0;37mwhiteish\e[0m"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
File without changes
|
|
File without changes
|