amazing_print 1.6.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -2
  3. data/README.md +2 -2
  4. data/lib/amazing_print/core_ext/awesome_method_array.rb +2 -2
  5. data/lib/amazing_print/ext/active_record.rb +32 -2
  6. data/lib/amazing_print/ext/mongo_mapper.rb +2 -2
  7. data/lib/amazing_print/ext/nobrainer.rb +2 -2
  8. data/lib/amazing_print/formatter.rb +1 -1
  9. data/lib/amazing_print/formatters/base_formatter.rb +7 -3
  10. data/lib/amazing_print/formatters/hash_formatter.rb +29 -9
  11. data/lib/amazing_print/formatters/mswin_helper.rb +4 -4
  12. data/lib/amazing_print/formatters/object_formatter.rb +2 -2
  13. data/lib/amazing_print/formatters/struct_formatter.rb +2 -2
  14. data/lib/amazing_print/inspector.rb +3 -3
  15. data/lib/amazing_print/version.rb +1 -1
  16. metadata +6 -63
  17. data/.gitignore +0 -35
  18. data/Appraisals +0 -66
  19. data/Gemfile +0 -18
  20. data/Gemfile.lock +0 -94
  21. data/LICENSE +0 -22
  22. data/Rakefile +0 -25
  23. data/spec/active_record_helper.rb +0 -43
  24. data/spec/colors_spec.rb +0 -120
  25. data/spec/core_ext/logger_spec.rb +0 -70
  26. data/spec/ext/action_controller_spec.rb +0 -40
  27. data/spec/ext/action_view_spec.rb +0 -24
  28. data/spec/ext/active_model_spec.rb +0 -37
  29. data/spec/ext/active_record_spec.rb +0 -302
  30. data/spec/ext/active_support_spec.rb +0 -37
  31. data/spec/ext/mongo_mapper_spec.rb +0 -265
  32. data/spec/ext/mongoid_spec.rb +0 -135
  33. data/spec/ext/nobrainer_spec.rb +0 -64
  34. data/spec/ext/nokogiri_spec.rb +0 -52
  35. data/spec/ext/ostruct_spec.rb +0 -24
  36. data/spec/ext/ripple_spec.rb +0 -53
  37. data/spec/ext/sequel_spec.rb +0 -45
  38. data/spec/formats_spec.rb +0 -795
  39. data/spec/methods_spec.rb +0 -520
  40. data/spec/misc_spec.rb +0 -206
  41. data/spec/objects_spec.rb +0 -225
  42. data/spec/sequel_helper.rb +0 -18
  43. data/spec/spec_helper.rb +0 -112
  44. data/spec/support/active_record_data/3_2_diana.txt +0 -24
  45. data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
  46. data/spec/support/active_record_data/3_2_multi.txt +0 -50
  47. data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
  48. data/spec/support/active_record_data/4_0_diana.txt +0 -98
  49. data/spec/support/active_record_data/4_0_multi.txt +0 -198
  50. data/spec/support/active_record_data/4_1_diana.txt +0 -97
  51. data/spec/support/active_record_data/4_1_multi.txt +0 -196
  52. data/spec/support/active_record_data/4_2_diana.txt +0 -109
  53. data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
  54. data/spec/support/active_record_data/4_2_multi.txt +0 -220
  55. data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
  56. data/spec/support/active_record_data/5_0_diana.txt +0 -105
  57. data/spec/support/active_record_data/5_0_multi.txt +0 -212
  58. data/spec/support/active_record_data/5_1_diana.txt +0 -104
  59. data/spec/support/active_record_data/5_1_multi.txt +0 -210
  60. data/spec/support/active_record_data/5_2_diana.txt +0 -104
  61. data/spec/support/active_record_data/5_2_multi.txt +0 -210
  62. data/spec/support/active_record_data/6_0_diana.txt +0 -104
  63. data/spec/support/active_record_data/6_0_multi.txt +0 -210
  64. data/spec/support/active_record_data/6_1_diana.txt +0 -109
  65. data/spec/support/active_record_data/6_1_multi.txt +0 -220
  66. data/spec/support/active_record_data/7_0_diana.txt +0 -110
  67. data/spec/support/active_record_data/7_0_multi.txt +0 -222
  68. data/spec/support/active_record_data.rb +0 -22
  69. data/spec/support/ext_verifier.rb +0 -46
  70. data/spec/support/mongoid_versions.rb +0 -24
  71. data/spec/support/rails_versions.rb +0 -62
data/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2010-2019 Michael Dvorkin
4
- Copyright (c) 2020 AmazingPrint
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
data/Rakefile DELETED
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
- require 'bundler/setup'
5
-
6
- require 'bundler'
7
- Bundler::GemHelper.install_tasks
8
-
9
- task :default do
10
- if ENV['BUNDLE_GEMFILE'] =~ /gemfiles/
11
- Rake::Task['spec'].invoke
12
- else
13
- Rake::Task['appraise'].invoke
14
- end
15
- end
16
-
17
- task :appraise do
18
- exec 'appraisal install && appraisal rake'
19
- end
20
-
21
- desc 'Run all amazing_print gem specs'
22
- task :spec do
23
- # Run plain rspec command without RSpec::Core::RakeTask overrides.
24
- exec 'rspec -c spec'
25
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if ExtVerifier.has_rails?
4
- # Required to use the column support
5
- module Rails
6
- def self.env
7
- {}
8
- end
9
- end
10
-
11
- # Establish connection to in-memory SQLite DB
12
- ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
13
-
14
- # Create the users table
15
- ActiveRecord::Migration.verbose = false
16
- ActiveRecord::Migration.create_table :users do |t|
17
- t.string :name
18
- t.integer :rank
19
- t.boolean :admin
20
- t.datetime :created_at
21
- end
22
-
23
- ActiveRecord::Migration.create_table :emails do |t|
24
- t.references :user
25
- t.string :email_address
26
- end
27
-
28
- # Create models
29
- class User < ActiveRecord::Base; has_many :emails; end
30
-
31
- class SubUser < User; end
32
-
33
- class Email < ActiveRecord::Base; belongs_to :user; end
34
-
35
- class TableFreeModel
36
- include ::ActiveModel::Validations
37
- attr_reader(:name)
38
-
39
- def attributes
40
- { 'name' => name }
41
- end
42
- end
43
- end
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