awesome_print 0.4.0 → 1.0.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 +22 -0
- data/CHANGELOG +8 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +26 -0
- data/README.md +52 -14
- data/Rakefile +2 -46
- data/lib/ap.rb +3 -17
- data/lib/awesome_print.rb +16 -12
- data/lib/{ap → awesome_print}/core_ext/array.rb +0 -0
- data/lib/{ap → awesome_print}/core_ext/class.rb +0 -0
- 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/method.rb +0 -0
- data/lib/{ap → awesome_print}/core_ext/object.rb +0 -0
- 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 +40 -0
- data/lib/awesome_print/ext/active_support.rb +40 -0
- data/lib/awesome_print/ext/mongo_mapper.rb +38 -0
- data/lib/awesome_print/ext/mongoid.rb +39 -0
- data/lib/awesome_print/ext/nokogiri.rb +45 -0
- data/lib/awesome_print/formatter.rb +350 -0
- data/lib/awesome_print/inspector.rb +140 -0
- data/{rails/init.rb → lib/awesome_print/version.rb} +5 -4
- data/spec/colors_spec.rb +106 -0
- data/spec/{awesome_print_spec.rb → formats_spec.rb} +187 -37
- data/spec/methods_spec.rb +20 -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
@@ -0,0 +1,140 @@
|
|
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 AwesomePrint
|
7
|
+
|
8
|
+
class << self # Class accessors for custom defaults.
|
9
|
+
attr_accessor :defaults, :force_colors
|
10
|
+
|
11
|
+
# Class accessor to force colorized output (ex. forked subprocess where TERM
|
12
|
+
# might be dumb).
|
13
|
+
#------------------------------------------------------------------------------
|
14
|
+
def force_colors!(value = true)
|
15
|
+
@force_colors = value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Inspector
|
20
|
+
attr_accessor :options
|
21
|
+
|
22
|
+
AP = :__awesome_print__
|
23
|
+
|
24
|
+
def initialize(options = {})
|
25
|
+
@options = {
|
26
|
+
:indent => 4, # Indent using 4 spaces.
|
27
|
+
:index => true, # Display array indices.
|
28
|
+
:html => false, # Use ANSI color codes rather than HTML.
|
29
|
+
:multiline => true, # Display in multiple lines.
|
30
|
+
:plain => false, # Use colors.
|
31
|
+
:sort_keys => false, # Do not sort hash keys.
|
32
|
+
:limit => false, # Limit large output for arrays and hashes. Set to a boolean or integer.
|
33
|
+
:color => {
|
34
|
+
:args => :pale,
|
35
|
+
:array => :white,
|
36
|
+
:bigdecimal => :blue,
|
37
|
+
:class => :yellow,
|
38
|
+
:date => :greenish,
|
39
|
+
:falseclass => :red,
|
40
|
+
:fixnum => :blue,
|
41
|
+
:float => :blue,
|
42
|
+
:hash => :pale,
|
43
|
+
:keyword => :cyan,
|
44
|
+
:method => :purpleish,
|
45
|
+
:nilclass => :red,
|
46
|
+
:string => :yellowish,
|
47
|
+
:struct => :pale,
|
48
|
+
:symbol => :cyanish,
|
49
|
+
:time => :greenish,
|
50
|
+
:trueclass => :green,
|
51
|
+
:variable => :cyanish
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
# Merge custom defaults and let explicit options parameter override them.
|
56
|
+
merge_custom_defaults!
|
57
|
+
merge_options!(options)
|
58
|
+
|
59
|
+
@formatter = AwesomePrint::Formatter.new(self)
|
60
|
+
Thread.current[AP] ||= []
|
61
|
+
end
|
62
|
+
|
63
|
+
# Dispatcher that detects data nesting and invokes object-aware formatter.
|
64
|
+
#------------------------------------------------------------------------------
|
65
|
+
def awesome(object)
|
66
|
+
if Thread.current[AP].include?(object.object_id)
|
67
|
+
nested(object)
|
68
|
+
else
|
69
|
+
begin
|
70
|
+
Thread.current[AP] << object.object_id
|
71
|
+
unnested(object)
|
72
|
+
ensure
|
73
|
+
Thread.current[AP].pop
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Return true if we are to colorize the output.
|
79
|
+
#------------------------------------------------------------------------------
|
80
|
+
def colorize?
|
81
|
+
AwesomePrint.force_colors ||= false
|
82
|
+
AwesomePrint.force_colors || (STDOUT.tty? && ((ENV['TERM'] && ENV['TERM'] != 'dumb') || ENV['ANSICON']))
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
# Format nested data, for example:
|
88
|
+
# arr = [1, 2]; arr << arr
|
89
|
+
# => [1,2, [...]]
|
90
|
+
# hash = { :a => 1 }; hash[:b] = hash
|
91
|
+
# => { :a => 1, :b => {...} }
|
92
|
+
#------------------------------------------------------------------------------
|
93
|
+
def nested(object)
|
94
|
+
case printable(object)
|
95
|
+
when :array then @formatter.colorize("[...]", :array)
|
96
|
+
when :hash then @formatter.colorize("{...}", :hash)
|
97
|
+
when :struct then @formatter.colorize("{...}", :struct)
|
98
|
+
else @formatter.colorize("...#{object.class}...", :class)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
#------------------------------------------------------------------------------
|
103
|
+
def unnested(object)
|
104
|
+
@formatter.format(object, printable(object))
|
105
|
+
end
|
106
|
+
|
107
|
+
# Turn class name into symbol, ex: Hello::World => :hello_world. Classes that
|
108
|
+
# inherit from Array, Hash, File, Dir, and Struct are treated as the base class.
|
109
|
+
#------------------------------------------------------------------------------
|
110
|
+
def printable(object)
|
111
|
+
case object
|
112
|
+
when Array then :array
|
113
|
+
when Hash then :hash
|
114
|
+
when File then :file
|
115
|
+
when Dir then :dir
|
116
|
+
when Struct then :struct
|
117
|
+
else object.class.to_s.gsub(/:+/, "_").downcase.to_sym
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Update @options by first merging the :color hash and then the remaining keys.
|
122
|
+
#------------------------------------------------------------------------------
|
123
|
+
def merge_options!(options = {})
|
124
|
+
@options[:color].merge!(options.delete(:color) || {})
|
125
|
+
@options.merge!(options)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Load ~/.aprc file with custom defaults that override default options.
|
129
|
+
#------------------------------------------------------------------------------
|
130
|
+
def merge_custom_defaults!
|
131
|
+
dotfile = File.join(ENV["HOME"], ".aprc")
|
132
|
+
if File.readable?(dotfile)
|
133
|
+
load dotfile
|
134
|
+
merge_options!(AwesomePrint.defaults)
|
135
|
+
end
|
136
|
+
rescue => e
|
137
|
+
$stderr.puts "Could not load #{dotfile}: #{e}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -3,7 +3,8 @@
|
|
3
3
|
# Awesome Print is freely distributable under the terms of MIT license.
|
4
4
|
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
5
|
#------------------------------------------------------------------------------
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module AwesomePrint
|
7
|
+
def self.version
|
8
|
+
'1.0.0'
|
9
|
+
end
|
10
|
+
end
|
data/spec/colors_spec.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "AwesomePrint" do
|
4
|
+
def stub_tty!(output = true, stream = STDOUT)
|
5
|
+
if output
|
6
|
+
stream.instance_eval { def tty?; true; end }
|
7
|
+
else
|
8
|
+
stream.instance_eval { def tty?; false; end }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
stub_dotfile!
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "colorization" do
|
17
|
+
PLAIN = '[ 1, :two, "three", [ nil, [ true, false ] ] ]'
|
18
|
+
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 ] ] ]"
|
19
|
+
|
20
|
+
before do
|
21
|
+
ENV['TERM'] = "xterm-colors"
|
22
|
+
ENV.delete('ANSICON')
|
23
|
+
@arr = [ 1, :two, "three", [ nil, [ true, false] ] ]
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "default settings (no forced colors)" do
|
27
|
+
before do
|
28
|
+
AwesomePrint.force_colors! false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "colorizes tty processes by default" do
|
32
|
+
stub_tty!
|
33
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
34
|
+
end
|
35
|
+
|
36
|
+
it "colorizes processes with ENV['ANSICON'] by default" do
|
37
|
+
begin
|
38
|
+
stub_tty!
|
39
|
+
term, ENV['ANSICON'] = ENV['ANSICON'], "1"
|
40
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
41
|
+
ensure
|
42
|
+
ENV['ANSICON'] = term
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "does not colorize tty processes running in dumb terminals by default" do
|
47
|
+
begin
|
48
|
+
stub_tty!
|
49
|
+
term, ENV['TERM'] = ENV['TERM'], "dumb"
|
50
|
+
@arr.ai(:multiline => false).should == PLAIN
|
51
|
+
ensure
|
52
|
+
ENV['TERM'] = term
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "does not colorize subprocesses by default" do
|
57
|
+
begin
|
58
|
+
stub_tty! false
|
59
|
+
@arr.ai(:multiline => false).should == PLAIN
|
60
|
+
ensure
|
61
|
+
stub_tty!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "forced colors override" do
|
67
|
+
before do
|
68
|
+
AwesomePrint.force_colors!
|
69
|
+
end
|
70
|
+
|
71
|
+
it "still colorizes tty processes" do
|
72
|
+
stub_tty!
|
73
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
74
|
+
end
|
75
|
+
|
76
|
+
it "colorizes processes with ENV['ANSICON'] set to 0" do
|
77
|
+
begin
|
78
|
+
stub_tty!
|
79
|
+
term, ENV['ANSICON'] = ENV['ANSICON'], "1"
|
80
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
81
|
+
ensure
|
82
|
+
ENV['ANSICON'] = term
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
it "colorizes dumb terminals" do
|
87
|
+
begin
|
88
|
+
stub_tty!
|
89
|
+
term, ENV['TERM'] = ENV['TERM'], "dumb"
|
90
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
91
|
+
ensure
|
92
|
+
ENV['TERM'] = term
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it "colorizes subprocess" do
|
97
|
+
begin
|
98
|
+
stub_tty! false
|
99
|
+
@arr.ai(:multiline => false).should == COLORIZED
|
100
|
+
ensure
|
101
|
+
stub_tty!
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -3,12 +3,12 @@ require "bigdecimal"
|
|
3
3
|
require "rational"
|
4
4
|
|
5
5
|
describe "AwesomePrint" do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
stub_dotfile!
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "Array" do
|
11
|
-
before
|
11
|
+
before do
|
12
12
|
@arr = [ 1, :two, "three", [ nil, [ true, false] ] ]
|
13
13
|
end
|
14
14
|
|
@@ -91,14 +91,14 @@ EOS
|
|
91
91
|
it "colored multiline (default)" do
|
92
92
|
@arr.ai.should == <<-EOS.strip
|
93
93
|
[
|
94
|
-
\e[1;37m
|
95
|
-
\e[1;37m
|
96
|
-
\e[1;37m
|
97
|
-
\e[1;37m
|
98
|
-
\e[1;37m
|
99
|
-
\e[1;37m
|
100
|
-
\e[1;37m
|
101
|
-
\e[1;37m
|
94
|
+
\e[1;37m[0] \e[0m\e[1;34m1\e[0m,
|
95
|
+
\e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
|
96
|
+
\e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
|
97
|
+
\e[1;37m[3] \e[0m[
|
98
|
+
\e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
|
99
|
+
\e[1;37m[1] \e[0m[
|
100
|
+
\e[1;37m[0] \e[0m\e[1;32mtrue\e[0m,
|
101
|
+
\e[1;37m[1] \e[0m\e[1;31mfalse\e[0m
|
102
102
|
]
|
103
103
|
]
|
104
104
|
]
|
@@ -108,14 +108,14 @@ EOS
|
|
108
108
|
it "colored multiline indented" do
|
109
109
|
@arr.ai(:indent => 8).should == <<-EOS.strip
|
110
110
|
[
|
111
|
-
\e[1;37m
|
112
|
-
\e[1;37m
|
113
|
-
\e[1;37m
|
114
|
-
\e[1;37m
|
115
|
-
\e[1;37m
|
116
|
-
\e[1;37m
|
117
|
-
\e[1;37m
|
118
|
-
\e[1;37m
|
111
|
+
\e[1;37m[0] \e[0m\e[1;34m1\e[0m,
|
112
|
+
\e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
|
113
|
+
\e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
|
114
|
+
\e[1;37m[3] \e[0m[
|
115
|
+
\e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
|
116
|
+
\e[1;37m[1] \e[0m[
|
117
|
+
\e[1;37m[0] \e[0m\e[1;32mtrue\e[0m,
|
118
|
+
\e[1;37m[1] \e[0m\e[1;31mfalse\e[0m
|
119
119
|
]
|
120
120
|
]
|
121
121
|
]
|
@@ -129,7 +129,7 @@ EOS
|
|
129
129
|
|
130
130
|
#------------------------------------------------------------------------------
|
131
131
|
describe "Nested Array" do
|
132
|
-
before
|
132
|
+
before do
|
133
133
|
@arr = [ 1, 2 ]
|
134
134
|
@arr << @arr
|
135
135
|
end
|
@@ -160,8 +160,97 @@ EOS
|
|
160
160
|
end
|
161
161
|
|
162
162
|
#------------------------------------------------------------------------------
|
163
|
-
describe "
|
163
|
+
describe "Limited Output Array" do
|
164
|
+
before(:each) do
|
165
|
+
@arr = (1..1000).to_a
|
166
|
+
end
|
167
|
+
|
168
|
+
it "plain limited output large" do
|
169
|
+
@arr.ai(:plain => true, :limit => true).should == <<-EOS.strip
|
170
|
+
[
|
171
|
+
[ 0] 1,
|
172
|
+
[ 1] 2,
|
173
|
+
[ 2] 3,
|
174
|
+
[ 3] .. [996],
|
175
|
+
[997] 998,
|
176
|
+
[998] 999,
|
177
|
+
[999] 1000
|
178
|
+
]
|
179
|
+
EOS
|
180
|
+
end
|
181
|
+
|
182
|
+
it "plain limited output small" do
|
183
|
+
@arr = @arr[0..3]
|
184
|
+
@arr.ai(:plain => true, :limit => true).should == <<-EOS.strip
|
185
|
+
[
|
186
|
+
[0] 1,
|
187
|
+
[1] 2,
|
188
|
+
[2] 3,
|
189
|
+
[3] 4
|
190
|
+
]
|
191
|
+
EOS
|
192
|
+
end
|
193
|
+
|
194
|
+
it "plain limited output with 10 lines" do
|
195
|
+
@arr.ai(:plain => true, :limit => 10).should == <<-EOS.strip
|
196
|
+
[
|
197
|
+
[ 0] 1,
|
198
|
+
[ 1] 2,
|
199
|
+
[ 2] 3,
|
200
|
+
[ 3] 4,
|
201
|
+
[ 4] 5,
|
202
|
+
[ 5] .. [995],
|
203
|
+
[996] 997,
|
204
|
+
[997] 998,
|
205
|
+
[998] 999,
|
206
|
+
[999] 1000
|
207
|
+
]
|
208
|
+
EOS
|
209
|
+
end
|
210
|
+
|
211
|
+
it "plain limited output with 11 lines" do
|
212
|
+
@arr.ai(:plain => true, :limit => 11).should == <<-EOS.strip
|
213
|
+
[
|
214
|
+
[ 0] 1,
|
215
|
+
[ 1] 2,
|
216
|
+
[ 2] 3,
|
217
|
+
[ 3] 4,
|
218
|
+
[ 4] 5,
|
219
|
+
[ 5] .. [994],
|
220
|
+
[995] 996,
|
221
|
+
[996] 997,
|
222
|
+
[997] 998,
|
223
|
+
[998] 999,
|
224
|
+
[999] 1000
|
225
|
+
]
|
226
|
+
EOS
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
#------------------------------------------------------------------------------
|
231
|
+
describe "Limited Output Hash" do
|
164
232
|
before(:each) do
|
233
|
+
@hash = ("a".."z").inject({}) { |h, v| h.merge({ v => v.to_sym }) }
|
234
|
+
end
|
235
|
+
|
236
|
+
it "plain limited output" do
|
237
|
+
@hash.ai(:sort_keys => true, :plain => true, :limit => true).should == <<-EOS.strip
|
238
|
+
{
|
239
|
+
"a" => :a,
|
240
|
+
"b" => :b,
|
241
|
+
"c" => :c,
|
242
|
+
"d" => :d .. "w" => :w,
|
243
|
+
"x" => :x,
|
244
|
+
"y" => :y,
|
245
|
+
"z" => :z
|
246
|
+
}
|
247
|
+
EOS
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
#------------------------------------------------------------------------------
|
252
|
+
describe "Hash" do
|
253
|
+
before do
|
165
254
|
@hash = { 1 => { :sym => { "str" => { [1, 2, 3] => { { :k => :v } => Hash } } } } }
|
166
255
|
end
|
167
256
|
|
@@ -245,7 +334,7 @@ EOS
|
|
245
334
|
|
246
335
|
#------------------------------------------------------------------------------
|
247
336
|
describe "Nested Hash" do
|
248
|
-
before
|
337
|
+
before do
|
249
338
|
@hash = {}
|
250
339
|
@hash[:a] = @hash
|
251
340
|
end
|
@@ -265,7 +354,7 @@ EOS
|
|
265
354
|
|
266
355
|
#------------------------------------------------------------------------------
|
267
356
|
describe "Hash with several keys" do
|
268
|
-
before
|
357
|
+
before do
|
269
358
|
@hash = {"b" => "b", :a => "a", :z => "z", "alpha" => "alpha"}
|
270
359
|
end
|
271
360
|
|
@@ -290,7 +379,7 @@ EOS
|
|
290
379
|
end
|
291
380
|
|
292
381
|
it "plain multiline with sorted keys" do
|
293
|
-
@hash.ai(:plain => true, :
|
382
|
+
@hash.ai(:plain => true, :sort_keys => true).should == <<-EOS.strip
|
294
383
|
{
|
295
384
|
:a => "a",
|
296
385
|
"alpha" => "alpha",
|
@@ -304,17 +393,58 @@ EOS
|
|
304
393
|
|
305
394
|
#------------------------------------------------------------------------------
|
306
395
|
describe "Negative options[:indent]" do
|
307
|
-
|
308
|
-
|
396
|
+
#
|
397
|
+
# With Ruby < 1.9 the order of hash keys is not defined so we can't
|
398
|
+
# reliably compare the output string.
|
399
|
+
#
|
400
|
+
it "hash keys must be left aligned" do
|
401
|
+
hash = { [0, 0, 255] => :yellow, :red => "rgb(255, 0, 0)", "magenta" => "rgb(255, 0, 255)" }
|
402
|
+
out = hash.ai(:plain => true, :indent => -4, :sort_keys => true)
|
403
|
+
out.should == <<-EOS.strip
|
404
|
+
{
|
405
|
+
[ 0, 0, 255 ] => :yellow,
|
406
|
+
"magenta" => "rgb(255, 0, 255)",
|
407
|
+
:red => "rgb(255, 0, 0)"
|
408
|
+
}
|
409
|
+
EOS
|
309
410
|
end
|
310
411
|
|
311
|
-
it "hash keys
|
312
|
-
|
313
|
-
out.
|
314
|
-
out.
|
315
|
-
|
316
|
-
|
317
|
-
|
412
|
+
it "nested hash keys should be indented (array of hashes)" do
|
413
|
+
arr = [ { :a => 1, :bb => 22, :ccc => 333}, { 1 => :a, 22 => :bb, 333 => :ccc} ]
|
414
|
+
out = arr.ai(:plain => true, :indent => -4, :sort_keys => true)
|
415
|
+
out.should == <<-EOS.strip
|
416
|
+
[
|
417
|
+
[0] {
|
418
|
+
:a => 1,
|
419
|
+
:bb => 22,
|
420
|
+
:ccc => 333
|
421
|
+
},
|
422
|
+
[1] {
|
423
|
+
1 => :a,
|
424
|
+
22 => :bb,
|
425
|
+
333 => :ccc
|
426
|
+
}
|
427
|
+
]
|
428
|
+
EOS
|
429
|
+
end
|
430
|
+
|
431
|
+
it "nested hash keys should be indented (hash of hashes)" do
|
432
|
+
arr = { :first => { :a => 1, :bb => 22, :ccc => 333}, :second => { 1 => :a, 22 => :bb, 333 => :ccc} }
|
433
|
+
out = arr.ai(:plain => true, :indent => -4, :sort_keys => true)
|
434
|
+
out.should == <<-EOS.strip
|
435
|
+
{
|
436
|
+
:first => {
|
437
|
+
:a => 1,
|
438
|
+
:bb => 22,
|
439
|
+
:ccc => 333
|
440
|
+
},
|
441
|
+
:second => {
|
442
|
+
1 => :a,
|
443
|
+
22 => :bb,
|
444
|
+
333 => :ccc
|
445
|
+
}
|
446
|
+
}
|
447
|
+
EOS
|
318
448
|
end
|
319
449
|
end
|
320
450
|
|
@@ -363,7 +493,7 @@ EOS
|
|
363
493
|
#------------------------------------------------------------------------------
|
364
494
|
describe "Utility methods" do
|
365
495
|
it "should merge options" do
|
366
|
-
ap = AwesomePrint.new
|
496
|
+
ap = AwesomePrint::Inspector.new
|
367
497
|
ap.send(:merge_options!, { :color => { :array => :black }, :indent => 0 })
|
368
498
|
options = ap.instance_variable_get("@options")
|
369
499
|
options[:color][:array].should == :black
|
@@ -374,7 +504,7 @@ EOS
|
|
374
504
|
|
375
505
|
#------------------------------------------------------------------------------
|
376
506
|
describe "Struct" do
|
377
|
-
before
|
507
|
+
before do
|
378
508
|
@struct = unless defined?(Struct::SimpleStruct)
|
379
509
|
Struct.new("SimpleStruct", :name, :address).new
|
380
510
|
else
|
@@ -455,6 +585,15 @@ EOS
|
|
455
585
|
weird.new.ai(:plain => true).should == ''
|
456
586
|
end
|
457
587
|
|
588
|
+
it "handle frozen object.inspect" do
|
589
|
+
weird = Class.new do
|
590
|
+
def inspect
|
591
|
+
"ice".freeze
|
592
|
+
end
|
593
|
+
end
|
594
|
+
weird.new.ai(:plain => false).should == "ice"
|
595
|
+
end
|
596
|
+
|
458
597
|
# See https://github.com/michaeldv/awesome_print/issues/35
|
459
598
|
it "handle array grep when pattern contains / chapacter" do
|
460
599
|
hash = { "1/x" => 1, "2//x" => :"2" }
|
@@ -481,9 +620,20 @@ EOS
|
|
481
620
|
markup.ai(:html => true, :plain => true).should == "<pre>#{markup}</pre>"
|
482
621
|
end
|
483
622
|
|
484
|
-
it "wraps ap output with
|
623
|
+
it "wraps ap output with <pre> tag with colorized <kbd>" do
|
485
624
|
markup = rand
|
486
|
-
markup.ai(:html => true).should == %Q|<pre style="color:blue">#{markup}</pre>|
|
625
|
+
markup.ai(:html => true).should == %Q|<pre><kbd style="color:blue">#{markup}</kbd></pre>|
|
626
|
+
end
|
627
|
+
|
628
|
+
it "wraps multiline ap output with <pre> tag with colorized <kbd>" do
|
629
|
+
markup = [ 1, :two, "three" ]
|
630
|
+
markup.ai(:html => true).should == <<-EOS.strip
|
631
|
+
<pre>[
|
632
|
+
<kbd style="color:white">[0] </kbd><pre><kbd style="color:blue">1</kbd></pre>,
|
633
|
+
<kbd style="color:white">[1] </kbd><pre><kbd style="color:darkcyan">:two</kbd></pre>,
|
634
|
+
<kbd style="color:white">[2] </kbd><pre><kbd style="color:brown">"three"</kbd></pre>
|
635
|
+
]</pre>
|
636
|
+
EOS
|
487
637
|
end
|
488
638
|
|
489
639
|
it "encodes HTML entities (plain)" do
|
@@ -493,7 +643,7 @@ EOS
|
|
493
643
|
|
494
644
|
it "encodes HTML entities (color)" do
|
495
645
|
markup = ' &<hello>'
|
496
|
-
markup.ai(:html => true).should == '<pre style="color:brown">" &<hello>"</pre>'
|
646
|
+
markup.ai(:html => true).should == '<pre><kbd style="color:brown">" &<hello>"</kbd></pre>'
|
497
647
|
end
|
498
648
|
end
|
499
649
|
|