amazing_print 1.6.0 → 1.7.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -2
  3. data/lib/amazing_print/ext/active_record.rb +32 -2
  4. data/lib/amazing_print/ext/nobrainer.rb +2 -2
  5. data/lib/amazing_print/formatters/base_formatter.rb +5 -1
  6. data/lib/amazing_print/formatters/hash_formatter.rb +29 -9
  7. data/lib/amazing_print/formatters/mswin_helper.rb +4 -4
  8. data/lib/amazing_print/formatters/object_formatter.rb +1 -1
  9. data/lib/amazing_print/formatters/struct_formatter.rb +1 -1
  10. data/lib/amazing_print/inspector.rb +1 -1
  11. data/lib/amazing_print/version.rb +1 -1
  12. metadata +6 -63
  13. data/.gitignore +0 -35
  14. data/Appraisals +0 -66
  15. data/Gemfile +0 -18
  16. data/Gemfile.lock +0 -94
  17. data/LICENSE +0 -22
  18. data/Rakefile +0 -25
  19. data/spec/active_record_helper.rb +0 -43
  20. data/spec/colors_spec.rb +0 -120
  21. data/spec/core_ext/logger_spec.rb +0 -70
  22. data/spec/ext/action_controller_spec.rb +0 -40
  23. data/spec/ext/action_view_spec.rb +0 -24
  24. data/spec/ext/active_model_spec.rb +0 -37
  25. data/spec/ext/active_record_spec.rb +0 -302
  26. data/spec/ext/active_support_spec.rb +0 -37
  27. data/spec/ext/mongo_mapper_spec.rb +0 -265
  28. data/spec/ext/mongoid_spec.rb +0 -135
  29. data/spec/ext/nobrainer_spec.rb +0 -64
  30. data/spec/ext/nokogiri_spec.rb +0 -52
  31. data/spec/ext/ostruct_spec.rb +0 -24
  32. data/spec/ext/ripple_spec.rb +0 -53
  33. data/spec/ext/sequel_spec.rb +0 -45
  34. data/spec/formats_spec.rb +0 -795
  35. data/spec/methods_spec.rb +0 -520
  36. data/spec/misc_spec.rb +0 -206
  37. data/spec/objects_spec.rb +0 -225
  38. data/spec/sequel_helper.rb +0 -18
  39. data/spec/spec_helper.rb +0 -112
  40. data/spec/support/active_record_data/3_2_diana.txt +0 -24
  41. data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
  42. data/spec/support/active_record_data/3_2_multi.txt +0 -50
  43. data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
  44. data/spec/support/active_record_data/4_0_diana.txt +0 -98
  45. data/spec/support/active_record_data/4_0_multi.txt +0 -198
  46. data/spec/support/active_record_data/4_1_diana.txt +0 -97
  47. data/spec/support/active_record_data/4_1_multi.txt +0 -196
  48. data/spec/support/active_record_data/4_2_diana.txt +0 -109
  49. data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
  50. data/spec/support/active_record_data/4_2_multi.txt +0 -220
  51. data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
  52. data/spec/support/active_record_data/5_0_diana.txt +0 -105
  53. data/spec/support/active_record_data/5_0_multi.txt +0 -212
  54. data/spec/support/active_record_data/5_1_diana.txt +0 -104
  55. data/spec/support/active_record_data/5_1_multi.txt +0 -210
  56. data/spec/support/active_record_data/5_2_diana.txt +0 -104
  57. data/spec/support/active_record_data/5_2_multi.txt +0 -210
  58. data/spec/support/active_record_data/6_0_diana.txt +0 -104
  59. data/spec/support/active_record_data/6_0_multi.txt +0 -210
  60. data/spec/support/active_record_data/6_1_diana.txt +0 -109
  61. data/spec/support/active_record_data/6_1_multi.txt +0 -220
  62. data/spec/support/active_record_data/7_0_diana.txt +0 -110
  63. data/spec/support/active_record_data/7_0_multi.txt +0 -222
  64. data/spec/support/active_record_data.rb +0 -22
  65. data/spec/support/ext_verifier.rb +0 -46
  66. data/spec/support/mongoid_versions.rb +0 -24
  67. data/spec/support/rails_versions.rb +0 -62
