amazing_print 1.0.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 (88) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +35 -0
  3. data/Appraisals +60 -0
  4. data/CHANGELOG.md +2 -0
  5. data/CONTRIBUTING.md +81 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +21 -0
  8. data/README.md +356 -0
  9. data/Rakefile +23 -0
  10. data/lib/amazing_print.rb +46 -0
  11. data/lib/amazing_print/colorize.rb +25 -0
  12. data/lib/amazing_print/core_ext/awesome_method_array.rb +82 -0
  13. data/lib/amazing_print/core_ext/class.rb +23 -0
  14. data/lib/amazing_print/core_ext/kernel.rb +25 -0
  15. data/lib/amazing_print/core_ext/logger.rb +21 -0
  16. data/lib/amazing_print/core_ext/method.rb +21 -0
  17. data/lib/amazing_print/core_ext/object.rb +23 -0
  18. data/lib/amazing_print/core_ext/string.rb +42 -0
  19. data/lib/amazing_print/custom_defaults.rb +57 -0
  20. data/lib/amazing_print/ext/action_view.rb +22 -0
  21. data/lib/amazing_print/ext/active_record.rb +103 -0
  22. data/lib/amazing_print/ext/active_support.rb +45 -0
  23. data/lib/amazing_print/ext/mongo_mapper.rb +125 -0
  24. data/lib/amazing_print/ext/mongoid.rb +68 -0
  25. data/lib/amazing_print/ext/nobrainer.rb +53 -0
  26. data/lib/amazing_print/ext/nokogiri.rb +45 -0
  27. data/lib/amazing_print/ext/ostruct.rb +27 -0
  28. data/lib/amazing_print/ext/ripple.rb +71 -0
  29. data/lib/amazing_print/ext/sequel.rb +55 -0
  30. data/lib/amazing_print/formatter.rb +120 -0
  31. data/lib/amazing_print/formatters.rb +14 -0
  32. data/lib/amazing_print/formatters/array_formatter.rb +139 -0
  33. data/lib/amazing_print/formatters/base_formatter.rb +148 -0
  34. data/lib/amazing_print/formatters/class_formatter.rb +24 -0
  35. data/lib/amazing_print/formatters/dir_formatter.rb +21 -0
  36. data/lib/amazing_print/formatters/file_formatter.rb +21 -0
  37. data/lib/amazing_print/formatters/hash_formatter.rb +106 -0
  38. data/lib/amazing_print/formatters/method_formatter.rb +21 -0
  39. data/lib/amazing_print/formatters/object_formatter.rb +82 -0
  40. data/lib/amazing_print/formatters/simple_formatter.rb +20 -0
  41. data/lib/amazing_print/formatters/struct_formatter.rb +74 -0
  42. data/lib/amazing_print/indentator.rb +17 -0
  43. data/lib/amazing_print/inspector.rb +175 -0
  44. data/lib/amazing_print/version.rb +10 -0
  45. data/lib/ap.rb +10 -0
  46. data/spec/active_record_helper.rb +30 -0
  47. data/spec/colors_spec.rb +114 -0
  48. data/spec/core_ext/logger_spec.rb +44 -0
  49. data/spec/core_ext/string_spec.rb +20 -0
  50. data/spec/ext/action_view_spec.rb +17 -0
  51. data/spec/ext/active_record_spec.rb +297 -0
  52. data/spec/ext/active_support_spec.rb +26 -0
  53. data/spec/ext/mongo_mapper_spec.rb +259 -0
  54. data/spec/ext/mongoid_spec.rb +66 -0
  55. data/spec/ext/nobrainer_spec.rb +58 -0
  56. data/spec/ext/nokogiri_spec.rb +50 -0
  57. data/spec/ext/ostruct_spec.rb +22 -0
  58. data/spec/ext/ripple_spec.rb +47 -0
  59. data/spec/formats_spec.rb +779 -0
  60. data/spec/methods_spec.rb +478 -0
  61. data/spec/misc_spec.rb +245 -0
  62. data/spec/objects_spec.rb +219 -0
  63. data/spec/spec_helper.rb +106 -0
  64. data/spec/support/active_record_data.rb +20 -0
  65. data/spec/support/active_record_data/3_2_diana.txt +24 -0
  66. data/spec/support/active_record_data/3_2_diana_legacy.txt +24 -0
  67. data/spec/support/active_record_data/3_2_multi.txt +50 -0
  68. data/spec/support/active_record_data/3_2_multi_legacy.txt +50 -0
  69. data/spec/support/active_record_data/4_0_diana.txt +98 -0
  70. data/spec/support/active_record_data/4_0_multi.txt +198 -0
  71. data/spec/support/active_record_data/4_1_diana.txt +97 -0
  72. data/spec/support/active_record_data/4_1_multi.txt +196 -0
  73. data/spec/support/active_record_data/4_2_diana.txt +109 -0
  74. data/spec/support/active_record_data/4_2_diana_legacy.txt +109 -0
  75. data/spec/support/active_record_data/4_2_multi.txt +220 -0
  76. data/spec/support/active_record_data/4_2_multi_legacy.txt +220 -0
  77. data/spec/support/active_record_data/5_0_diana.txt +105 -0
  78. data/spec/support/active_record_data/5_0_multi.txt +212 -0
  79. data/spec/support/active_record_data/5_1_diana.txt +104 -0
  80. data/spec/support/active_record_data/5_1_multi.txt +210 -0
  81. data/spec/support/active_record_data/5_2_diana.txt +104 -0
  82. data/spec/support/active_record_data/5_2_multi.txt +210 -0
  83. data/spec/support/active_record_data/6_0_diana.txt +104 -0
  84. data/spec/support/active_record_data/6_0_multi.txt +210 -0
  85. data/spec/support/ext_verifier.rb +41 -0
  86. data/spec/support/mongoid_versions.rb +22 -0
  87. data/spec/support/rails_versions.rb +50 -0
  88. metadata +243 -0
