awesome_print 1.8.0 → 1.9.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 (38) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/Appraisals +43 -44
  4. data/CHANGELOG.md +20 -2
  5. data/CONTRIBUTING.md +1 -0
  6. data/LICENSE +16 -19
  7. data/README.md +43 -8
  8. data/awesome_print.gemspec +33 -0
  9. data/init.rb +1 -0
  10. data/lib/awesome_print/custom_defaults.rb +1 -1
  11. data/lib/awesome_print/ext/active_record.rb +26 -1
  12. data/lib/awesome_print/formatter.rb +20 -12
  13. data/lib/awesome_print/formatters/array_formatter.rb +2 -2
  14. data/lib/awesome_print/formatters/base_formatter.rb +3 -3
  15. data/lib/awesome_print/formatters/hash_formatter.rb +2 -2
  16. data/lib/awesome_print/formatters/object_formatter.rb +5 -2
  17. data/lib/awesome_print/inspector.rb +6 -3
  18. data/lib/awesome_print/version.rb +1 -1
  19. data/spec/ext/action_view_spec.rb +5 -2
  20. data/spec/ext/active_record_spec.rb +57 -49
  21. data/spec/ext/active_support_spec.rb +5 -1
  22. data/spec/ext/mongoid_spec.rb +2 -39
  23. data/spec/formats_spec.rb +4 -4
  24. data/spec/methods_spec.rb +10 -2
  25. data/spec/misc_spec.rb +25 -18
  26. data/spec/objects_spec.rb +49 -0
  27. data/spec/spec_helper.rb +4 -2
  28. data/spec/support/active_record_data/5_1_diana.txt +104 -0
  29. data/spec/support/active_record_data/5_1_multi.txt +210 -0
  30. data/spec/support/active_record_data/5_2_diana.txt +104 -0
  31. data/spec/support/active_record_data/5_2_multi.txt +210 -0
  32. data/spec/support/active_record_data/6_0_diana.txt +104 -0
  33. data/spec/support/active_record_data/6_0_multi.txt +210 -0
  34. data/spec/support/active_record_data/6_1_diana.txt +109 -0
  35. data/spec/support/active_record_data/6_1_multi.txt +220 -0
  36. data/spec/support/mongoid_versions.rb +10 -6
  37. data/spec/support/rails_versions.rb +20 -0
  38. metadata +45 -56
data/spec/formats_spec.rb CHANGED
@@ -492,7 +492,7 @@ EOS
492
492
  describe 'File' do
493
493
  it 'should display a file (plain)' do
494
494
  File.open(__FILE__, 'r') do |f|
495
- expect(f.ai(plain: true)).to eq("#{f.inspect}\n" << `ls -alF #{f.path}`.chop)
495
+ expect(f.ai(plain: true)).to eq("#{f.inspect}\n#{`ls -alF #{f.path}`.chop}")
496
496
  end
497
497
  end
498
498
  end
@@ -501,7 +501,7 @@ EOS
501
501
  describe 'Dir' do
502
502
  it 'should display a direcory (plain)' do
503
503
  Dir.open(File.dirname(__FILE__)) do |d|
504
- expect(d.ai(plain: true)).to eq("#{d.inspect}\n" << `ls -alF #{d.path}`.chop)
504
+ expect(d.ai(plain: true)).to eq("#{d.inspect}\n#{`ls -alF #{d.path}`.chop}")
505
505
  end
506
506
  end
507
507
  end
@@ -694,7 +694,7 @@ EOS
694
694
  class My < File; end
695
695
 
696
696
  my = File.new('/dev/null') rescue File.new('nul')
697
- expect(my.ai(plain: true)).to eq("#{my.inspect}\n" << `ls -alF #{my.path}`.chop)
697
+ expect(my.ai(plain: true)).to eq("#{my.inspect}\n#{`ls -alF #{my.path}`.chop}")
698
698
  end
699
699
 
700
700
  it 'inherited from Dir should be displayed as Dir' do
@@ -702,7 +702,7 @@ EOS
702
702
 
703
703
  require 'tmpdir'
704
704
  my = My.new(Dir.tmpdir)
705
- expect(my.ai(plain: true)).to eq("#{my.inspect}\n" << `ls -alF #{my.path}`.chop)
705
+ expect(my.ai(plain: true)).to eq("#{my.inspect}\n#{`ls -alF #{my.path}`.chop}")
706
706
  end
707
707
 
708
708
  it 'should handle a class that defines its own #send method' do
data/spec/methods_spec.rb CHANGED
@@ -7,12 +7,20 @@ RSpec.describe 'Single method' do
7
7
 
8
8
  it 'plain: should handle a method with no arguments' do
9
9
  method = ''.method(:upcase)
10
- expect(method.ai(plain: true)).to eq('String#upcase()')
10
+ if RUBY_VERSION >= '2.4.0'
11
+ expect(method.ai(plain: true)).to eq('String#upcase(*arg1)')
12
+ else
13
+ expect(method.ai(plain: true)).to eq('String#upcase()')
14
+ end
11
15
  end
12
16
 
13
17
  it 'color: should handle a method with no arguments' do
14
18
  method = ''.method(:upcase)
15
- expect(method.ai).to eq("\e[1;33mString\e[0m#\e[0;35mupcase\e[0m\e[0;37m()\e[0m")
19
+ if RUBY_VERSION >= '2.4.0'
20
+ expect(method.ai).to eq("\e[1;33mString\e[0m#\e[0;35mupcase\e[0m\e[0;37m(*arg1)\e[0m")
21
+ else
22
+ expect(method.ai).to eq("\e[1;33mString\e[0m#\e[0;35mupcase\e[0m\e[0;37m()\e[0m")
23
+ end
16
24
  end
17
25
 
18
26
  it 'plain: should handle a method with one argument' do
data/spec/misc_spec.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'net/http'
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe 'AwesomePrint' do
@@ -72,6 +73,12 @@ RSpec.describe 'AwesomePrint' do
72
73
  end
73
74
  expect { weird.new.ai }.not_to raise_error
74
75
  end
76
+
77
+ it 'handles attr_reader :method' do
78
+ uri = URI.parse('https://hello.nx/world')
79
+ req = Net::HTTP::Get.new(uri)
80
+ expect(req.ai(plain: true)).to eq('#<Net::HTTP::Get GET>')
81
+ end
75
82
  end
76
83
 
77
84
  #------------------------------------------------------------------------------
@@ -88,23 +95,23 @@ RSpec.describe 'AwesomePrint' do
88
95
 
89
96
  it 'wraps multiline ap output with <pre> tag with colorized <kbd>' do
90
97
  markup = [1, :two, 'three']
91
- expect(markup.ai(html: true)).to eq <<-EOS.strip_heredoc.strip
92
- <pre>[
93
- <kbd style="color:white">[0] </kbd><kbd style="color:blue">1</kbd>,
94
- <kbd style="color:white">[1] </kbd><kbd style="color:darkcyan">:two</kbd>,
95
- <kbd style="color:white">[2] </kbd><kbd style="color:brown">&quot;three&quot;</kbd>
96
- ]</pre>
98
+ expect(markup.ai(html: true)).to eq <<-EOS.strip
99
+ <pre>[
100
+ <kbd style="color:white">[0] </kbd><kbd style="color:blue">1</kbd>,
101
+ <kbd style="color:white">[1] </kbd><kbd style="color:darkcyan">:two</kbd>,
102
+ <kbd style="color:white">[2] </kbd><kbd style="color:brown">&quot;three&quot;</kbd>
103
+ ]</pre>
97
104
  EOS
98
105
  end
99
106
 
100
107
  it 'wraps hash ap output with only an outer <pre> tag' do
101
108
  markup = [{ 'hello' => 'world' }]
102
- expect(markup.ai(html: true)).to eq <<-EOS.strip_heredoc.strip
103
- <pre>[
104
- <kbd style="color:white">[0] </kbd>{
105
- &quot;hello&quot;<kbd style="color:slategray"> =&gt; </kbd><kbd style="color:brown">&quot;world&quot;</kbd>
106
- }
107
- ]</pre>
109
+ expect(markup.ai(html: true)).to eq <<-EOS.strip
110
+ <pre>[
111
+ <kbd style="color:white">[0] </kbd>{
112
+ &quot;hello&quot;<kbd style="color:slategray"> =&gt; </kbd><kbd style="color:brown">&quot;world&quot;</kbd>
113
+ }
114
+ ]</pre>
108
115
  EOS
109
116
  end
110
117
 
@@ -130,12 +137,12 @@ RSpec.describe 'AwesomePrint' do
130
137
  AwesomePrint.defaults = { indent: -2, sort_keys: true }
131
138
  hash = { [0, 0, 255] => :yellow, :red => 'rgb(255, 0, 0)', 'magenta' => 'rgb(255, 0, 255)' }
132
139
  out = hash.ai(plain: true)
133
- expect(out).to eq <<-EOS.strip_heredoc.strip
134
- {
135
- [ 0, 0, 255 ] => :yellow,
136
- "magenta" => "rgb(255, 0, 255)",
137
- :red => "rgb(255, 0, 0)"
138
- }
140
+ expect(out).to eq <<-EOS.strip
141
+ {
142
+ [ 0, 0, 255 ] => :yellow,
143
+ "magenta" => "rgb(255, 0, 255)",
144
+ :red => "rgb(255, 0, 0)"
145
+ }
139
146
  EOS
140
147
  end
141
148
  end
data/spec/objects_spec.rb CHANGED
@@ -167,5 +167,54 @@ EOS
167
167
  expect(out).to be_similar_to(str)
168
168
  expect(hello.ai(plain: true, raw: false)).to eq(hello.inspect)
169
169
  end
170
+
171
+ it 'object_id' do
172
+ class Hello
173
+ def initialize
174
+ @abra = 1
175
+ @ca = 2
176
+ @dabra = 3
177
+ end
178
+ end
179
+
180
+ hello = Hello.new
181
+ out = hello.ai(plain: true, raw: true, object_id: false)
182
+ str = <<-EOS.strip
183
+ #<Hello
184
+ @abra = 1,
185
+ @ca = 2,
186
+ @dabra = 3
187
+ >
188
+ EOS
189
+ expect(out).to be_similar_to(str)
190
+ expect(hello.ai(plain: true, raw: false)).to eq(hello.inspect)
191
+ end
192
+
193
+ it 'class_name' do
194
+ class Hello
195
+ def initialize
196
+ @abra = 1
197
+ @ca = 2
198
+ @dabra = 3
199
+ end
200
+
201
+ def to_s
202
+ "CustomizedHello"
203
+ end
204
+ end
205
+
206
+ hello = Hello.new
207
+ out = hello.ai(plain: true, raw: true, class_name: :to_s)
208
+ str = <<-EOS.strip
209
+ #<CustomizedHello:placeholder_id
210
+ @abra = 1,
211
+ @ca = 2,
212
+ @dabra = 3
213
+ >
214
+ EOS
215
+ expect(out).to be_similar_to(str)
216
+ expect(hello.ai(plain: true, raw: false)).to eq(hello.inspect)
217
+ end
218
+
170
219
  end
171
220
  end
data/spec/spec_helper.rb CHANGED
@@ -15,8 +15,9 @@
15
15
  # $ gem install rspec -v=2.6.0
16
16
  #
17
17
 
18
- require 'simplecov'
19
- SimpleCov.start
18
+ # require 'simplecov'
19
+ # SimpleCov.start
20
+
20
21
  $LOAD_PATH.unshift(File.dirname(__FILE__))
21
22
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
23
 
@@ -36,6 +37,7 @@ ExtVerifier.require_dependencies!(
36
37
  )
37
38
  )
38
39
  require 'nokogiri'
40
+ require 'ostruct'
39
41
  require 'awesome_print'
40
42
 
41
43
  RSpec.configure do |config|