data/spec/colors_spec.rb DELETED
@@ -1,120 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Lint/ConstantDefinitionInBlock, Style/OptionalBooleanParameter
4
-
5
- require 'spec_helper'
6
-
7
- RSpec.describe 'AmazingPrint' do
8
- def stub_tty!(output = true, stream = $stdout)
9
- if output
10
- stream.instance_eval do
11
- def tty?
12
- true
13
- end
14
- end
15
- else
16
- stream.instance_eval do
17
- def tty?
18
- false
19
- end
20
- end
21
- end
22
- end
23
-
24
- describe 'colorization' do
25
- PLAIN = '[ 1, :two, "three", [ nil, [ true, false ] ] ]'
26
- 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 ] ] ]"
27
-
28
- before do
29
- ENV['TERM'] = 'xterm-colors'
30
- ENV.delete('ANSICON')
31
- @arr = [1, :two, 'three', [nil, [true, false]]]
32
- end
33
-
34
- describe 'default settings (no forced colors)' do
35
- before do
36
- AmazingPrint.force_colors! colors: false
37
- end
38
-
39
- it 'colorizes tty processes by default' do
40
- stub_tty!
41
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
42
- end
43
-
44
- it "colorizes processes with ENV['ANSICON'] by default" do
45
- stub_tty!
46
- term = ENV['ANSICON']
47
- ENV['ANSICON'] = '1'
48
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
49
- ensure
50
- ENV['ANSICON'] = term
51
- end
52
-
53
- it 'does not colorize tty processes running in dumb terminals by default' do
54
- stub_tty!
55
- term = ENV['TERM']
56
- ENV['TERM'] = 'dumb'
57
- expect(@arr.ai(multiline: false)).to eq(PLAIN)
58
- ensure
59
- ENV['TERM'] = term
60
- end
61
-
62
- it 'does not colorize subprocesses by default' do
63
- stub_tty! false
64
- expect(@arr.ai(multiline: false)).to eq(PLAIN)
65
- ensure
66
- stub_tty!
67
- end
68
- end
69
-
70
- describe 'forced colors override' do
71
- before do
72
- AmazingPrint.force_colors!
73
- end
74
-
75
- it 'still colorizes tty processes' do
76
- stub_tty!
77
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
78
- end
79
-
80
- it "colorizes processes with ENV['ANSICON'] set to 0" do
81
- stub_tty!
82
- term = ENV['ANSICON']
83
- ENV['ANSICON'] = '1'
84
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
85
- ensure
86
- ENV['ANSICON'] = term
87
- end
88
-
89
- it 'colorizes dumb terminals' do
90
- stub_tty!
91
- term = ENV['TERM']
92
- ENV['TERM'] = 'dumb'
93
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
94
- ensure
95
- ENV['TERM'] = term
96
- end
97
-
98
- it 'colorizes subprocess' do
99
- stub_tty! false
100
- expect(@arr.ai(multiline: false)).to eq(COLORIZED)
101
- ensure
102
- stub_tty!
103
- end
104
- end
105
- end
106
-
107
- describe 'AmazingPrint::Colors' do
108
- %i[gray red green yellow blue purple cyan white].each_with_index do |color, i|
109
- it "has #{color} color" do
110
- expect(AmazingPrint::Colors.public_send(color, color.to_s)).to eq("\e[1;#{i + 30}m#{color}\e[0m")
111
- end
112
-
113
- it "has #{color}ish color" do
114
- expect(AmazingPrint::Colors.public_send(:"#{color}ish", color.to_s)).to eq("\e[0;#{i + 30}m#{color}\e[0m")
115
- end
116
- end
117
- end
118
- end
119
-
120
- # rubocop:enable Lint/ConstantDefinitionInBlock, Style/OptionalBooleanParameter
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- require 'logger'
6
- require 'amazing_print/core_ext/logger'
7
-
8
- RSpec.describe 'AmazingPrint logging extensions' do
9
- subject(:logger) do
10
- Logger.new('/dev/null')
11
- rescue Errno::ENOENT
12
- Logger.new('nul')
13
- end
14
-
15
- let(:object) { double }
16
- let(:options) { { sort_keys: true } }
17
-
18
- describe 'ap method' do
19
- it 'awesome_inspects the given object' do
20
- expect(object).to receive(:ai)
21
- logger.ap object
22
- end
23
-
24
- it 'passes options to `ai`' do
25
- expect(object).to receive(:ai).with(options)
26
- logger.ap object, options
27
- end
28
-
29
- describe 'the log level' do
30
- before do
31
- AmazingPrint.defaults = {}
32
- end
33
-
34
- it 'fallbacks to the default :debug log level' do
35
- expect(logger).to receive(:debug)
36
- logger.ap nil
37
- end
38
-
39
- it 'uses the global user default if no level passed' do
40
- AmazingPrint.defaults = { log_level: :info }
41
- expect(logger).to receive(:info)
42
- logger.ap nil
43
- end
44
-
45
- it 'uses the passed in level' do
46
- expect(logger).to receive(:warn)
47
- logger.ap nil, :warn
48
- end
49
-
50
- it 'makes no difference if passed as a hash or a part of options' do
51
- expect(logger).to receive(:warn)
52
- logger.ap nil, { level: :warn }
53
- end
54
-
55
- context 'when given options' do
56
- it 'uses the default log level with the options' do
57
- expect(logger).to receive(:debug)
58
- expect(object).to receive(:ai).with(options)
59
- logger.ap object, options
60
- end
61
-
62
- it 'still uses the passed in level with options' do
63
- expect(logger).to receive(:warn)
64
- expect(object).to receive(:ai).with(options)
65
- logger.ap object, options.merge({ level: :warn })
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'AmazingPrint::ActionController', skip: -> { !ExtVerifier.has_rails? }.call do
6
- let(:inspector) { AmazingPrint::Inspector.new }
7
-
8
- context 'with unpermitted ActionController::Parameters' do
9
- let(:parameters) do
10
- ActionController::Parameters.new post: { id: 1, content: 'Some' }
11
- end
12
-
13
- it 'formats as an object' do
14
- expect(inspector.send(:awesome, parameters)).to match(
15
- /\A#?<ActionController::Parameters {"post"=>{"id"=>1, "content"=>"Some"}} permitted: false>\z/
16
- )
17
- end
18
- end
19
-
20
- context 'with permitted ActionController::Parameters' do
21
- let(:expected_output) do
22
- <<~OUTPUT
23
- {
24
- \e[0;33m"post"\e[0m\e[0;37m => \e[0m{
25
- \e[0;33m"id"\e[0m\e[0;37m => \e[0m\e[1;34m1\e[0m,
26
- \e[0;33m"content"\e[0m\e[0;37m => \e[0m\e[0;33m"Some"\e[0m
27
- }
28
- }
29
- OUTPUT
30
- .chomp
31
- end
32
- let(:parameters) do
33
- ActionController::Parameters.new post: { id: 1, content: 'Some' }
34
- end
35
-
36
- it 'formats as a hash' do
37
- expect(inspector.send(:awesome, parameters.permit!)).to eq expected_output
38
- end
39
- end
40
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'AmazingPrint ActionView extensions',
6
- skip: -> { !ExtVerifier.has_rails? || ActiveRecord::VERSION::STRING >= '6.1' }.call do
7
- before do
8
- @view = ActionView::Base.new
9
- end
10
-
11
- it "uses HTML and adds 'debug_dump' class to plain <pre> tag" do
12
- markup = rand
13
- expect(@view.ap(markup, plain: true)).to eq(%(<pre class="debug_dump">#{markup}</pre>))
14
- end
15
-
16
- it "uses HTML and adds 'debug_dump' class to colorized <pre> tag" do
17
- markup = ' &<hello>'
18
- expect(@view.ap(markup)).to eq('<pre class="debug_dump"><kbd style="color:brown">&quot; &amp;&lt;hello&gt;&quot;</kbd></pre>')
19
- end
20
-
21
- it 'uses HTML and does set output to HTML safe' do
22
- expect(@view.ap('<p>Hello World</p>')).to be_html_safe
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'active_record_helper'
5
-
6
- RSpec.describe 'ActiveModel::Errors formatting', skip: -> { !ExtVerifier.has_rails? }.call do
7
- before do
8
- @ap = AmazingPrint::Inspector.new(plain: true)
9
- end
10
-
11
- it 'formats active_model_errors properly' do
12
- model = TableFreeModel.new
13
- model.errors.add(:name, "can't be blank")
14
-
15
- out = @ap.awesome(model.errors)
16
-
17
- str = <<~ERRORS.strip
18
- #<ActiveModel::Errors:placeholder_id> {
19
- "name" => nil,
20
- :details => {
21
- :name => [
22
- [0] {
23
- :error => "can't be blank"
24
- }
25
- ]
26
- },
27
- :messages => {
28
- :name => [
29
- [0] "can't be blank"
30
- ]
31
- }
32
- }
33
- ERRORS
34
-
35
- expect(out).to be_similar_to(str)
36
- end
37
- end
@@ -1,302 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'active_record_helper'
5
-
6
- RSpec.describe 'AmazingPrint/ActiveRecord', skip: -> { !ExtVerifier.has_rails? }.call do
7
- describe 'ActiveRecord instance, attributes only (default)' do
8
- before do
9
- ActiveRecord::Base.default_timezone = :utc
10
- @diana = User.new(name: 'Diana', rank: 1, admin: false, created_at: '1992-10-10 12:30:00')
11
- @laura = User.new(name: 'Laura', rank: 2, admin: true, created_at: '2003-05-26 14:15:00')
12
- @ap = AmazingPrint::Inspector.new(plain: true, sort_keys: true)
13
- end
14
-
15
- it 'display single record' do
16
- out = @ap.awesome(@diana)
17
- str = <<~EOS.strip
18
- #<User:placeholder_id> {
19
- :admin => false,
20
- :created_at => ?,
21
- :id => nil,
22
- :name => "Diana",
23
- :rank => 1
24
- }
25
- EOS
26
- str.sub!('?', '1992-10-10 12:30:00 UTC')
27
- expect(out).to be_similar_to(str)
28
- end
29
-
30
- it 'display multiple records' do
31
- out = @ap.awesome([@diana, @laura])
32
- str = <<~EOS.strip
33
- [
34
- [0] #<User:placeholder_id> {
35
- :admin => false,
36
- :created_at => ??,
37
- :id => nil,
38
- :name => "Diana",
39
- :rank => 1
40
- },
41
- [1] #<User:placeholder_id> {
42
- :admin => true,
43
- :created_at => ?!,
44
- :id => nil,
45
- :name => "Laura",
46
- :rank => 2
47
- }
48
- ]
49
- EOS
50
- str.sub!('??', '1992-10-10 12:30:00 UTC')
51
- str.sub!('?!', '2003-05-26 14:15:00 UTC')
52
- expect(out).to be_similar_to(str)
53
- end
54
-
55
- it 'display multiple records on a relation' do
56
- @diana.save
57
- @laura.save
58
- out = @ap.awesome(User.all)
59
- str = <<~EOS.strip
60
- [
61
- [0] #<User:placeholder_id> {
62
- :admin => false,
63
- :created_at => ??,
64
- :id => 1,
65
- :name => "Diana",
66
- :rank => 1
67
- },
68
- [1] #<User:placeholder_id> {
69
- :admin => true,
70
- :created_at => ?!,
71
- :id => 2,
72
- :name => "Laura",
73
- :rank => 2
74
- }
75
- ]
76
- EOS
77
- str.sub!('??', '1992-10-10 12:30:00 UTC')
78
- str.sub!('?!', '2003-05-26 14:15:00 UTC')
79
- expect(out).to be_similar_to(str)
80
- end
81
- end
82
-
83
- describe 'Linked records (joins)' do
84
- before do
85
- @ap = AmazingPrint::Inspector.new(plain: true)
86
- end
87
-
88
- it 'shows the entire record' do
89
- e = Email.create(email_address: 'foo@bar.com')
90
- u = User.last
91
- u.emails << e
92
- email_record = User.joins(:emails).select('users.id, emails.email_address').last
93
- out = @ap.awesome(email_record)
94
- raw_object_string = <<~EOS.strip
95
- #<User:placeholder_id> {
96
- "id" => #{u.id},
97
- "email_address" => "#{e.email_address}"
98
- }
99
- EOS
100
- expect(out).to be_similar_to(raw_object_string)
101
- end
102
- end
103
-
104
- #------------------------------------------------------------------------------
105
- describe 'ActiveRecord instance (raw)' do
106
- before do
107
- ActiveRecord::Base.default_timezone = :utc
108
- @diana = User.new(name: 'Diana', rank: 1, admin: false, created_at: '1992-10-10 12:30:00')
109
- @laura = User.new(name: 'Laura', rank: 2, admin: true, created_at: '2003-05-26 14:15:00')
110
- @ap = AmazingPrint::Inspector.new(plain: true, sort_keys: true, raw: true)
111
- end
112
-
113
- it 'display single record' do
114
- out = @ap.awesome(@diana)
115
-
116
- raw_object_string =
117
- if activerecord_7_0?
118
- ActiveRecordData.raw_7_0_diana
119
- elsif activerecord_6_1?
120
- ActiveRecordData.raw_6_1_diana
121
- elsif activerecord_6_0?
122
- ActiveRecordData.raw_6_0_diana
123
- elsif activerecord_5_2?
124
- ActiveRecordData.raw_5_2_diana
125
- elsif activerecord_5_1?
126
- ActiveRecordData.raw_5_1_diana
127
- elsif activerecord_5_0?
128
- ActiveRecordData.raw_5_0_diana
129
- elsif activerecord_4_2?
130
- ActiveRecordData.raw_4_2_diana
131
- elsif activerecord_4_1?
132
- ActiveRecordData.raw_4_1_diana
133
- elsif activerecord_4_0?
134
- ActiveRecordData.raw_4_0_diana
135
- elsif activerecord_3_2?
136
- ActiveRecordData.raw_3_2_diana
137
- end
138
-
139
- if RUBY_PLATFORM == 'java' && !activerecord_6_1?
140
- raw_object_string.gsub!(
141
- 'ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer',
142
- 'ArJdbc::SQLite3::SQLite3Integer'
143
- )
144
- end
145
- raw_object_string.sub!('?', '1992-10-10 12:30:00')
146
- expect(out).to be_similar_to(raw_object_string)
147
- end
148
-
149
- it 'display multiple records' do
150
- out = @ap.awesome([@diana, @laura])
151
-
152
- raw_object_string =
153
- if activerecord_7_0?
154
- ActiveRecordData.raw_7_0_multi
155
- elsif activerecord_6_1?
156
- ActiveRecordData.raw_6_1_multi
157
- elsif activerecord_6_0?
158
- ActiveRecordData.raw_6_0_multi
159
- elsif activerecord_5_2?
160
- ActiveRecordData.raw_5_2_multi
161
- elsif activerecord_5_1?
162
- ActiveRecordData.raw_5_1_multi
163
- elsif activerecord_5_0?
164
- ActiveRecordData.raw_5_0_multi
165
- elsif activerecord_4_2?
166
- ActiveRecordData.raw_4_2_multi
167
- elsif activerecord_4_1?
168
- ActiveRecordData.raw_4_1_multi
169
- elsif activerecord_4_0?
170
- ActiveRecordData.raw_4_0_multi
171
- elsif activerecord_3_2?
172
- ActiveRecordData.raw_3_2_multi
173
- end
174
-
175
- if RUBY_PLATFORM == 'java' && !activerecord_6_1?
176
- raw_object_string.gsub!(
177
- 'ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer',
178
- 'ArJdbc::SQLite3::SQLite3Integer'
179
- )
180
- end
181
- raw_object_string.sub!('?', '1992-10-10 12:30:00')
182
- raw_object_string.sub!('?', '2003-05-26 14:15:00')
183
- expect(out).to be_similar_to(raw_object_string)
184
- end
185
- end
186
-
187
- #------------------------------------------------------------------------------
188
- describe 'ActiveRecord class' do
189
- before do
190
- @ap = AmazingPrint::Inspector.new(plain: true)
191
- end
192
-
193
- it 'prints the class' do
194
- expect(@ap.awesome(User)).to eq <<~EOS.strip
195
- class User < ActiveRecord::Base {
196
- :id => :integer,
197
- :name => :string,
198
- :rank => :integer,
199
- :admin => :boolean,
200
- :created_at => :datetime
201
- }
202
- EOS
203
- end
204
-
205
- it 'prints the class for non-direct subclasses of ActiveRecord::Base' do
206
- out = @ap.awesome(SubUser)
207
- expect(out).to eq <<~EOS.strip
208
- class SubUser < User {
209
- :id => :integer,
210
- :name => :string,
211
- :rank => :integer,
212
- :admin => :boolean,
213
- :created_at => :datetime
214
- }
215
- EOS
216
- end
217
-
218
- it 'prints ActiveRecord::Base objects (ex. ancestors)' do
219
- expect { @ap.awesome(User.ancestors) }.not_to raise_error
220
- end
221
-
222
- it 'prints valid HTML for subclasses' do
223
- @ap = AmazingPrint::Inspector.new(html: true)
224
- expect(@ap.awesome(SubUser)).to match('SubUser &lt; User')
225
- end
226
- end
227
-
228
- #------------------------------------------------------------------------------
229
- describe 'ActiveRecord methods formatting' do
230
- before do
231
- @ap = AmazingPrint::Inspector.new(plain: true)
232
- end
233
-
234
- it 'formats class methods properly' do
235
- # spec 1
236
- out = @ap.awesome(User.methods.grep(/first/))
237
-
238
- if ActiveRecord::VERSION::STRING >= '3.2'
239
- if RUBY_PLATFORM == 'java'
240
- expect(out).to match(
241
- /\s+first\(\*args,\s&block\)\s+#<Class:\w+>\s+\(ActiveRecord::Querying\)/
242
- )
243
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.1.0')
244
- expect(out).to match(
245
- /\s*first\(\*(\*|args),\s+\?,\s+&(&|block)\)\s+#<Class:User> \(ActiveRecord::Querying\)/
246
- )
247
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
248
- expect(out).to match(
249
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+#<Class:User> \(ActiveRecord::Querying\)/
250
- )
251
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
252
- expect(out).to match(
253
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+User/
254
- )
255
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6.7')
256
- expect(out).to match(
257
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+#<Class:ActiveRecord::Base> \(ActiveRecord::Querying\)/
258
- )
259
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4')
260
- expect(out).to match(/\sfirst\(\*arg.*?\)\s+User/)
261
- end
262
- else
263
- expect(out).to match(/\sfirst\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
264
- end
265
-
266
- # spec 2
267
- out = @ap.awesome(User.methods.grep(/primary_key/))
268
- if RUBY_PLATFORM == 'java'
269
- expect(out).to match(
270
- /\sprimary_key\(.*?\)\s+#<Class:\w+>\s\(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/
271
- )
272
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
273
- expect(out).to match(/\sprimary_key\(.*?\)\s+#<Class:User> \(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/)
274
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6.7') && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
275
- expect(out).to match(/\sprimary_key\(.*?\)\s+#<Class:ActiveRecord::Base> \(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/)
276
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4') || Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
277
- expect(out).to match(/\sprimary_key\(.*?\)\s+User/)
278
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
279
- expect(out).to match(
280
- /\sprimary_key\(.*?\)\s+.+Class.+\(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/
281
- )
282
- end
283
-
284
- # spec 3
285
- out = @ap.awesome(User.methods.grep(/validate/))
286
-
287
- if ActiveRecord::VERSION::MAJOR < 3
288
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
289
- elsif RUBY_PLATFORM == 'java'
290
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+#<Class:\w+> \(ActiveModel::Validations::ClassMethods\)/)
291
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
292
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+#<Class:User> \(ActiveModel::Validations::ClassMethods\)/)
293
- elsif (Gem::Version.new('2.6.7')..Gem::Version.new('2.7.1')).cover? Gem::Version.new(RUBY_VERSION)
294
- expect(out).to match(
295
- /\svalidate\(\*args.*?\)\s+#<Class:ActiveRecord::Base> \(ActiveModel::Validations::ClassMethods\)/
296
- )
297
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4') || Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
298
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+User/)
299
- end
300
- end
301
- end
302
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'AmazingPrint::ActiveSupport', skip: -> { !ExtVerifier.has_rails? }.call do
6
- let(:expected_ar_time_str) do
7
- if activerecord_6_1? || activerecord_7_0?
8
- '15:30:45.000000000'
9
- else
10
- '15:30:45'
11
- end
12
- end
13
-
14
- before do
15
- @ap = AmazingPrint::Inspector.new
16
- end
17
-
18
- it 'formats ActiveSupport::TimeWithZone as regular Time' do
19
- Time.zone = 'Eastern Time (US & Canada)'
20
- time = Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone
21
- expect(@ap.send(:awesome, time))
22
- .to eq("\e[0;32mSat, 10 Feb 2007 #{expected_ar_time_str} EST -05:00\e[0m")
23
- end
24
-
25
- it 'formats HashWithIndifferentAccess as regular Hash' do
26
- hash = HashWithIndifferentAccess.new({ hello: 'world' })
27
- expect(@ap.send(:awesome, hash)).to eq("{\n \e[0;33m\"hello\"\e[0m\e[0;37m => \e[0m\e[0;33m\"world\"\e[0m\n}")
28
- end
29
-
30
- # ActiveSupport sticks in instance variables to the date object. Make sure
31
- # we ignore that and format Date instance as regular date.
32
- it 'formates Date object as date' do
33
- date = Date.new(2003, 5, 26)
34
- expect(date.ai(plain: true)).to eq('Mon, 26 May 2003')
35
- expect(date.ai).to eq("\e[0;32mMon, 26 May 2003\e[0m")
36
- end
37
- end