@@ -0,0 +1,106 @@
1
+ # Copyright (c) 2010-2016 Michael Dvorkin and contributors
2
+ #
3
+ # AmazingPrint is freely distributable under the terms of MIT license.
4
+ # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
+ #------------------------------------------------------------------------------
6
+ #
7
+ # Running specs from the command line:
8
+ # $ rake spec # Entire spec suite.
9
+ # $ rspec spec/objects_spec.rb # Individual spec file.
10
+ #
11
+ # NOTE: To successfully run specs with Ruby 1.8.6 the older versions of
12
+ # Bundler and RSpec gems are required:
13
+ #
14
+ # $ gem install bundler -v=1.0.2
15
+ # $ gem install rspec -v=2.6.0
16
+ #
17
+
18
+ # require 'simplecov'
19
+ # SimpleCov.start
20
+
21
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
22
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
23
+
24
+ Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each do |file|
25
+ require file
26
+ end
27
+
28
+ ExtVerifier.require_dependencies!(
29
+ %w[
30
+ rails
31
+ active_record
32
+ action_view
33
+ active_support/all
34
+ mongoid
35
+ mongo_mapper
36
+ ripple nobrainer
37
+ ostruct
38
+ ]
39
+ )
40
+ require 'nokogiri'
41
+ require 'amazing_print'
42
+
43
+ RSpec.configure do |config|
44
+ config.disable_monkey_patching!
45
+ # TODO: Make specs not order dependent
46
+ # config.order = :random
47
+ Kernel.srand config.seed
48
+ config.filter_run focus: true
49
+ config.run_all_when_everything_filtered = true
50
+ config.expect_with :rspec do |expectations|
51
+ expectations.syntax = :expect
52
+ end
53
+ config.mock_with :rspec do |mocks|
54
+ mocks.syntax = :expect
55
+ mocks.verify_partial_doubles = true
56
+ end
57
+
58
+ config.default_formatter = 'doc' if config.files_to_run.one?
59
+
60
+ # Run before all examples. Using suite or all will not work as stubs are
61
+ # killed after each example ends.
62
+ config.before(:each) do |_example|
63
+ stub_dotfile!
64
+ end
65
+ end
66
+
67
+ # This matcher handles the normalization of objects to replace non deterministic
68
+ # parts (such as object IDs) with simple placeholder strings before doing a
69
+ # comparison with a given string. It's important that this method only matches
70
+ # a string which strictly conforms to the expected object ID format.
71
+ RSpec::Matchers.define :be_similar_to do |expected, options|
72
+ match do |actual|
73
+ options ||= {}
74
+ @actual = normalize_object_id_strings(actual, options)
75
+ values_match? expected, @actual
76
+ end
77
+
78
+ diffable
79
+ end
80
+
81
+ # Override the Object IDs with a placeholder so that we are only checking
82
+ # that an ID is present and not that it matches a certain value. This is
83
+ # necessary as the Object IDs are not deterministic.
84
+ def normalize_object_id_strings(str, options)
85
+ unless options[:skip_standard]
86
+ str = str.gsub(/#<(.*?):0x[a-f\d]+/, '#<\1:placeholder_id')
87
+ end
88
+ unless options[:skip_bson]
89
+ str = str.gsub(/BSON::ObjectId\('[a-f\d]{24}'\)/, 'placeholder_bson_id')
90
+ end
91
+ str
92
+ end
93
+
94
+ def stub_dotfile!
95
+ allow_any_instance_of(AmazingPrint::Inspector)
96
+ .to receive(:load_dotfile)
97
+ .and_return(true)
98
+ end
99
+
100
+ def capture!
101
+ standard = $stdout
102
+ $stdout = StringIO.new
103
+ yield
104
+ ensure
105
+ $stdout = standard
106
+ end
@@ -0,0 +1,20 @@
1
+ require 'pathname'
2
+
3
+ class ActiveRecordData
4
+ class << self
5
+ data_file_selector = Pathname(File.dirname(__FILE__)).join('active_record_data', '*.txt')
6
+
7
+ # Example generated method
8
+ # data_filename = '/path/to/ap/spec/support/active_record_data/4_2_diana.txt'
9
+ #
10
+ # def self.raw_4_2_dana
11
+ # File.read(data_filename).strip
12
+ # end
13
+ Dir[data_file_selector].each do |data_filename|
14
+ method_name = Pathname(data_filename).basename('.txt')
15
+ define_method(:"raw_#{method_name}") do
16
+ File.read(data_filename).strip
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ #<User:placeholder_id
2
+ @aggregation_cache = {},
3
+ @attributes_cache = {},
4
+ @destroyed = false,
5
+ @marked_for_destruction = false,
6
+ @mass_assignment_options = nil,
7
+ @new_record = true,
8
+ @previously_changed = {},
9
+ @readonly = false,
10
+ attr_accessor :attributes = {
11
+ "admin" => false,
12
+ "created_at" => "1992-10-10 12:30:00",
13
+ "id" => nil,
14
+ "name" => "Diana",
15
+ "rank" => 1
16
+ },
17
+ attr_reader :association_cache = {},
18
+ attr_reader :changed_attributes = {
19
+ "admin" => nil,
20
+ "created_at" => nil,
21
+ "name" => nil,
22
+ "rank" => nil
23
+ }
24
+ >
@@ -0,0 +1,24 @@
1
+ #<User:placeholder_id
2
+ @aggregation_cache = {},
3
+ @attributes_cache = {},
4
+ @destroyed = false,
5
+ @marked_for_destruction = false,
6
+ @new_record = true,
7
+ @previously_changed = {},
8
+ @readonly = false,
9
+ attr_accessor :attributes = {
10
+ "admin" => false,
11
+ "created_at" => "1992-10-10 12:30:00",
12
+ "id" => nil,
13
+ "name" => "Diana",
14
+ "rank" => 1
15
+ },
16
+ attr_reader :association_cache = {},
17
+ attr_reader :changed_attributes = {
18
+ "admin" => nil,
19
+ "created_at" => nil,
20
+ "name" => nil,
21
+ "rank" => nil
22
+ },
23
+ attr_reader :mass_assignment_options = nil
24
+ >
@@ -0,0 +1,50 @@
1
+ [
2
+ [0] #<User:placeholder_id
3
+ @aggregation_cache = {},
4
+ @attributes_cache = {},
5
+ @destroyed = false,
6
+ @marked_for_destruction = false,
7
+ @mass_assignment_options = nil,
8
+ @new_record = true,
9
+ @previously_changed = {},
10
+ @readonly = false,
11
+ attr_accessor :attributes = {
12
+ "admin" => false,
13
+ "created_at" => "1992-10-10 12:30:00",
14
+ "id" => nil,
15
+ "name" => "Diana",
16
+ "rank" => 1
17
+ },
18
+ attr_reader :association_cache = {},
19
+ attr_reader :changed_attributes = {
20
+ "admin" => nil,
21
+ "created_at" => nil,
22
+ "name" => nil,
23
+ "rank" => nil
24
+ }
25
+ >,
26
+ [1] #<User:placeholder_id
27
+ @aggregation_cache = {},
28
+ @attributes_cache = {},
29
+ @destroyed = false,
30
+ @marked_for_destruction = false,
31
+ @mass_assignment_options = nil,
32
+ @new_record = true,
33
+ @previously_changed = {},
34
+ @readonly = false,
35
+ attr_accessor :attributes = {
36
+ "admin" => true,
37
+ "created_at" => "2003-05-26 14:15:00",
38
+ "id" => nil,
39
+ "name" => "Laura",
40
+ "rank" => 2
41
+ },
42
+ attr_reader :association_cache = {},
43
+ attr_reader :changed_attributes = {
44
+ "admin" => nil,
45
+ "created_at" => nil,
46
+ "name" => nil,
47
+ "rank" => nil
48
+ }
49
+ >
50
+ ]
@@ -0,0 +1,50 @@
1
+ [
2
+ [0] #<User:placeholder_id
3
+ @aggregation_cache = {},
4
+ @attributes_cache = {},
5
+ @destroyed = false,
6
+ @marked_for_destruction = false,
7
+ @new_record = true,
8
+ @previously_changed = {},
9
+ @readonly = false,
10
+ attr_accessor :attributes = {
11
+ "admin" => false,
12
+ "created_at" => "1992-10-10 12:30:00",
13
+ "id" => nil,
14
+ "name" => "Diana",
15
+ "rank" => 1
16
+ },
17
+ attr_reader :association_cache = {},
18
+ attr_reader :changed_attributes = {
19
+ "admin" => nil,
20
+ "created_at" => nil,
21
+ "name" => nil,
22
+ "rank" => nil
23
+ },
24
+ attr_reader :mass_assignment_options = nil
25
+ >,
26
+ [1] #<User:placeholder_id
27
+ @aggregation_cache = {},
28
+ @attributes_cache = {},
29
+ @destroyed = false,
30
+ @marked_for_destruction = false,
31
+ @new_record = true,
32
+ @previously_changed = {},
33
+ @readonly = false,
34
+ attr_accessor :attributes = {
35
+ "admin" => true,
36
+ "created_at" => "2003-05-26 14:15:00",
37
+ "id" => nil,
38
+ "name" => "Laura",
39
+ "rank" => 2
40
+ },
41
+ attr_reader :association_cache = {},
42
+ attr_reader :changed_attributes = {
43
+ "admin" => nil,
44
+ "created_at" => nil,
45
+ "name" => nil,
46
+ "rank" => nil
47
+ },
48
+ attr_reader :mass_assignment_options = nil
49
+ >
50
+ ]
@@ -0,0 +1,98 @@
1
+ #<User:placeholder_id
2
+ @_start_transaction_state = {},
3
+ @aggregation_cache = {},
4
+ @attributes_cache = {},
5
+ @column_types = {
6
+ "admin" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
7
+ attr_accessor :coder = nil,
8
+ attr_accessor :primary = false,
9
+ attr_reader :default = nil,
10
+ attr_reader :default_function = nil,
11
+ attr_reader :limit = nil,
12
+ attr_reader :name = "admin",
13
+ attr_reader :null = true,
14
+ attr_reader :precision = nil,
15
+ attr_reader :scale = nil,
16
+ attr_reader :sql_type = "boolean",
17
+ attr_reader :type = :boolean
18
+ >,
19
+ "created_at" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
20
+ attr_accessor :coder = nil,
21
+ attr_accessor :primary = false,
22
+ attr_reader :default = nil,
23
+ attr_reader :default_function = nil,
24
+ attr_reader :limit = nil,
25
+ attr_reader :name = "created_at",
26
+ attr_reader :null = true,
27
+ attr_reader :precision = nil,
28
+ attr_reader :scale = nil,
29
+ attr_reader :sql_type = "datetime",
30
+ attr_reader :type = :datetime
31
+ >,
32
+ "id" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
33
+ attr_accessor :coder = nil,
34
+ attr_accessor :primary = true,
35
+ attr_reader :default = nil,
36
+ attr_reader :default_function = nil,
37
+ attr_reader :limit = nil,
38
+ attr_reader :name = "id",
39
+ attr_reader :null = false,
40
+ attr_reader :precision = nil,
41
+ attr_reader :scale = nil,
42
+ attr_reader :sql_type = "INTEGER",
43
+ attr_reader :type = :integer
44
+ >,
45
+ "name" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
46
+ attr_accessor :coder = nil,
47
+ attr_accessor :primary = false,
48
+ attr_reader :default = nil,
49
+ attr_reader :default_function = nil,
50
+ attr_reader :limit = 255,
51
+ attr_reader :name = "name",
52
+ attr_reader :null = true,
53
+ attr_reader :precision = nil,
54
+ attr_reader :scale = nil,
55
+ attr_reader :sql_type = "varchar(255)",
56
+ attr_reader :type = :string
57
+ >,
58
+ "rank" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
59
+ attr_accessor :coder = nil,
60
+ attr_accessor :primary = false,
61
+ attr_reader :default = nil,
62
+ attr_reader :default_function = nil,
63
+ attr_reader :limit = nil,
64
+ attr_reader :name = "rank",
65
+ attr_reader :null = true,
66
+ attr_reader :precision = nil,
67
+ attr_reader :scale = nil,
68
+ attr_reader :sql_type = "integer",
69
+ attr_reader :type = :integer
70
+ >
71
+ },
72
+ @column_types_override = nil,
73
+ @destroyed = false,
74
+ @marked_for_destruction = false,
75
+ @new_record = true,
76
+ @previously_changed = {},
77
+ @readonly = false,
78
+ @reflects_state = [
79
+ [0] false
80
+ ],
81
+ @transaction_state = nil,
82
+ @txn = nil,
83
+ attr_accessor :attributes = {
84
+ "admin" => false,
85
+ "created_at" => "1992-10-10 12:30:00",
86
+ "id" => nil,
87
+ "name" => "Diana",
88
+ "rank" => 1
89
+ },
90
+ attr_accessor :destroyed_by_association = nil,
91
+ attr_reader :association_cache = {},
92
+ attr_reader :changed_attributes = {
93
+ "admin" => nil,
94
+ "created_at" => nil,
95
+ "name" => nil,
96
+ "rank" => nil
97
+ }
98
+ >
@@ -0,0 +1,198 @@
1
+ [
2
+ [0] #<User:placeholder_id
3
+ @_start_transaction_state = {},
4
+ @aggregation_cache = {},
5
+ @attributes_cache = {},
6
+ @column_types = {
7
+ "admin" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
8
+ attr_accessor :coder = nil,
9
+ attr_accessor :primary = false,
10
+ attr_reader :default = nil,
11
+ attr_reader :default_function = nil,
12
+ attr_reader :limit = nil,
13
+ attr_reader :name = "admin",
14
+ attr_reader :null = true,
15
+ attr_reader :precision = nil,
16
+ attr_reader :scale = nil,
17
+ attr_reader :sql_type = "boolean",
18
+ attr_reader :type = :boolean
19
+ >,
20
+ "created_at" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
21
+ attr_accessor :coder = nil,
22
+ attr_accessor :primary = false,
23
+ attr_reader :default = nil,
24
+ attr_reader :default_function = nil,
25
+ attr_reader :limit = nil,
26
+ attr_reader :name = "created_at",
27
+ attr_reader :null = true,
28
+ attr_reader :precision = nil,
29
+ attr_reader :scale = nil,
30
+ attr_reader :sql_type = "datetime",
31
+ attr_reader :type = :datetime
32
+ >,
33
+ "id" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
34
+ attr_accessor :coder = nil,
35
+ attr_accessor :primary = true,
36
+ attr_reader :default = nil,
37
+ attr_reader :default_function = nil,
38
+ attr_reader :limit = nil,
39
+ attr_reader :name = "id",
40
+ attr_reader :null = false,
41
+ attr_reader :precision = nil,
42
+ attr_reader :scale = nil,
43
+ attr_reader :sql_type = "INTEGER",
44
+ attr_reader :type = :integer
45
+ >,
46
+ "name" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
47
+ attr_accessor :coder = nil,
48
+ attr_accessor :primary = false,
49
+ attr_reader :default = nil,
50
+ attr_reader :default_function = nil,
51
+ attr_reader :limit = 255,
52
+ attr_reader :name = "name",
53
+ attr_reader :null = true,
54
+ attr_reader :precision = nil,
55
+ attr_reader :scale = nil,
56
+ attr_reader :sql_type = "varchar(255)",
57
+ attr_reader :type = :string
58
+ >,
59
+ "rank" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
60
+ attr_accessor :coder = nil,
61
+ attr_accessor :primary = false,
62
+ attr_reader :default = nil,
63
+ attr_reader :default_function = nil,
64
+ attr_reader :limit = nil,
65
+ attr_reader :name = "rank",
66
+ attr_reader :null = true,
67
+ attr_reader :precision = nil,
68
+ attr_reader :scale = nil,
69
+ attr_reader :sql_type = "integer",
70
+ attr_reader :type = :integer
71
+ >
72
+ },
73
+ @column_types_override = nil,
74
+ @destroyed = false,
75
+ @marked_for_destruction = false,
76
+ @new_record = true,
77
+ @previously_changed = {},
78
+ @readonly = false,
79
+ @reflects_state = [
80
+ [0] false
81
+ ],
82
+ @transaction_state = nil,
83
+ @txn = nil,
84
+ attr_accessor :attributes = {
85
+ "admin" => false,
86
+ "created_at" => "1992-10-10 12:30:00",
87
+ "id" => nil,
88
+ "name" => "Diana",
89
+ "rank" => 1
90
+ },
91
+ attr_accessor :destroyed_by_association = nil,
92
+ attr_reader :association_cache = {},
93
+ attr_reader :changed_attributes = {
94
+ "admin" => nil,
95
+ "created_at" => nil,
96
+ "name" => nil,
97
+ "rank" => nil
98
+ }
99
+ >,
100
+ [1] #<User:placeholder_id
101
+ @_start_transaction_state = {},
102
+ @aggregation_cache = {},
103
+ @attributes_cache = {},
104
+ @column_types = {
105
+ "admin" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
106
+ attr_accessor :coder = nil,
107
+ attr_accessor :primary = false,
108
+ attr_reader :default = nil,
109
+ attr_reader :default_function = nil,
110
+ attr_reader :limit = nil,
111
+ attr_reader :name = "admin",
112
+ attr_reader :null = true,
113
+ attr_reader :precision = nil,
114
+ attr_reader :scale = nil,
115
+ attr_reader :sql_type = "boolean",
116
+ attr_reader :type = :boolean
117
+ >,
118
+ "created_at" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
119
+ attr_accessor :coder = nil,
120
+ attr_accessor :primary = false,
121
+ attr_reader :default = nil,
122
+ attr_reader :default_function = nil,
123
+ attr_reader :limit = nil,
124
+ attr_reader :name = "created_at",
125
+ attr_reader :null = true,
126
+ attr_reader :precision = nil,
127
+ attr_reader :scale = nil,
128
+ attr_reader :sql_type = "datetime",
129
+ attr_reader :type = :datetime
130
+ >,
131
+ "id" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
132
+ attr_accessor :coder = nil,
133
+ attr_accessor :primary = true,
134
+ attr_reader :default = nil,
135
+ attr_reader :default_function = nil,
136
+ attr_reader :limit = nil,
137
+ attr_reader :name = "id",
138
+ attr_reader :null = false,
139
+ attr_reader :precision = nil,
140
+ attr_reader :scale = nil,
141
+ attr_reader :sql_type = "INTEGER",
142
+ attr_reader :type = :integer
143
+ >,
144
+ "name" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
145
+ attr_accessor :coder = nil,
146
+ attr_accessor :primary = false,
147
+ attr_reader :default = nil,
148
+ attr_reader :default_function = nil,
149
+ attr_reader :limit = 255,
150
+ attr_reader :name = "name",
151
+ attr_reader :null = true,
152
+ attr_reader :precision = nil,
153
+ attr_reader :scale = nil,
154
+ attr_reader :sql_type = "varchar(255)",
155
+ attr_reader :type = :string
156
+ >,
157
+ "rank" => #<ActiveRecord::ConnectionAdapters::SQLite3Column:placeholder_id
158
+ attr_accessor :coder = nil,
159
+ attr_accessor :primary = false,
160
+ attr_reader :default = nil,
161
+ attr_reader :default_function = nil,
162
+ attr_reader :limit = nil,
163
+ attr_reader :name = "rank",
164
+ attr_reader :null = true,
165
+ attr_reader :precision = nil,
166
+ attr_reader :scale = nil,
167
+ attr_reader :sql_type = "integer",
168
+ attr_reader :type = :integer
169
+ >
170
+ },
171
+ @column_types_override = nil,
172
+ @destroyed = false,
173
+ @marked_for_destruction = false,
174
+ @new_record = true,
175
+ @previously_changed = {},
176
+ @readonly = false,
177
+ @reflects_state = [
178
+ [0] false
179
+ ],
180
+ @transaction_state = nil,
181
+ @txn = nil,
182
+ attr_accessor :attributes = {
183
+ "admin" => true,
184
+ "created_at" => "2003-05-26 14:15:00",
185
+ "id" => nil,
186
+ "name" => "Laura",
187
+ "rank" => 2
188
+ },
189
+ attr_accessor :destroyed_by_association = nil,
190
+ attr_reader :association_cache = {},
191
+ attr_reader :changed_attributes = {
192
+ "admin" => nil,
193
+ "created_at" => nil,
194
+ "name" => nil,
195
+ "rank" => nil
196
+ }
197
+ >
198
+ ]