awesome_print 1.8.0 → 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ ]