amazing_print 1.5.0 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -38
  3. data/README.md +2 -2
  4. data/lib/amazing_print/core_ext/awesome_method_array.rb +1 -1
  5. data/lib/amazing_print/custom_defaults.rb +7 -1
  6. data/lib/amazing_print/ext/active_record.rb +32 -2
  7. data/lib/amazing_print/ext/mongoid.rb +14 -2
  8. data/lib/amazing_print/ext/nobrainer.rb +2 -2
  9. data/lib/amazing_print/ext_loader.rb +27 -0
  10. data/lib/amazing_print/formatters/base_formatter.rb +12 -3
  11. data/lib/amazing_print/formatters/hash_formatter.rb +28 -11
  12. data/lib/amazing_print/formatters/mswin_helper.rb +4 -4
  13. data/lib/amazing_print/formatters/object_formatter.rb +1 -1
  14. data/lib/amazing_print/formatters/struct_formatter.rb +1 -1
  15. data/lib/amazing_print/inspector.rb +6 -3
  16. data/lib/amazing_print/version.rb +1 -1
  17. data/lib/amazing_print.rb +2 -8
  18. metadata +7 -61
  19. data/.gitignore +0 -35
  20. data/Appraisals +0 -50
  21. data/Gemfile +0 -15
  22. data/Gemfile.lock +0 -83
  23. data/LICENSE +0 -22
  24. data/Rakefile +0 -25
  25. data/spec/active_record_helper.rb +0 -43
  26. data/spec/colors_spec.rb +0 -120
  27. data/spec/core_ext/logger_spec.rb +0 -70
  28. data/spec/ext/action_controller_spec.rb +0 -40
  29. data/spec/ext/action_view_spec.rb +0 -24
  30. data/spec/ext/active_model_spec.rb +0 -37
  31. data/spec/ext/active_record_spec.rb +0 -298
  32. data/spec/ext/active_support_spec.rb +0 -37
  33. data/spec/ext/mongo_mapper_spec.rb +0 -265
  34. data/spec/ext/mongoid_spec.rb +0 -72
  35. data/spec/ext/nobrainer_spec.rb +0 -64
  36. data/spec/ext/nokogiri_spec.rb +0 -52
  37. data/spec/ext/ostruct_spec.rb +0 -24
  38. data/spec/ext/ripple_spec.rb +0 -53
  39. data/spec/ext/sequel_spec.rb +0 -45
  40. data/spec/formats_spec.rb +0 -792
  41. data/spec/methods_spec.rb +0 -520
  42. data/spec/misc_spec.rb +0 -206
  43. data/spec/objects_spec.rb +0 -225
  44. data/spec/sequel_helper.rb +0 -18
  45. data/spec/spec_helper.rb +0 -112
  46. data/spec/support/active_record_data/3_2_diana.txt +0 -24
  47. data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
  48. data/spec/support/active_record_data/3_2_multi.txt +0 -50
  49. data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
  50. data/spec/support/active_record_data/4_0_diana.txt +0 -98
  51. data/spec/support/active_record_data/4_0_multi.txt +0 -198
  52. data/spec/support/active_record_data/4_1_diana.txt +0 -97
  53. data/spec/support/active_record_data/4_1_multi.txt +0 -196
  54. data/spec/support/active_record_data/4_2_diana.txt +0 -109
  55. data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
  56. data/spec/support/active_record_data/4_2_multi.txt +0 -220
  57. data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
  58. data/spec/support/active_record_data/5_0_diana.txt +0 -105
  59. data/spec/support/active_record_data/5_0_multi.txt +0 -212
  60. data/spec/support/active_record_data/5_1_diana.txt +0 -104
  61. data/spec/support/active_record_data/5_1_multi.txt +0 -210
  62. data/spec/support/active_record_data/5_2_diana.txt +0 -104
  63. data/spec/support/active_record_data/5_2_multi.txt +0 -210
  64. data/spec/support/active_record_data/6_0_diana.txt +0 -104
  65. data/spec/support/active_record_data/6_0_multi.txt +0 -210
  66. data/spec/support/active_record_data/6_1_diana.txt +0 -109
  67. data/spec/support/active_record_data/6_1_multi.txt +0 -220
  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 -57