@@ -0,0 +1,104 @@
1
+ #<User:placeholder_id
2
+ @_start_transaction_state = {},
3
+ @aggregation_cache = {},
4
+ @association_cache = {},
5
+ @destroyed = false,
6
+ @marked_for_destruction = false,
7
+ @new_record = true,
8
+ @readonly = false,
9
+ @transaction_state = nil,
10
+ attr_accessor :attributes = #<ActiveRecord::AttributeSet:placeholder_id
11
+ @attributes = {
12
+ "admin" => #<ActiveRecord::Attribute::FromUser:placeholder_id
13
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
14
+ @original_attribute = nil,
15
+ attr_reader :name = "admin",
16
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
17
+ attr_reader :limit = nil,
18
+ attr_reader :precision = nil,
19
+ attr_reader :scale = nil
20
+ >,
21
+ attr_reader :value_before_type_cast = nil
22
+ >,
23
+ attr_reader :name = "admin",
24
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
25
+ attr_reader :limit = nil,
26
+ attr_reader :precision = nil,
27
+ attr_reader :scale = nil
28
+ >,
29
+ attr_reader :value_before_type_cast = false
30
+ >,
31
+ "created_at" => #<ActiveRecord::Attribute::FromUser:placeholder_id
32
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
33
+ @original_attribute = nil,
34
+ attr_reader :name = "created_at",
35
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
36
+ attr_reader :limit = nil,
37
+ attr_reader :precision = nil,
38
+ attr_reader :scale = nil
39
+ >,
40
+ attr_reader :value_before_type_cast = nil
41
+ >,
42
+ attr_reader :name = "created_at",
43
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
44
+ attr_reader :limit = nil,
45
+ attr_reader :precision = nil,
46
+ attr_reader :scale = nil
47
+ >,
48
+ attr_reader :value_before_type_cast = "1992-10-10 12:30:00"
49
+ >,
50
+ "id" => #<ActiveRecord::Attribute::FromDatabase:placeholder_id
51
+ @original_attribute = nil,
52
+ attr_reader :name = "id",
53
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
54
+ @range = -2147483648...2147483648,
55
+ attr_reader :limit = nil,
56
+ attr_reader :precision = nil,
57
+ attr_reader :scale = nil
58
+ >,
59
+ attr_reader :value_before_type_cast = nil
60
+ >,
61
+ "name" => #<ActiveRecord::Attribute::FromUser:placeholder_id
62
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
63
+ @original_attribute = nil,
64
+ attr_reader :name = "name",
65
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
66
+ attr_reader :limit = nil,
67
+ attr_reader :precision = nil,
68
+ attr_reader :scale = nil
69
+ >,
70
+ attr_reader :value_before_type_cast = nil
71
+ >,
72
+ attr_reader :name = "name",
73
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
74
+ attr_reader :limit = nil,
75
+ attr_reader :precision = nil,
76
+ attr_reader :scale = nil
77
+ >,
78
+ attr_reader :value_before_type_cast = "Diana"
79
+ >,
80
+ "rank" => #<ActiveRecord::Attribute::FromUser:placeholder_id
81
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
82
+ @original_attribute = nil,
83
+ attr_reader :name = "rank",
84
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
85
+ @range = -2147483648...2147483648,
86
+ attr_reader :limit = nil,
87
+ attr_reader :precision = nil,
88
+ attr_reader :scale = nil
89
+ >,
90
+ attr_reader :value_before_type_cast = nil
91
+ >,
92
+ attr_reader :name = "rank",
93
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
94
+ @range = -2147483648...2147483648,
95
+ attr_reader :limit = nil,
96
+ attr_reader :precision = nil,
97
+ attr_reader :scale = nil
98
+ >,
99
+ attr_reader :value_before_type_cast = 1
100
+ >
101
+ }
102
+ >,
103
+ attr_accessor :destroyed_by_association = nil
104
+ >
@@ -0,0 +1,210 @@
1
+ [
2
+ [0] #<User:placeholder_id
3
+ @_start_transaction_state = {},
4
+ @aggregation_cache = {},
5
+ @association_cache = {},
6
+ @destroyed = false,
7
+ @marked_for_destruction = false,
8
+ @new_record = true,
9
+ @readonly = false,
10
+ @transaction_state = nil,
11
+ attr_accessor :attributes = #<ActiveRecord::AttributeSet:placeholder_id
12
+ @attributes = {
13
+ "admin" => #<ActiveRecord::Attribute::FromUser:placeholder_id
14
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
15
+ @original_attribute = nil,
16
+ attr_reader :name = "admin",
17
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
18
+ attr_reader :limit = nil,
19
+ attr_reader :precision = nil,
20
+ attr_reader :scale = nil
21
+ >,
22
+ attr_reader :value_before_type_cast = nil
23
+ >,
24
+ attr_reader :name = "admin",
25
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
26
+ attr_reader :limit = nil,
27
+ attr_reader :precision = nil,
28
+ attr_reader :scale = nil
29
+ >,
30
+ attr_reader :value_before_type_cast = false
31
+ >,
32
+ "created_at" => #<ActiveRecord::Attribute::FromUser:placeholder_id
33
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
34
+ @original_attribute = nil,
35
+ attr_reader :name = "created_at",
36
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
37
+ attr_reader :limit = nil,
38
+ attr_reader :precision = nil,
39
+ attr_reader :scale = nil
40
+ >,
41
+ attr_reader :value_before_type_cast = nil
42
+ >,
43
+ attr_reader :name = "created_at",
44
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
45
+ attr_reader :limit = nil,
46
+ attr_reader :precision = nil,
47
+ attr_reader :scale = nil
48
+ >,
49
+ attr_reader :value_before_type_cast = "1992-10-10 12:30:00"
50
+ >,
51
+ "id" => #<ActiveRecord::Attribute::FromDatabase:placeholder_id
52
+ @original_attribute = nil,
53
+ attr_reader :name = "id",
54
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
55
+ @range = -2147483648...2147483648,
56
+ attr_reader :limit = nil,
57
+ attr_reader :precision = nil,
58
+ attr_reader :scale = nil
59
+ >,
60
+ attr_reader :value_before_type_cast = nil
61
+ >,
62
+ "name" => #<ActiveRecord::Attribute::FromUser:placeholder_id
63
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
64
+ @original_attribute = nil,
65
+ attr_reader :name = "name",
66
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
67
+ attr_reader :limit = nil,
68
+ attr_reader :precision = nil,
69
+ attr_reader :scale = nil
70
+ >,
71
+ attr_reader :value_before_type_cast = nil
72
+ >,
73
+ attr_reader :name = "name",
74
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
75
+ attr_reader :limit = nil,
76
+ attr_reader :precision = nil,
77
+ attr_reader :scale = nil
78
+ >,
79
+ attr_reader :value_before_type_cast = "Diana"
80
+ >,
81
+ "rank" => #<ActiveRecord::Attribute::FromUser:placeholder_id
82
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
83
+ @original_attribute = nil,
84
+ attr_reader :name = "rank",
85
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
86
+ @range = -2147483648...2147483648,
87
+ attr_reader :limit = nil,
88
+ attr_reader :precision = nil,
89
+ attr_reader :scale = nil
90
+ >,
91
+ attr_reader :value_before_type_cast = nil
92
+ >,
93
+ attr_reader :name = "rank",
94
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
95
+ @range = -2147483648...2147483648,
96
+ attr_reader :limit = nil,
97
+ attr_reader :precision = nil,
98
+ attr_reader :scale = nil
99
+ >,
100
+ attr_reader :value_before_type_cast = 1
101
+ >
102
+ }
103
+ >,
104
+ attr_accessor :destroyed_by_association = nil
105
+ >,
106
+ [1] #<User:placeholder_id
107
+ @_start_transaction_state = {},
108
+ @aggregation_cache = {},
109
+ @association_cache = {},
110
+ @destroyed = false,
111
+ @marked_for_destruction = false,
112
+ @new_record = true,
113
+ @readonly = false,
114
+ @transaction_state = nil,
115
+ attr_accessor :attributes = #<ActiveRecord::AttributeSet:placeholder_id
116
+ @attributes = {
117
+ "admin" => #<ActiveRecord::Attribute::FromUser:placeholder_id
118
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
119
+ @original_attribute = nil,
120
+ attr_reader :name = "admin",
121
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
122
+ attr_reader :limit = nil,
123
+ attr_reader :precision = nil,
124
+ attr_reader :scale = nil
125
+ >,
126
+ attr_reader :value_before_type_cast = nil
127
+ >,
128
+ attr_reader :name = "admin",
129
+ attr_reader :type = #<ActiveModel::Type::Boolean:placeholder_id
130
+ attr_reader :limit = nil,
131
+ attr_reader :precision = nil,
132
+ attr_reader :scale = nil
133
+ >,
134
+ attr_reader :value_before_type_cast = true
135
+ >,
136
+ "created_at" => #<ActiveRecord::Attribute::FromUser:placeholder_id
137
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
138
+ @original_attribute = nil,
139
+ attr_reader :name = "created_at",
140
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
141
+ attr_reader :limit = nil,
142
+ attr_reader :precision = nil,
143
+ attr_reader :scale = nil
144
+ >,
145
+ attr_reader :value_before_type_cast = nil
146
+ >,
147
+ attr_reader :name = "created_at",
148
+ attr_reader :type = #<ActiveRecord::Type::DateTime:placeholder_id
149
+ attr_reader :limit = nil,
150
+ attr_reader :precision = nil,
151
+ attr_reader :scale = nil
152
+ >,
153
+ attr_reader :value_before_type_cast = "2003-05-26 14:15:00"
154
+ >,
155
+ "id" => #<ActiveRecord::Attribute::FromDatabase:placeholder_id
156
+ @original_attribute = nil,
157
+ attr_reader :name = "id",
158
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
159
+ @range = -2147483648...2147483648,
160
+ attr_reader :limit = nil,
161
+ attr_reader :precision = nil,
162
+ attr_reader :scale = nil
163
+ >,
164
+ attr_reader :value_before_type_cast = nil
165
+ >,
166
+ "name" => #<ActiveRecord::Attribute::FromUser:placeholder_id
167
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
168
+ @original_attribute = nil,
169
+ attr_reader :name = "name",
170
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
171
+ attr_reader :limit = nil,
172
+ attr_reader :precision = nil,
173
+ attr_reader :scale = nil
174
+ >,
175
+ attr_reader :value_before_type_cast = nil
176
+ >,
177
+ attr_reader :name = "name",
178
+ attr_reader :type = #<ActiveModel::Type::String:placeholder_id
179
+ attr_reader :limit = nil,
180
+ attr_reader :precision = nil,
181
+ attr_reader :scale = nil
182
+ >,
183
+ attr_reader :value_before_type_cast = "Laura"
184
+ >,
185
+ "rank" => #<ActiveRecord::Attribute::FromUser:placeholder_id
186
+ @original_attribute = #<ActiveRecord::Attribute::FromDatabase:placeholder_id
187
+ @original_attribute = nil,
188
+ attr_reader :name = "rank",
189
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
190
+ @range = -2147483648...2147483648,
191
+ attr_reader :limit = nil,
192
+ attr_reader :precision = nil,
193
+ attr_reader :scale = nil
194
+ >,
195
+ attr_reader :value_before_type_cast = nil
196
+ >,
197
+ attr_reader :name = "rank",
198
+ attr_reader :type = #<ActiveModel::Type::Integer:placeholder_id
199
+ @range = -2147483648...2147483648,
200
+ attr_reader :limit = nil,
201
+ attr_reader :precision = nil,
202
+ attr_reader :scale = nil
203
+ >,
204
+ attr_reader :value_before_type_cast = 2
205
+ >
206
+ }
207
+ >,
208
+ attr_accessor :destroyed_by_association = nil
209
+ >
210
+ ]