awesome_print 1.8.0 → 1.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/Appraisals +43 -44
- data/CHANGELOG.md +20 -2
- data/CONTRIBUTING.md +1 -0
- data/LICENSE +16 -19
- data/README.md +43 -8
- data/awesome_print.gemspec +33 -0
- data/init.rb +1 -0
- data/lib/awesome_print/custom_defaults.rb +1 -1
- data/lib/awesome_print/ext/active_record.rb +26 -1
- data/lib/awesome_print/formatter.rb +20 -12
- data/lib/awesome_print/formatters/array_formatter.rb +2 -2
- data/lib/awesome_print/formatters/base_formatter.rb +3 -3
- data/lib/awesome_print/formatters/hash_formatter.rb +2 -2
- data/lib/awesome_print/formatters/object_formatter.rb +5 -2
- data/lib/awesome_print/inspector.rb +6 -3
- data/lib/awesome_print/version.rb +1 -1
- data/spec/ext/action_view_spec.rb +5 -2
- data/spec/ext/active_record_spec.rb +57 -49
- data/spec/ext/active_support_spec.rb +5 -1
- data/spec/ext/mongoid_spec.rb +2 -39
- data/spec/formats_spec.rb +4 -4
- data/spec/methods_spec.rb +10 -2
- data/spec/misc_spec.rb +25 -18
- data/spec/objects_spec.rb +49 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/active_record_data/5_1_diana.txt +104 -0
- data/spec/support/active_record_data/5_1_multi.txt +210 -0
- data/spec/support/active_record_data/5_2_diana.txt +104 -0
- data/spec/support/active_record_data/5_2_multi.txt +210 -0
- data/spec/support/active_record_data/6_0_diana.txt +104 -0
- data/spec/support/active_record_data/6_0_multi.txt +210 -0
- data/spec/support/active_record_data/6_1_diana.txt +109 -0
- data/spec/support/active_record_data/6_1_multi.txt +220 -0
- data/spec/support/mongoid_versions.rb +10 -6
- data/spec/support/rails_versions.rb +20 -0
- metadata +45 -56
@@ -11,7 +11,7 @@ module AwesomePrint
|
|
11
11
|
|
12
12
|
attr_reader :inspector, :options
|
13
13
|
|
14
|
-
|
14
|
+
CORE_FORMATTERS = [:array, :bigdecimal, :class, :dir, :file, :hash, :method, :rational, :set, :struct, :unboundmethod]
|
15
15
|
|
16
16
|
def initialize(inspector)
|
17
17
|
@inspector = inspector
|
@@ -34,7 +34,7 @@ module AwesomePrint
|
|
34
34
|
# directory for custom formatters that ship with awesome_print.
|
35
35
|
#------------------------------------------------------------------------------
|
36
36
|
def cast(object, type)
|
37
|
-
|
37
|
+
CORE_FORMATTERS.include?(type) ? type : :self
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
@@ -106,21 +106,29 @@ module AwesomePrint
|
|
106
106
|
|
107
107
|
# Utility methods.
|
108
108
|
#------------------------------------------------------------------------------
|
109
|
+
|
110
|
+
# A class (ex. `Net::HTTP.Get`) might have `attr_reader :method` accessor
|
111
|
+
# which causes `object.method(:to_hash)` throw `ArgumentError (wrong number
|
112
|
+
# of arguments (given 1, expected 0))`. The following tries to avoid that.
|
113
|
+
def has_method_accessor?(object)
|
114
|
+
!object.method(:method)
|
115
|
+
rescue ArgumentError
|
116
|
+
true
|
117
|
+
end
|
118
|
+
|
109
119
|
def convert_to_hash(object)
|
110
|
-
if
|
111
|
-
|
112
|
-
end
|
120
|
+
return nil if has_method_accessor?(object)
|
121
|
+
return nil if !object.respond_to?(:to_hash) || object.method(:to_hash).arity != 0
|
113
122
|
|
114
|
-
if
|
115
|
-
|
116
|
-
|
123
|
+
# ActionController::Parameters will raise if they are not yet permitted
|
124
|
+
# and we try to convert to hash.
|
125
|
+
# https://api.rubyonrails.org/classes/ActionController/Parameters.html
|
126
|
+
return nil if object.respond_to?(:permitted?) && !object.permitted?
|
117
127
|
|
118
128
|
hash = object.to_hash
|
119
|
-
if !hash.respond_to?(:keys) || !hash.respond_to?(
|
120
|
-
return nil
|
121
|
-
end
|
129
|
+
return nil if !hash.respond_to?(:keys) || !hash.respond_to?(:[])
|
122
130
|
|
123
|
-
|
131
|
+
hash
|
124
132
|
end
|
125
133
|
end
|
126
134
|
end
|
@@ -12,7 +12,7 @@ module AwesomePrint
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def format
|
15
|
-
if array.
|
15
|
+
if array.length.zero?
|
16
16
|
'[]'
|
17
17
|
elsif methods_array?
|
18
18
|
methods_array
|
@@ -31,7 +31,7 @@ module AwesomePrint
|
|
31
31
|
if options[:multiline]
|
32
32
|
multiline_array
|
33
33
|
else
|
34
|
-
|
34
|
+
"[ #{array.map { |item| inspector.awesome(item) }.join(', ')} ]"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -90,7 +90,7 @@ module AwesomePrint
|
|
90
90
|
# #<Method: User(id: integer, username: string)(ActiveRecord::Base).current>
|
91
91
|
# #<UnboundMethod: Hello#world>
|
92
92
|
#
|
93
|
-
if method.to_s =~ /(Unbound)*Method: (
|
93
|
+
if method.to_s =~ /(Unbound)*Method: (.*?)[#\.]/
|
94
94
|
unbound = $1 && '(unbound)'
|
95
95
|
klass = $2
|
96
96
|
if klass && klass =~ /(\(\w+:\s.*?\))/ # Is this ActiveRecord-style class?
|
@@ -109,8 +109,8 @@ module AwesomePrint
|
|
109
109
|
inspector.current_indentation
|
110
110
|
end
|
111
111
|
|
112
|
-
def indented
|
113
|
-
inspector.increase_indentation(&
|
112
|
+
def indented(&block)
|
113
|
+
inspector.increase_indentation(&block)
|
114
114
|
end
|
115
115
|
|
116
116
|
def indent
|
@@ -32,7 +32,7 @@ module AwesomePrint
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def multiline_hash
|
35
|
-
"{\n"
|
35
|
+
["{\n", printable_hash.join(",\n"), "\n#{outdent}}"].join
|
36
36
|
end
|
37
37
|
|
38
38
|
def simple_hash
|
@@ -73,7 +73,7 @@ module AwesomePrint
|
|
73
73
|
|
74
74
|
keys.map! do |key|
|
75
75
|
plain_single_line do
|
76
|
-
[inspector.awesome(key), hash[key]]
|
76
|
+
[String.new(inspector.awesome(key)), hash[key]]
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -22,7 +22,7 @@ module AwesomePrint
|
|
22
22
|
object.respond_to?(property) ? :reader : nil
|
23
23
|
end
|
24
24
|
if accessor
|
25
|
-
["attr_#{accessor} :#{property}", var]
|
25
|
+
[String.new("attr_#{accessor} :#{property}"), var]
|
26
26
|
else
|
27
27
|
[var.to_s, var]
|
28
28
|
end
|
@@ -60,7 +60,10 @@ module AwesomePrint
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def awesome_instance
|
63
|
-
|
63
|
+
str = String.new
|
64
|
+
str << object.send(options[:class_name]).to_s
|
65
|
+
str << ":0x%08x" % (object.__id__ * 2) if options[:object_id]
|
66
|
+
str
|
64
67
|
end
|
65
68
|
|
66
69
|
def left_aligned
|
@@ -23,6 +23,8 @@ module AwesomePrint
|
|
23
23
|
sort_vars: true, # Sort instance variables.
|
24
24
|
limit: false, # Limit arrays & hashes. Accepts bool or int.
|
25
25
|
ruby19_syntax: false, # Use Ruby 1.9 hash syntax in output.
|
26
|
+
class_name: :class, # Method used to get Instance class name.
|
27
|
+
object_id: true, # Show object_id.
|
26
28
|
color: {
|
27
29
|
args: :pale,
|
28
30
|
array: :white,
|
@@ -31,6 +33,7 @@ module AwesomePrint
|
|
31
33
|
date: :greenish,
|
32
34
|
falseclass: :red,
|
33
35
|
fixnum: :blue,
|
36
|
+
integer: :blue,
|
34
37
|
float: :blue,
|
35
38
|
hash: :pale,
|
36
39
|
keyword: :cyan,
|
@@ -59,8 +62,8 @@ module AwesomePrint
|
|
59
62
|
indentator.indentation
|
60
63
|
end
|
61
64
|
|
62
|
-
def increase_indentation
|
63
|
-
indentator.indent(&
|
65
|
+
def increase_indentation(&block)
|
66
|
+
indentator.indent(&block)
|
64
67
|
end
|
65
68
|
|
66
69
|
# Dispatcher that detects data nesting and invokes object-aware formatter.
|
@@ -160,7 +163,7 @@ module AwesomePrint
|
|
160
163
|
load_dotfile
|
161
164
|
merge_options!(AwesomePrint.defaults) if AwesomePrint.defaults.is_a?(Hash)
|
162
165
|
rescue => e
|
163
|
-
$stderr.puts "Could not load
|
166
|
+
$stderr.puts "Could not load '.aprc' from ENV['HOME']: #{e}"
|
164
167
|
end
|
165
168
|
end
|
166
169
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe 'AwesomePrint ActionView extensions', skip: -> { !ExtVerifier.has_rails? }.call do
|
4
|
-
|
5
4
|
before do
|
6
|
-
@view =
|
5
|
+
@view = if rails_6_1?
|
6
|
+
ActionView::Base.new(ActionView::LookupContext.new([]), {}, {})
|
7
|
+
else
|
8
|
+
ActionView::Base.new
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
12
|
it "uses HTML and adds 'debug_dump' class to plain <pre> tag" do
|
@@ -21,11 +21,11 @@ RSpec.describe 'AwesomePrint/ActiveRecord', skip: -> { !ExtVerifier.has_rails? }
|
|
21
21
|
:rank => 1
|
22
22
|
}
|
23
23
|
EOS
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
|
25
|
+
expect(RUBY_VERSION).to be >= '2.5'
|
26
|
+
|
27
|
+
str.sub!('?', '1992-10-10 12:30:00 UTC')
|
28
|
+
|
29
29
|
expect(out).to be_similar_to(str)
|
30
30
|
end
|
31
31
|
|
@@ -49,13 +49,10 @@ RSpec.describe 'AwesomePrint/ActiveRecord', skip: -> { !ExtVerifier.has_rails? }
|
|
49
49
|
}
|
50
50
|
]
|
51
51
|
EOS
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
str.sub!('??', '1992-10-10 12:30:00 UTC')
|
57
|
-
str.sub!('?!', '2003-05-26 14:15:00 UTC')
|
58
|
-
end
|
52
|
+
|
53
|
+
str.sub!('??', '1992-10-10 12:30:00 UTC')
|
54
|
+
str.sub!('?!', '2003-05-26 14:15:00 UTC')
|
55
|
+
|
59
56
|
expect(out).to be_similar_to(str)
|
60
57
|
end
|
61
58
|
|
@@ -81,13 +78,10 @@ RSpec.describe 'AwesomePrint/ActiveRecord', skip: -> { !ExtVerifier.has_rails? }
|
|
81
78
|
}
|
82
79
|
]
|
83
80
|
EOS
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
str.sub!('??', '1992-10-10 12:30:00 UTC')
|
89
|
-
str.sub!('?!', '2003-05-26 14:15:00 UTC')
|
90
|
-
end
|
81
|
+
|
82
|
+
str.sub!('??', '1992-10-10 12:30:00 UTC')
|
83
|
+
str.sub!('?!', '2003-05-26 14:15:00 UTC')
|
84
|
+
|
91
85
|
expect(out).to be_similar_to(str)
|
92
86
|
end
|
93
87
|
end
|
@@ -126,24 +120,24 @@ EOS
|
|
126
120
|
out = @ap.awesome(@diana)
|
127
121
|
|
128
122
|
raw_object_string =
|
129
|
-
if
|
123
|
+
if activerecord_6_1?
|
124
|
+
ActiveRecordData.raw_6_1_diana
|
125
|
+
elsif activerecord_6_0?
|
126
|
+
ActiveRecordData.raw_6_0_diana
|
127
|
+
elsif activerecord_5_2?
|
128
|
+
ActiveRecordData.raw_5_2_diana
|
129
|
+
elsif activerecord_5_1?
|
130
|
+
ActiveRecordData.raw_5_1_diana
|
131
|
+
elsif activerecord_5_0?
|
130
132
|
ActiveRecordData.raw_5_0_diana
|
131
133
|
elsif activerecord_4_2?
|
132
|
-
|
133
|
-
ActiveRecordData.raw_4_2_diana
|
134
|
-
else
|
135
|
-
ActiveRecordData.raw_4_2_diana_legacy
|
136
|
-
end
|
134
|
+
ActiveRecordData.raw_4_2_diana
|
137
135
|
elsif activerecord_4_1?
|
138
136
|
ActiveRecordData.raw_4_1_diana
|
139
137
|
elsif activerecord_4_0?
|
140
138
|
ActiveRecordData.raw_4_0_diana
|
141
139
|
elsif activerecord_3_2?
|
142
|
-
|
143
|
-
ActiveRecordData.raw_3_2_diana
|
144
|
-
else
|
145
|
-
ActiveRecordData.raw_3_2_diana_legacy
|
146
|
-
end
|
140
|
+
ActiveRecordData.raw_3_2_diana
|
147
141
|
end
|
148
142
|
raw_object_string.sub!('?', '1992-10-10 12:30:00')
|
149
143
|
expect(out).to be_similar_to(raw_object_string)
|
@@ -153,24 +147,24 @@ EOS
|
|
153
147
|
out = @ap.awesome([@diana, @laura])
|
154
148
|
|
155
149
|
raw_object_string =
|
156
|
-
if
|
150
|
+
if activerecord_6_1?
|
151
|
+
ActiveRecordData.raw_6_1_multi
|
152
|
+
elsif activerecord_6_0?
|
153
|
+
ActiveRecordData.raw_6_0_multi
|
154
|
+
elsif activerecord_5_2?
|
155
|
+
ActiveRecordData.raw_5_2_multi
|
156
|
+
elsif activerecord_5_1?
|
157
|
+
ActiveRecordData.raw_5_1_multi
|
158
|
+
elsif activerecord_5_0?
|
157
159
|
ActiveRecordData.raw_5_0_multi
|
158
160
|
elsif activerecord_4_2?
|
159
|
-
|
160
|
-
ActiveRecordData.raw_4_2_multi
|
161
|
-
else
|
162
|
-
ActiveRecordData.raw_4_2_multi_legacy
|
163
|
-
end
|
161
|
+
ActiveRecordData.raw_4_2_multi
|
164
162
|
elsif activerecord_4_1?
|
165
163
|
ActiveRecordData.raw_4_1_multi
|
166
164
|
elsif activerecord_4_0?
|
167
165
|
ActiveRecordData.raw_4_0_multi
|
168
166
|
elsif activerecord_3_2?
|
169
|
-
|
170
|
-
ActiveRecordData.raw_3_2_multi
|
171
|
-
else
|
172
|
-
ActiveRecordData.raw_3_2_multi_legacy
|
173
|
-
end
|
167
|
+
ActiveRecordData.raw_3_2_multi
|
174
168
|
end
|
175
169
|
raw_object_string.sub!('?', '1992-10-10 12:30:00')
|
176
170
|
raw_object_string.sub!('?', '2003-05-26 14:15:00')
|
@@ -224,29 +218,43 @@ class SubUser < User {
|
|
224
218
|
# spec 1
|
225
219
|
out = @ap.awesome(User.methods.grep(/first/))
|
226
220
|
|
227
|
-
if
|
228
|
-
|
229
|
-
|
221
|
+
if RUBY_VERSION >= '3.0.0'
|
222
|
+
expect(out).to match(/\sfirst\(\*\*,\s&&\)/)
|
223
|
+
elsif RUBY_VERSION >= '2.7.0'
|
224
|
+
if ActiveRecord::VERSION::STRING >= '3.2'
|
225
|
+
expect(out).to match(/\sfirst\(\*\*,\s&&\)\s+User/)
|
230
226
|
else
|
231
|
-
expect(out).to match(/\sfirst\(
|
227
|
+
expect(out).to match(/\sfirst\(\*\*,\s&&\)\s+User \(ActiveRecord::Base\)/)
|
232
228
|
end
|
233
229
|
else
|
234
|
-
|
230
|
+
if ActiveRecord::VERSION::STRING >= '3.2'
|
231
|
+
expect(out).to match(/\sfirst\(\*arg.*?\)\s+User/)
|
232
|
+
else
|
233
|
+
expect(out).to match(/\sfirst\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
|
234
|
+
end
|
235
235
|
end
|
236
236
|
|
237
237
|
# spec 2
|
238
238
|
out = @ap.awesome(User.methods.grep(/primary_key/))
|
239
|
-
|
239
|
+
if RUBY_VERSION >= '3.0.0'
|
240
|
+
expect(out).to match(/\sprimary_key\(.*?\)/)
|
241
|
+
else
|
242
|
+
expect(out).to match(/\sprimary_key\(.*?\)\s+User/)
|
243
|
+
end
|
240
244
|
|
241
245
|
# spec 3
|
242
246
|
out = @ap.awesome(User.methods.grep(/validate/))
|
243
|
-
|
244
247
|
if ActiveRecord::VERSION::MAJOR < 3
|
245
248
|
expect(out).to match(/\svalidate\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
|
246
249
|
else
|
247
|
-
|
250
|
+
if RUBY_VERSION >= '3.0.0'
|
251
|
+
expect(out).to match(/\svalidate\(\*arg.*?\)/)
|
252
|
+
else
|
253
|
+
expect(out).to match(/\svalidate\(\*arg.*?\)\s+User/)
|
254
|
+
end
|
248
255
|
end
|
249
256
|
|
250
257
|
end
|
251
258
|
end
|
252
259
|
end
|
260
|
+
|
@@ -8,7 +8,11 @@ RSpec.describe 'AwesomePrint::ActiveSupport', skip: -> { !ExtVerifier.has_rails?
|
|
8
8
|
it 'should format ActiveSupport::TimeWithZone as regular Time' do
|
9
9
|
Time.zone = 'Eastern Time (US & Canada)'
|
10
10
|
time = Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone
|
11
|
-
|
11
|
+
if activerecord_6_1?
|
12
|
+
expect(@ap.send(:awesome, time)).to eq("\e[0;32mSat, 10 Feb 2007 15:30:45.000000000 EST -05:00\e[0m")
|
13
|
+
else
|
14
|
+
expect(@ap.send(:awesome, time)).to eq("\e[0;32mSat, 10 Feb 2007 15:30:45 EST -05:00\e[0m")
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
it 'should format HashWithIndifferentAccess as regular Hash' do
|
data/spec/ext/mongoid_spec.rb
CHANGED
@@ -38,32 +38,13 @@ RSpec.describe 'AwesomePrint/Mongoid', skip: -> { !ExtVerifier.has_mongoid? }.ca
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should print the class' do
|
41
|
-
class_spec =
|
42
|
-
<<-EOS.strip
|
43
|
-
class MongoUser < Object {
|
44
|
-
:_id => :"moped/bson/object_id",
|
45
|
-
:_type => :string,
|
46
|
-
:first_name => :string,
|
47
|
-
:last_name => :string
|
48
|
-
}
|
49
|
-
EOS
|
50
|
-
elsif mongoid_3_1?
|
51
|
-
<<-EOS.strip
|
52
|
-
class MongoUser < Object {
|
53
|
-
:_id => :"moped/bson/object_id",
|
54
|
-
:first_name => :string,
|
55
|
-
:last_name => :string
|
56
|
-
}
|
57
|
-
EOS
|
58
|
-
elsif mongoid_4_0?
|
59
|
-
<<-EOS.strip
|
41
|
+
class_spec = <<-EOS.strip
|
60
42
|
class MongoUser < Object {
|
61
43
|
:_id => :"bson/object_id",
|
62
44
|
:first_name => :string,
|
63
45
|
:last_name => :string
|
64
46
|
}
|
65
47
|
EOS
|
66
|
-
end
|
67
48
|
|
68
49
|
expect(@ap.send(:awesome, MongoUser)).to eq class_spec
|
69
50
|
end
|
@@ -74,30 +55,12 @@ class MongoUser < Object {
|
|
74
55
|
field :last_attribute
|
75
56
|
end
|
76
57
|
|
77
|
-
class_spec =
|
78
|
-
<<-EOS.strip
|
79
|
-
class Chamelion < Object {
|
80
|
-
:_id => :"moped/bson/object_id",
|
81
|
-
:_type => :string,
|
82
|
-
:last_attribute => :object
|
83
|
-
}
|
84
|
-
EOS
|
85
|
-
elsif mongoid_3_1?
|
86
|
-
<<-EOS.strip
|
87
|
-
class Chamelion < Object {
|
88
|
-
:_id => :"moped/bson/object_id",
|
89
|
-
:last_attribute => :object
|
90
|
-
}
|
91
|
-
EOS
|
92
|
-
elsif mongoid_4_0?
|
93
|
-
<<-EOS.strip
|
58
|
+
class_spec = <<-EOS.strip
|
94
59
|
class Chamelion < Object {
|
95
60
|
:_id => :"bson/object_id",
|
96
61
|
:last_attribute => :object
|
97
62
|
}
|
98
63
|
EOS
|
99
|
-
end
|
100
|
-
|
101
64
|
|
102
65
|
expect(@ap.send(:awesome, Chamelion)).to eq class_spec
|
103
66
|
end
|