@@ -1,298 +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_6_1?
118
- ActiveRecordData.raw_6_1_diana
119
- elsif activerecord_6_0?
120
- ActiveRecordData.raw_6_0_diana
121
- elsif activerecord_5_2?
122
- ActiveRecordData.raw_5_2_diana
123
- elsif activerecord_5_1?
124
- ActiveRecordData.raw_5_1_diana
125
- elsif activerecord_5_0?
126
- ActiveRecordData.raw_5_0_diana
127
- elsif activerecord_4_2?
128
- ActiveRecordData.raw_4_2_diana
129
- elsif activerecord_4_1?
130
- ActiveRecordData.raw_4_1_diana
131
- elsif activerecord_4_0?
132
- ActiveRecordData.raw_4_0_diana
133
- elsif activerecord_3_2?
134
- ActiveRecordData.raw_3_2_diana
135
- end
136
-
137
- if RUBY_PLATFORM == 'java' && !activerecord_6_1?
138
- raw_object_string.gsub!(
139
- 'ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer',
140
- 'ArJdbc::SQLite3::SQLite3Integer'
141
- )
142
- end
143
- raw_object_string.sub!('?', '1992-10-10 12:30:00')
144
- expect(out).to be_similar_to(raw_object_string)
145
- end
146
-
147
- it 'display multiple records' do
148
- out = @ap.awesome([@diana, @laura])
149
-
150
- raw_object_string =
151
- if activerecord_6_1?
152
- ActiveRecordData.raw_6_1_multi
153
- elsif activerecord_6_0?
154
- ActiveRecordData.raw_6_0_multi
155
- elsif activerecord_5_2?
156
- ActiveRecordData.raw_5_2_multi
157
- elsif activerecord_5_1?
158
- ActiveRecordData.raw_5_1_multi
159
- elsif activerecord_5_0?
160
- ActiveRecordData.raw_5_0_multi
161
- elsif activerecord_4_2?
162
- ActiveRecordData.raw_4_2_multi
163
- elsif activerecord_4_1?
164
- ActiveRecordData.raw_4_1_multi
165
- elsif activerecord_4_0?
166
- ActiveRecordData.raw_4_0_multi
167
- elsif activerecord_3_2?
168
- ActiveRecordData.raw_3_2_multi
169
- end
170
-
171
- if RUBY_PLATFORM == 'java' && !activerecord_6_1?
172
- raw_object_string.gsub!(
173
- 'ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer',
174
- 'ArJdbc::SQLite3::SQLite3Integer'
175
- )
176
- end
177
- raw_object_string.sub!('?', '1992-10-10 12:30:00')
178
- raw_object_string.sub!('?', '2003-05-26 14:15:00')
179
- expect(out).to be_similar_to(raw_object_string)
180
- end
181
- end
182
-
183
- #------------------------------------------------------------------------------
184
- describe 'ActiveRecord class' do
185
- before do
186
- @ap = AmazingPrint::Inspector.new(plain: true)
187
- end
188
-
189
- it 'prints the class' do
190
- expect(@ap.awesome(User)).to eq <<~EOS.strip
191
- class User < ActiveRecord::Base {
192
- :id => :integer,
193
- :name => :string,
194
- :rank => :integer,
195
- :admin => :boolean,
196
- :created_at => :datetime
197
- }
198
- EOS
199
- end
200
-
201
- it 'prints the class for non-direct subclasses of ActiveRecord::Base' do
202
- out = @ap.awesome(SubUser)
203
- expect(out).to eq <<~EOS.strip
204
- class SubUser < User {
205
- :id => :integer,
206
- :name => :string,
207
- :rank => :integer,
208
- :admin => :boolean,
209
- :created_at => :datetime
210
- }
211
- EOS
212
- end
213
-
214
- it 'prints ActiveRecord::Base objects (ex. ancestors)' do
215
- expect { @ap.awesome(User.ancestors) }.not_to raise_error
216
- end
217
-
218
- it 'prints valid HTML for subclasses' do
219
- @ap = AmazingPrint::Inspector.new(html: true)
220
- expect(@ap.awesome(SubUser)).to match('SubUser &lt; User')
221
- end
222
- end
223
-
224
- #------------------------------------------------------------------------------
225
- describe 'ActiveRecord methods formatting' do
226
- before do
227
- @ap = AmazingPrint::Inspector.new(plain: true)
228
- end
229
-
230
- it 'formats class methods properly' do
231
- # spec 1
232
- out = @ap.awesome(User.methods.grep(/first/))
233
-
234
- if ActiveRecord::VERSION::STRING >= '3.2'
235
- if RUBY_PLATFORM == 'java'
236
- expect(out).to match(
237
- /\s+first\(\*args,\s&block\)\s+#<Class:\w+>\s+\(ActiveRecord::Querying\)/
238
- )
239
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.1.0')
240
- expect(out).to match(
241
- /\s*first\(\*(\*|args),\s+\?,\s+&(&|block)\)\s+#<Class:User> \(ActiveRecord::Querying\)/
242
- )
243
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
244
- expect(out).to match(
245
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+#<Class:User> \(ActiveRecord::Querying\)/
246
- )
247
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
248
- expect(out).to match(
249
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+User/
250
- )
251
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6.7')
252
- expect(out).to match(
253
- /\s*first\(\*(\*|args),\s+&(&|block)\)\s+#<Class:ActiveRecord::Base> \(ActiveRecord::Querying\)/
254
- )
255
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4')
256
- expect(out).to match(/\sfirst\(\*arg.*?\)\s+User/)
257
- end
258
- else
259
- expect(out).to match(/\sfirst\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
260
- end
261
-
262
- # spec 2
263
- out = @ap.awesome(User.methods.grep(/primary_key/))
264
- if RUBY_PLATFORM == 'java'
265
- expect(out).to match(
266
- /\sprimary_key\(.*?\)\s+#<Class:\w+>\s\(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/
267
- )
268
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
269
- expect(out).to match(/\sprimary_key\(.*?\)\s+#<Class:User> \(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/)
270
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6.7') && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
271
- expect(out).to match(/\sprimary_key\(.*?\)\s+#<Class:ActiveRecord::Base> \(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/)
272
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4') || Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
273
- expect(out).to match(/\sprimary_key\(.*?\)\s+User/)
274
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
275
- expect(out).to match(
276
- /\sprimary_key\(.*?\)\s+.+Class.+\(ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods\)/
277
- )
278
- end
279
-
280
- # spec 3
281
- out = @ap.awesome(User.methods.grep(/validate/))
282
-
283
- if ActiveRecord::VERSION::MAJOR < 3
284
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+User \(ActiveRecord::Base\)/)
285
- elsif RUBY_PLATFORM == 'java'
286
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+#<Class:\w+> \(ActiveModel::Validations::ClassMethods\)/)
287
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
288
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+#<Class:User> \(ActiveModel::Validations::ClassMethods\)/)
289
- elsif (Gem::Version.new('2.6.7')..Gem::Version.new('2.7.1')).cover? Gem::Version.new(RUBY_VERSION)
290
- expect(out).to match(
291
- /\svalidate\(\*args.*?\)\s+#<Class:ActiveRecord::Base> \(ActiveModel::Validations::ClassMethods\)/
292
- )
293
- elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.4') || Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.2')
294
- expect(out).to match(/\svalidate\(\*arg.*?\)\s+User/)
295
- end
296
- end
297
- end
298
- 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?
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 \"hello\"\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
@@ -1,265 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Lint/ConstantDefinitionInBlock
4
-
5
- require 'spec_helper'
6
-
7
- RSpec.describe 'AmazingPrint/MongoMapper', skip: -> { !ExtVerifier.has_mongo_mapper? }.call do
8
- if ExtVerifier.has_mongo_mapper?
9
- before :all do
10
- class MongoUser
11
- include MongoMapper::Document
12
-
13
- key :first_name, String
14
- key :last_name, String
15
- end
16
- end
17
-
18
- after :all do
19
- Object.instance_eval { remove_const :MongoUser }
20
- Object.instance_eval { remove_const :Chamelion }
21
- end
22
- end
23
-
24
- before do
25
- @ap = AmazingPrint::Inspector.new(plain: true, sort_keys: true)
26
- end
27
-
28
- describe 'with the raw option set to true' do
29
- # before { @ap.options[:raw] = true }
30
- before { @ap = AmazingPrint::Inspector.new(plain: true, sort_keys: true, raw: true) }
31
-
32
- it 'prints class instance' do
33
- user = MongoUser.new(first_name: 'Al', last_name: 'Capone')
34
-
35
- out = @ap.send(:awesome, user)
36
- .gsub(/#<Proc:.+?>/, 'amazing_print_PROC_STUB')
37
- .gsub(/BSON::ObjectId\('[\da-f]+?'\)/, "BSON::ObjectId('123456789')")
38
-
39
- str = if MongoMapper::Version >= '0.13'
40
- <<~EOS.strip
41
- #<MongoUser:placeholder_id
42
- @__mm_default_keys = [
43
- [0] #<MongoMapper::Plugins::Keys::Key:placeholder_id
44
- @dynamic = false,
45
- @embeddable = false,
46
- @has_default = true,
47
- @is_id = true,
48
- @typecast = nil,
49
- attr_accessor :accessors = [],
50
- attr_accessor :default = amazing_print_PROC_STUB,
51
- attr_accessor :ivar = :@_id,
52
- attr_accessor :name = "_id",
53
- attr_accessor :options = {
54
- :default => amazing_print_PROC_STUB
55
- },
56
- attr_accessor :type = ObjectId < Object
57
- >
58
- ],
59
- @__mm_keys = {
60
- "_id" => #<MongoMapper::Plugins::Keys::Key:placeholder_id
61
- @dynamic = false,
62
- @embeddable = false,
63
- @has_default = true,
64
- @is_id = true,
65
- @typecast = nil,
66
- attr_accessor :accessors = [],
67
- attr_accessor :default = amazing_print_PROC_STUB,
68
- attr_accessor :ivar = :@_id,
69
- attr_accessor :name = "_id",
70
- attr_accessor :options = {
71
- :default => amazing_print_PROC_STUB
72
- },
73
- attr_accessor :type = ObjectId < Object
74
- >,
75
- "first_name" => #<MongoMapper::Plugins::Keys::Key:placeholder_id
76
- @dynamic = false,
77
- @embeddable = false,
78
- @has_default = false,
79
- @is_id = false,
80
- @typecast = nil,
81
- attr_accessor :accessors = [],
82
- attr_accessor :ivar = :@first_name,
83
- attr_accessor :name = "first_name",
84
- attr_accessor :options = {},
85
- attr_accessor :type = String < Object
86
- >,
87
- "last_name" => #<MongoMapper::Plugins::Keys::Key:placeholder_id
88
- @dynamic = false,
89
- @embeddable = false,
90
- @has_default = false,
91
- @is_id = false,
92
- @typecast = nil,
93
- attr_accessor :accessors = [],
94
- attr_accessor :ivar = :@last_name,
95
- attr_accessor :name = "last_name",
96
- attr_accessor :options = {},
97
- attr_accessor :type = String < Object
98
- >
99
- },
100
- @__mm_pre_cast = {
101
- "first_name" => "Al",
102
- "last_name" => "Capone"
103
- },
104
- @_dynamic_attributes = {},
105
- @_new = true,
106
- attr_accessor :_id = BSON::ObjectId('123456789'),
107
- attr_accessor :attributes = nil,
108
- attr_accessor :first_name = "Al",
109
- attr_accessor :last_name = "Capone",
110
- attr_reader :changed_attributes = {
111
- "first_name" => nil,
112
- "last_name" => nil
113
- }
114
- >
115
- EOS
116
- else
117
- <<~EOS.strip
118
- #<MongoUser:placeholder_id
119
- @_new = true,
120
- attr_accessor :first_name = "Al",
121
- attr_accessor :last_name = "Capone",
122
- attr_reader :changed_attributes = {
123
- "first_name" => nil,
124
- "last_name" => nil
125
- },
126
- attr_reader :first_name_before_type_cast = "Al",
127
- attr_reader :last_name_before_type_cast = "Capone"
128
- >
129
- EOS
130
- end
131
- expect(out).to be_similar_to(str)
132
- end
133
-
134
- it 'prints the class' do
135
- expect(@ap.send(:awesome, MongoUser)).to eq <<~EOS.strip
136
- class MongoUser < Object {
137
- "_id" => :object_id,
138
- "first_name" => :string,
139
- "last_name" => :string
140
- }
141
- EOS
142
- end
143
-
144
- it 'prints the class when type is undefined' do
145
- class Chamelion
146
- include MongoMapper::Document
147
- key :last_attribute
148
- end
149
-
150
- expect(@ap.send(:awesome, Chamelion)).to eq <<~EOS.strip
151
- class Chamelion < Object {
152
- "_id" => :object_id,
153
- "last_attribute" => :undefined
154
- }
155
- EOS
156
- end
157
- end
158
-
159
- describe 'with associations' do
160
- if ExtVerifier.has_mongo_mapper?
161
- before :all do
162
- class Child
163
- include MongoMapper::EmbeddedDocument
164
- key :data
165
- end
166
-
167
- class Sibling
168
- include MongoMapper::Document
169
- key :title
170
- end
171
-
172
- class Parent
173
- include MongoMapper::Document
174
- key :name
175
-
176
- one :child
177
- one :sibling
178
- end
179
- end
180
- end
181
-
182
- describe 'with show associations turned off (default)' do
183
- it 'renders the class as normal' do
184
- expect(@ap.send(:awesome, Parent)).to eq <<~EOS.strip
185
- class Parent < Object {
186
- "_id" => :object_id,
187
- "name" => :undefined
188
- }
189
- EOS
190
- end
191
-
192
- it 'renders an instance as normal' do
193
- parent = Parent.new(name: 'test')
194
- out = @ap.send(:awesome, parent)
195
- str = <<~EOS.strip
196
- #<Parent:placeholder_id> {
197
- "_id" => placeholder_bson_id,
198
- "name" => "test"
199
- }
200
- EOS
201
- expect(out).to be_similar_to(str)
202
- end
203
- end
204
-
205
- describe 'with show associations turned on and inline embedded turned off' do
206
- before do
207
- @ap = AmazingPrint::Inspector.new(plain: true, mongo_mapper: { show_associations: true })
208
- end
209
-
210
- it 'renders the class with associations shown' do
211
- expect(@ap.send(:awesome, Parent)).to eq <<~EOS.strip
212
- class Parent < Object {
213
- "_id" => :object_id,
214
- "name" => :undefined,
215
- "child" => embeds one Child,
216
- "sibling" => one Sibling
217
- }
218
- EOS
219
- end
220
-
221
- it 'renders an instance with associations shown' do
222
- parent = Parent.new(name: 'test')
223
- out = @ap.send(:awesome, parent)
224
- str = <<~EOS.strip
225
- #<Parent:placeholder_id> {
226
- "_id" => placeholder_bson_id,
227
- "name" => "test",
228
- "child" => embeds one Child,
229
- "sibling" => one Sibling
230
- }
231
- EOS
232
- expect(out).to be_similar_to(str)
233
- end
234
- end
235
-
236
- describe 'with show associations turned on and inline embedded turned on' do
237
- before do
238
- @ap = AmazingPrint::Inspector.new plain: true,
239
- mongo_mapper: {
240
- show_associations: true,
241
- inline_embedded: true
242
- }
243
- end
244
-
245
- it 'renders an instance with associations shown and embeds there' do
246
- parent = Parent.new(name: 'test', child: Child.new(data: 5))
247
- out = @ap.send(:awesome, parent)
248
- str = <<~EOS.strip
249
- #<Parent:placeholder_id> {
250
- "_id" => placeholder_bson_id,
251
- "name" => "test",
252
- "child" => embedded #<Child:placeholder_id> {
253
- "_id" => placeholder_bson_id,
254
- "data" => 5
255
- },
256
- "sibling" => one Sibling
257
- }
258
- EOS
259
- expect(out).to be_similar_to(str)
260
- end
261
- end
262
- end
263
- end
264
-
265
- # rubocop:enable Lint/ConstantDefinitionInBlock
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Lint/ConstantDefinitionInBlock
4
-
5
- require 'spec_helper'
6
-
7
- RSpec.describe 'AmazingPrint/Mongoid', skip: -> { !ExtVerifier.has_mongoid? }.call do
8
- if ExtVerifier.has_mongoid?
9
- before :all do
10
- class MongoUser
11
- include Mongoid::Document
12
-
13
- field :first_name, type: String
14
- field :last_name, type: String
15
- end
16
- end
17
-
18
- after :all do
19
- Object.instance_eval { remove_const :MongoUser }
20
- Object.instance_eval { remove_const :Chamelion }
21
- end
22
- end
23
-
24
- before do
25
- @ap = AmazingPrint::Inspector.new plain: true, sort_keys: true
26
- end
27
-
28
- it 'prints class instance' do
29
- user = MongoUser.new first_name: 'Al', last_name: 'Capone'
30
- out = @ap.send :awesome, user
31
-
32
- object_id = user.id.inspect
33
- str = <<~EOS.strip
34
- #<MongoUser:placeholder_id> {
35
- :_id => #{object_id},
36
- :first_name => "Al",
37
- :last_name => "Capone"
38
- }
39
- EOS
40
- expect(out).to be_similar_to(str, { skip_bson: true })
41
- end
42
-
43
- it 'prints the class' do
44
- class_spec = <<~EOS.strip
45
- class MongoUser < Object {
46
- :_id => :"bson/object_id",
47
- :first_name => :string,
48
- :last_name => :string
49
- }
50
- EOS
51
-
52
- expect(@ap.send(:awesome, MongoUser)).to eq class_spec
53
- end
54
-
55
- it 'prints the class when type is undefined' do
56
- class Chamelion
57
- include Mongoid::Document
58
- field :last_attribute
59
- end
60
-
61
- class_spec = <<~EOS.strip
62
- class Chamelion < Object {
63
- :_id => :"bson/object_id",
64
- :last_attribute => :object
65
- }
66
- EOS
67
-
68
- expect(@ap.send(:awesome, Chamelion)).to eq class_spec
69
- end
70
- end
71
-
72
- # rubocop:enable Lint/ConstantDefinitionInBlock