awesome_print 1.7.0 → 1.8.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/Appraisals +11 -0
- data/CHANGELOG.md +10 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +47 -38
- data/Rakefile +5 -5
- data/lib/ap.rb +2 -2
- data/lib/awesome_print.rb +18 -17
- data/lib/awesome_print/colorize.rb +1 -1
- data/lib/awesome_print/core_ext/{array.rb → awesome_method_array.rb} +16 -18
- data/lib/awesome_print/core_ext/class.rb +3 -2
- data/lib/awesome_print/core_ext/kernel.rb +1 -1
- data/lib/awesome_print/core_ext/logger.rb +1 -1
- data/lib/awesome_print/core_ext/method.rb +2 -2
- data/lib/awesome_print/core_ext/object.rb +3 -2
- data/lib/awesome_print/core_ext/string.rb +3 -3
- data/lib/awesome_print/custom_defaults.rb +57 -0
- data/lib/awesome_print/ext/action_view.rb +8 -4
- data/lib/awesome_print/ext/active_record.rb +19 -11
- data/lib/awesome_print/ext/active_support.rb +1 -1
- data/lib/awesome_print/ext/mongo_mapper.rb +16 -13
- data/lib/awesome_print/ext/mongoid.rb +8 -6
- data/lib/awesome_print/ext/nobrainer.rb +8 -5
- data/lib/awesome_print/ext/nokogiri.rb +4 -4
- data/lib/awesome_print/ext/ostruct.rb +1 -1
- data/lib/awesome_print/ext/ripple.rb +5 -6
- data/lib/awesome_print/ext/sequel.rb +7 -6
- data/lib/awesome_print/formatter.rb +11 -19
- data/lib/awesome_print/formatters.rb +15 -0
- data/lib/awesome_print/formatters/array_formatter.rb +108 -42
- data/lib/awesome_print/formatters/base_formatter.rb +13 -11
- data/lib/awesome_print/formatters/class_formatter.rb +2 -1
- data/lib/awesome_print/formatters/dir_formatter.rb +1 -1
- data/lib/awesome_print/formatters/file_formatter.rb +1 -1
- data/lib/awesome_print/formatters/hash_formatter.rb +74 -22
- data/lib/awesome_print/formatters/object_formatter.rb +9 -14
- data/lib/awesome_print/formatters/struct_formatter.rb +71 -0
- data/lib/awesome_print/inspector.rb +77 -93
- data/lib/awesome_print/version.rb +2 -2
- data/spec/active_record_helper.rb +8 -2
- data/spec/colors_spec.rb +30 -30
- data/spec/core_ext/logger_spec.rb +43 -0
- data/spec/core_ext/string_spec.rb +20 -0
- data/spec/ext/action_view_spec.rb +18 -0
- data/spec/ext/active_record_spec.rb +252 -0
- data/spec/ext/active_support_spec.rb +26 -0
- data/spec/ext/mongo_mapper_spec.rb +261 -0
- data/spec/ext/mongoid_spec.rb +104 -0
- data/spec/ext/nobrainer_spec.rb +59 -0
- data/spec/ext/nokogiri_spec.rb +46 -0
- data/spec/ext/ostruct_spec.rb +22 -0
- data/spec/ext/ripple_spec.rb +48 -0
- data/spec/formats_spec.rb +193 -165
- data/spec/methods_spec.rb +116 -128
- data/spec/misc_spec.rb +104 -108
- data/spec/objects_spec.rb +70 -28
- data/spec/spec_helper.rb +27 -10
- data/spec/support/active_record_data.rb +20 -0
- data/spec/support/active_record_data/3_2_diana.txt +24 -0
- data/spec/support/active_record_data/3_2_diana_legacy.txt +24 -0
- data/spec/support/active_record_data/3_2_multi.txt +50 -0
- data/spec/support/active_record_data/3_2_multi_legacy.txt +50 -0
- data/spec/support/active_record_data/4_0_diana.txt +98 -0
- data/spec/support/active_record_data/4_0_multi.txt +198 -0
- data/spec/support/active_record_data/4_1_diana.txt +97 -0
- data/spec/support/active_record_data/4_1_multi.txt +196 -0
- data/spec/support/active_record_data/4_2_diana.txt +109 -0
- data/spec/support/active_record_data/4_2_diana_legacy.txt +109 -0
- data/spec/support/active_record_data/4_2_multi.txt +220 -0
- data/spec/support/active_record_data/4_2_multi_legacy.txt +220 -0
- data/spec/support/active_record_data/5_0_diana.txt +105 -0
- data/spec/support/active_record_data/5_0_multi.txt +212 -0
- data/spec/support/ext_verifier.rb +42 -0
- data/spec/support/mongoid_versions.rb +22 -0
- data/spec/support/rails_versions.rb +35 -0
- metadata +79 -4
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative 'base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class StructFormatter < BaseFormatter
|
6
|
+
|
7
|
+
attr_reader :struct, :variables, :inspector, :options
|
8
|
+
|
9
|
+
def initialize(struct, inspector)
|
10
|
+
@struct = struct
|
11
|
+
@variables = struct.members
|
12
|
+
@inspector = inspector
|
13
|
+
@options = inspector.options
|
14
|
+
end
|
15
|
+
|
16
|
+
def format
|
17
|
+
vars = variables.map do |var|
|
18
|
+
property = var.to_s[1..-1].to_sym # to_s because of some monkey patching done by Puppet.
|
19
|
+
accessor = if struct.respond_to?(:"#{property}=")
|
20
|
+
struct.respond_to?(property) ? :accessor : :writer
|
21
|
+
else
|
22
|
+
struct.respond_to?(property) ? :reader : nil
|
23
|
+
end
|
24
|
+
if accessor
|
25
|
+
["attr_#{accessor} :#{property}", var]
|
26
|
+
else
|
27
|
+
[var.to_s, var]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
data = vars.sort.map do |declaration, var|
|
32
|
+
key = left_aligned do
|
33
|
+
align(declaration, declaration.size)
|
34
|
+
end
|
35
|
+
|
36
|
+
unless options[:plain]
|
37
|
+
if key =~ /(@\w+)/
|
38
|
+
key.sub!($1, colorize($1, :variable))
|
39
|
+
else
|
40
|
+
key.sub!(/(attr_\w+)\s(\:\w+)/, "#{colorize('\\1', :keyword)} #{colorize('\\2', :method)}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
indented do
|
45
|
+
key << colorize(' = ', :hash) + inspector.awesome(struct.send(var))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if options[:multiline]
|
50
|
+
"#<#{awesome_instance}\n#{data.join(%Q/,\n/)}\n#{outdent}>"
|
51
|
+
else
|
52
|
+
"#<#{awesome_instance} #{data.join(', ')}>"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def awesome_instance
|
59
|
+
"#{struct.class.superclass}:#{struct.class}:0x%08x" % (struct.__id__ * 2)
|
60
|
+
end
|
61
|
+
|
62
|
+
def left_aligned
|
63
|
+
current = options[:indent]
|
64
|
+
options[:indent] = 0
|
65
|
+
yield
|
66
|
+
ensure
|
67
|
+
options[:indent] = current
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,89 +1,48 @@
|
|
1
|
-
# Copyright (c) 2010-
|
1
|
+
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
2
|
#
|
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
|
-
require_relative
|
6
|
+
require_relative 'indentator'
|
7
7
|
|
8
8
|
module AwesomePrint
|
9
|
-
|
10
|
-
class << self # Class accessors for custom defaults.
|
11
|
-
attr_accessor :defaults, :force_colors
|
12
|
-
|
13
|
-
# Class accessor to force colorized output (ex. forked subprocess where TERM
|
14
|
-
# might be dumb).
|
15
|
-
#------------------------------------------------------------------------------
|
16
|
-
def force_colors!(value = true)
|
17
|
-
@force_colors = value
|
18
|
-
end
|
19
|
-
|
20
|
-
def console?
|
21
|
-
!!(defined?(IRB) || defined?(Pry))
|
22
|
-
end
|
23
|
-
|
24
|
-
def rails_console?
|
25
|
-
console? && !!(defined?(Rails::Console) || ENV["RAILS_ENV"])
|
26
|
-
end
|
27
|
-
|
28
|
-
def irb!
|
29
|
-
return unless defined?(IRB)
|
30
|
-
unless IRB.version.include?("DietRB")
|
31
|
-
IRB::Irb.class_eval do
|
32
|
-
def output_value
|
33
|
-
ap @context.last_value
|
34
|
-
end
|
35
|
-
end
|
36
|
-
else # MacRuby
|
37
|
-
IRB.formatter = Class.new(IRB::Formatter) do
|
38
|
-
def inspect_object(object)
|
39
|
-
object.ai
|
40
|
-
end
|
41
|
-
end.new
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def pry!
|
46
|
-
if defined?(Pry)
|
47
|
-
Pry.print = proc { |output, value| output.puts value.ai }
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
9
|
class Inspector
|
53
10
|
attr_accessor :options, :indentator
|
54
11
|
|
55
12
|
AP = :__awesome_print__
|
56
13
|
|
57
14
|
def initialize(options = {})
|
58
|
-
@options = {
|
59
|
-
:
|
60
|
-
:
|
61
|
-
:
|
62
|
-
:
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
66
|
-
:
|
67
|
-
:
|
68
|
-
|
69
|
-
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
:
|
79
|
-
:
|
80
|
-
:
|
81
|
-
:
|
82
|
-
:
|
83
|
-
:
|
84
|
-
:
|
85
|
-
:
|
86
|
-
:
|
15
|
+
@options = {
|
16
|
+
indent: 4, # Number of spaces for indenting.
|
17
|
+
index: true, # Display array indices.
|
18
|
+
html: false, # Use ANSI color codes rather than HTML.
|
19
|
+
multiline: true, # Display in multiple lines.
|
20
|
+
plain: false, # Use colors.
|
21
|
+
raw: false, # Do not recursively format instance variables.
|
22
|
+
sort_keys: false, # Do not sort hash keys.
|
23
|
+
sort_vars: true, # Sort instance variables.
|
24
|
+
limit: false, # Limit arrays & hashes. Accepts bool or int.
|
25
|
+
ruby19_syntax: false, # Use Ruby 1.9 hash syntax in output.
|
26
|
+
color: {
|
27
|
+
args: :pale,
|
28
|
+
array: :white,
|
29
|
+
bigdecimal: :blue,
|
30
|
+
class: :yellow,
|
31
|
+
date: :greenish,
|
32
|
+
falseclass: :red,
|
33
|
+
fixnum: :blue,
|
34
|
+
float: :blue,
|
35
|
+
hash: :pale,
|
36
|
+
keyword: :cyan,
|
37
|
+
method: :purpleish,
|
38
|
+
nilclass: :red,
|
39
|
+
rational: :blue,
|
40
|
+
string: :yellowish,
|
41
|
+
struct: :pale,
|
42
|
+
symbol: :cyanish,
|
43
|
+
time: :greenish,
|
44
|
+
trueclass: :green,
|
45
|
+
variable: :cyanish
|
87
46
|
}
|
88
47
|
}
|
89
48
|
|
@@ -103,9 +62,9 @@ module AwesomePrint
|
|
103
62
|
def increase_indentation
|
104
63
|
indentator.indent(&Proc.new)
|
105
64
|
end
|
106
|
-
|
65
|
+
|
107
66
|
# Dispatcher that detects data nesting and invokes object-aware formatter.
|
108
|
-
|
67
|
+
#---------------------------------------------------------------------------
|
109
68
|
def awesome(object)
|
110
69
|
if Thread.current[AP].include?(object.object_id)
|
111
70
|
nested(object)
|
@@ -120,10 +79,18 @@ module AwesomePrint
|
|
120
79
|
end
|
121
80
|
|
122
81
|
# Return true if we are to colorize the output.
|
123
|
-
|
82
|
+
#---------------------------------------------------------------------------
|
124
83
|
def colorize?
|
125
84
|
AwesomePrint.force_colors ||= false
|
126
|
-
AwesomePrint.force_colors || (
|
85
|
+
AwesomePrint.force_colors || (
|
86
|
+
STDOUT.tty? && (
|
87
|
+
(
|
88
|
+
ENV['TERM'] &&
|
89
|
+
ENV['TERM'] != 'dumb'
|
90
|
+
) ||
|
91
|
+
ENV['ANSICON']
|
92
|
+
)
|
93
|
+
)
|
127
94
|
end
|
128
95
|
|
129
96
|
private
|
@@ -133,24 +100,25 @@ module AwesomePrint
|
|
133
100
|
# => [1,2, [...]]
|
134
101
|
# hash = { :a => 1 }; hash[:b] = hash
|
135
102
|
# => { :a => 1, :b => {...} }
|
136
|
-
|
103
|
+
#---------------------------------------------------------------------------
|
137
104
|
def nested(object)
|
138
105
|
case printable(object)
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
106
|
+
when :array then @formatter.colorize('[...]', :array)
|
107
|
+
when :hash then @formatter.colorize('{...}', :hash)
|
108
|
+
when :struct then @formatter.colorize('{...}', :struct)
|
109
|
+
else @formatter.colorize("...#{object.class}...", :class)
|
143
110
|
end
|
144
111
|
end
|
145
112
|
|
146
|
-
|
113
|
+
#---------------------------------------------------------------------------
|
147
114
|
def unnested(object)
|
148
115
|
@formatter.format(object, printable(object))
|
149
116
|
end
|
150
117
|
|
151
|
-
# Turn class name into symbol, ex: Hello::World => :hello_world. Classes
|
152
|
-
# inherit from Array, Hash, File, Dir, and Struct are treated as the
|
153
|
-
|
118
|
+
# Turn class name into symbol, ex: Hello::World => :hello_world. Classes
|
119
|
+
# that inherit from Array, Hash, File, Dir, and Struct are treated as the
|
120
|
+
# base class.
|
121
|
+
#---------------------------------------------------------------------------
|
154
122
|
def printable(object)
|
155
123
|
case object
|
156
124
|
when Array then :array
|
@@ -158,22 +126,38 @@ module AwesomePrint
|
|
158
126
|
when File then :file
|
159
127
|
when Dir then :dir
|
160
128
|
when Struct then :struct
|
161
|
-
else object.class.to_s.gsub(/:+/,
|
129
|
+
else object.class.to_s.gsub(/:+/, '_').downcase.to_sym
|
162
130
|
end
|
163
131
|
end
|
164
132
|
|
165
|
-
# Update @options by first merging the :color hash and then the remaining
|
166
|
-
|
133
|
+
# Update @options by first merging the :color hash and then the remaining
|
134
|
+
# keys.
|
135
|
+
#---------------------------------------------------------------------------
|
167
136
|
def merge_options!(options = {})
|
168
137
|
@options[:color].merge!(options.delete(:color) || {})
|
169
138
|
@options.merge!(options)
|
170
139
|
end
|
171
140
|
|
141
|
+
# This method needs to be mocked during testing so that it always loads
|
142
|
+
# predictable values
|
143
|
+
#---------------------------------------------------------------------------
|
144
|
+
def load_dotfile
|
145
|
+
dotfile = File.join(ENV['HOME'], '.aprc')
|
146
|
+
load dotfile if dotfile_readable?(dotfile)
|
147
|
+
end
|
148
|
+
|
149
|
+
def dotfile_readable? dotfile
|
150
|
+
if @@dotfile_readable.nil? || @@dotfile != dotfile
|
151
|
+
@@dotfile_readable = File.readable?(@@dotfile = dotfile)
|
152
|
+
end
|
153
|
+
@@dotfile_readable
|
154
|
+
end
|
155
|
+
@@dotfile_readable = @@dotfile = nil
|
156
|
+
|
172
157
|
# Load ~/.aprc file with custom defaults that override default options.
|
173
|
-
|
158
|
+
#---------------------------------------------------------------------------
|
174
159
|
def merge_custom_defaults!
|
175
|
-
|
176
|
-
load dotfile if File.readable?(dotfile)
|
160
|
+
load_dotfile
|
177
161
|
merge_options!(AwesomePrint.defaults) if AwesomePrint.defaults.is_a?(Hash)
|
178
162
|
rescue => e
|
179
163
|
$stderr.puts "Could not load #{dotfile}: #{e}"
|
@@ -1,10 +1,10 @@
|
|
1
|
-
# Copyright (c) 2010-
|
1
|
+
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
2
|
#
|
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
6
|
module AwesomePrint
|
7
7
|
def self.version
|
8
|
-
'1.
|
8
|
+
'1.8.0'
|
9
9
|
end
|
10
10
|
end
|
@@ -7,7 +7,7 @@ if ExtVerifier.has_rails?
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# Establish connection to in-memory SQLite DB
|
10
|
-
ActiveRecord::Base.establish_connection adapter:
|
10
|
+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
|
11
11
|
|
12
12
|
# Create the users table
|
13
13
|
ActiveRecord::Migration.verbose = false
|
@@ -18,7 +18,13 @@ if ExtVerifier.has_rails?
|
|
18
18
|
t.datetime :created_at
|
19
19
|
end
|
20
20
|
|
21
|
+
ActiveRecord::Migration.create_table :emails do |t|
|
22
|
+
t.references :user
|
23
|
+
t.string :email_address
|
24
|
+
end
|
25
|
+
|
21
26
|
# Create models
|
22
|
-
class User < ActiveRecord::Base; end
|
27
|
+
class User < ActiveRecord::Base; has_many :emails; end
|
23
28
|
class SubUser < User; end
|
29
|
+
class Email < ActiveRecord::Base; belongs_to :user; end
|
24
30
|
end
|
data/spec/colors_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe 'AwesomePrint' do
|
4
4
|
def stub_tty!(output = true, stream = STDOUT)
|
5
5
|
if output
|
6
6
|
stream.instance_eval { def tty?; true; end }
|
@@ -9,94 +9,94 @@ RSpec.describe "AwesomePrint" do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
stub_dotfile!
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "colorization" do
|
12
|
+
describe 'colorization' do
|
17
13
|
PLAIN = '[ 1, :two, "three", [ nil, [ true, false ] ] ]'
|
18
14
|
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
15
|
|
20
16
|
before do
|
21
|
-
ENV['TERM'] =
|
17
|
+
ENV['TERM'] = 'xterm-colors'
|
22
18
|
ENV.delete('ANSICON')
|
23
|
-
@arr = [
|
19
|
+
@arr = [1, :two, 'three', [nil, [true, false]]]
|
24
20
|
end
|
25
21
|
|
26
|
-
describe
|
22
|
+
describe 'default settings (no forced colors)' do
|
27
23
|
before do
|
28
24
|
AwesomePrint.force_colors! false
|
29
25
|
end
|
30
26
|
|
31
|
-
it
|
27
|
+
it 'colorizes tty processes by default' do
|
32
28
|
stub_tty!
|
33
|
-
expect(@arr.ai(:
|
29
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
34
30
|
end
|
35
31
|
|
36
32
|
it "colorizes processes with ENV['ANSICON'] by default" do
|
37
33
|
begin
|
38
34
|
stub_tty!
|
39
|
-
term
|
40
|
-
|
35
|
+
term = ENV['ANSICON']
|
36
|
+
ENV['ANSICON'] = '1'
|
37
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
41
38
|
ensure
|
42
39
|
ENV['ANSICON'] = term
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
46
|
-
it
|
43
|
+
it 'does not colorize tty processes running in dumb terminals by default' do
|
47
44
|
begin
|
48
45
|
stub_tty!
|
49
|
-
term
|
50
|
-
|
46
|
+
term = ENV['TERM']
|
47
|
+
ENV['TERM'] = 'dumb'
|
48
|
+
expect(@arr.ai(multiline: false)).to eq(PLAIN)
|
51
49
|
ensure
|
52
50
|
ENV['TERM'] = term
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
56
|
-
it
|
54
|
+
it 'does not colorize subprocesses by default' do
|
57
55
|
begin
|
58
56
|
stub_tty! false
|
59
|
-
expect(@arr.ai(:
|
57
|
+
expect(@arr.ai(multiline: false)).to eq(PLAIN)
|
60
58
|
ensure
|
61
59
|
stub_tty!
|
62
60
|
end
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
66
|
-
describe
|
64
|
+
describe 'forced colors override' do
|
67
65
|
before do
|
68
66
|
AwesomePrint.force_colors!
|
69
67
|
end
|
70
|
-
|
71
|
-
it
|
68
|
+
|
69
|
+
it 'still colorizes tty processes' do
|
72
70
|
stub_tty!
|
73
|
-
expect(@arr.ai(:
|
71
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
74
72
|
end
|
75
73
|
|
76
74
|
it "colorizes processes with ENV['ANSICON'] set to 0" do
|
77
75
|
begin
|
78
76
|
stub_tty!
|
79
|
-
term
|
80
|
-
|
77
|
+
term = ENV['ANSICON']
|
78
|
+
ENV['ANSICON'] = '1'
|
79
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
81
80
|
ensure
|
82
81
|
ENV['ANSICON'] = term
|
83
82
|
end
|
84
83
|
end
|
85
|
-
|
86
|
-
it
|
84
|
+
|
85
|
+
it 'colorizes dumb terminals' do
|
87
86
|
begin
|
88
87
|
stub_tty!
|
89
|
-
term
|
90
|
-
|
88
|
+
term = ENV['TERM']
|
89
|
+
ENV['TERM'] = 'dumb'
|
90
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
91
91
|
ensure
|
92
92
|
ENV['TERM'] = term
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
it
|
96
|
+
it 'colorizes subprocess' do
|
97
97
|
begin
|
98
98
|
stub_tty! false
|
99
|
-
expect(@arr.ai(:
|
99
|
+
expect(@arr.ai(multiline: false)).to eq(COLORIZED)
|
100
100
|
ensure
|
101
101
|
stub_tty!
|
102
102
|
end
|