columns_on_demand 3.0.2 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c0959f01a0d8c87999c526ccdafd93755595d0fd
4
+ data.tar.gz: 397908ac37b04fa81afe558d14bfedbd5d4df1ca
5
+ SHA512:
6
+ metadata.gz: ac93a58ae02e8b298c6652af9f82c123d6fe826fe4058903941b67010e0a77851dfe7096fc12648eade0de1bd3ca735825fa98c0b21c5fe86c62d6b000752b0a
7
+ data.tar.gz: cdc82b4b4e56b64bba76aebf01dffb9461b2caacc202360cbe2c60662daf0145f2dd959ebdb0d12b7b87577ea394b10aa3d3b5478ac103b7a10c33ea8aed1924
data/Gemfile CHANGED
@@ -13,3 +13,5 @@ gemspec
13
13
  # To use debugger
14
14
  # gem 'ruby-debug19', :require => 'ruby-debug'
15
15
  # gem 'ruby-debug'
16
+
17
+ gem 'rails', ENV['RAILS_VERSION']
@@ -26,10 +26,7 @@ Compatibility
26
26
 
27
27
  Supports mysql, mysql2, postgresql, and sqlite3.
28
28
 
29
- Currently tested against Rails 3.2.13 and 3.1.8, on Ruby 1.8.7 and 2.0.0p0.
30
- Was also tested compatible with 2.3.14 and 3.0.17.
31
-
32
- Note that 3.0 and 3.1 have ActiveRecord regressions that will affect sqlite users.
29
+ Currently tested against Rails 3.2.18, 4.0.8, and 4.1.4, on Ruby 2.0.0.
33
30
  EOF
34
31
  gem.has_rdoc = false
35
32
  gem.author = "Will Bryant"
@@ -74,10 +74,10 @@ module ColumnsOnDemand
74
74
 
75
75
  def load_attributes(*attr_names)
76
76
  return if attr_names.blank?
77
- values = connection.select_rows(
78
- "SELECT #{attr_names.collect {|attr_name| connection.quote_column_name(attr_name)}.join(", ")}" +
77
+ values = self.class.connection.select_rows(
78
+ "SELECT #{attr_names.collect {|attr_name| self.class.connection.quote_column_name(attr_name)}.join(", ")}" +
79
79
  " FROM #{self.class.quoted_table_name}" +
80
- " WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quote_value(id, self.class.columns_hash[self.class.primary_key])}")
80
+ " WHERE #{self.class.connection.quote_column_name(self.class.primary_key)} = #{self.class.quote_value(id, self.class.columns_hash[self.class.primary_key])}")
81
81
  row = values.first || raise(ActiveRecord::RecordNotFound, "Couldn't find #{self.class.name} with ID=#{id}")
82
82
  attr_names.each_with_index do |attr_name, i|
83
83
  columns_loaded << attr_name
@@ -101,9 +101,9 @@ module ColumnsOnDemand
101
101
  load_attributes(attr_name.to_s) unless column_loaded?(attr_name.to_s)
102
102
  end
103
103
 
104
- def read_attribute_with_columns_on_demand(attr_name)
104
+ def read_attribute_with_columns_on_demand(attr_name, &block)
105
105
  ensure_loaded(attr_name)
106
- read_attribute_without_columns_on_demand(attr_name)
106
+ read_attribute_without_columns_on_demand(attr_name, &block)
107
107
  end
108
108
 
109
109
  def read_attribute_before_type_cast_with_columns_on_demand(attr_name)
@@ -130,7 +130,7 @@ module ColumnsOnDemand
130
130
  module RelationMethods
131
131
  def build_select_with_columns_on_demand(arel, selects)
132
132
  if selects.empty? && klass < ColumnsOnDemand::InstanceMethods
133
- build_select_without_columns_on_demand(arel, default_select(true))
133
+ build_select_without_columns_on_demand(arel, [default_select(true)])
134
134
  else
135
135
  build_select_without_columns_on_demand(arel, selects)
136
136
  end
@@ -1,3 +1,3 @@
1
1
  module ColumnsOnDemand
2
- VERSION = '3.0.2'
2
+ VERSION = '4.1.0'
3
3
  end
@@ -1,19 +1,6 @@
1
- if ActiveRecord::VERSION::MAJOR < 3 || (ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 1)
2
- # proudly stolen from ActiveRecord's test suite, with addition of BEGIN and COMMIT
3
- ActiveRecord::Base.connection.class.class_eval do
4
- IGNORED_SQL = [/^PRAGMA/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /SHOW FIELDS/, /^BEGIN$/, /^COMMIT$/]
5
-
6
- def execute_with_query_record(sql, name = nil, &block)
7
- $queries_executed ||= []
8
- $queries_executed << sql unless IGNORED_SQL.any? { |r| sql =~ r }
9
- execute_without_query_record(sql, name, &block)
10
- end
11
-
12
- alias_method_chain :execute, :query_record
13
- end
14
- elsif ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2
1
+ if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2
15
2
  # this is from 3.1's test suite. ugly.
16
- class ActiveRecord::SQLCounter
3
+ class SQLCounter
17
4
  cattr_accessor :ignored_sql
18
5
  self.ignored_sql = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/, /^BEGIN/, /^COMMIT/]
19
6
 
@@ -21,10 +8,14 @@ elsif ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2
21
8
  # ignored SQL. This ignored SQL is for Oracle.
22
9
  ignored_sql.concat [/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from all_triggers/im]
23
10
 
24
- def initialize
11
+ def self.clear_log
25
12
  $queries_executed = []
26
13
  end
27
14
 
15
+ def initialize
16
+ $queries_executed.clear
17
+ end
18
+
28
19
  def call(name, start, finish, message_id, values)
29
20
  sql = values[:sql]
30
21
 
@@ -36,10 +27,10 @@ elsif ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2
36
27
  end
37
28
  end
38
29
  end
39
- ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::SQLCounter.new)
30
+ ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
40
31
  else
41
32
  # this is from 3.2's test suite. ugly.
42
- class ActiveRecord::SQLCounter
33
+ class SQLCounter
43
34
  cattr_accessor :ignored_sql
44
35
  self.ignored_sql = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/, /^BEGIN/, /^COMMIT/]
45
36
 
@@ -52,6 +43,10 @@ else
52
43
 
53
44
  attr_reader :ignore
54
45
 
46
+ def self.clear_log
47
+ self.log.clear
48
+ end
49
+
55
50
  def initialize(ignore = self.class.ignored_sql)
56
51
  @ignore = ignore
57
52
  end
@@ -66,5 +61,5 @@ else
66
61
  end
67
62
  end
68
63
 
69
- ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::SQLCounter.new)
64
+ ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
70
65
  end
@@ -22,7 +22,7 @@ class Child < ActiveRecord::Base
22
22
  belongs_to :parent
23
23
  end
24
24
 
25
- class ColumnsOnDemandTest < ActiveRecord::TestCase
25
+ class ColumnsOnDemandTest < ActiveSupport::TestCase
26
26
  def assert_not_loaded(record, attr_name)
27
27
  assert !record.column_loaded?(attr_name.to_s)
28
28
  end
@@ -31,6 +31,17 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
31
31
  assert record.column_loaded?(attr_name.to_s)
32
32
  end
33
33
 
34
+ def assert_queries(num = 1)
35
+ ::SQLCounter.clear_log
36
+ yield
37
+ ensure
38
+ assert_equal num, ::SQLCounter.log.size, "#{::SQLCounter.log.size} instead of #{num} queries were executed.#{::SQLCounter.log.size == 0 ? '' : "\nQueries:\n#{::SQLCounter.log.join("\n")}"}"
39
+ end
40
+
41
+ def assert_no_queries(&block)
42
+ assert_queries(0, &block)
43
+ end
44
+
34
45
  fixtures :all
35
46
  self.use_transactional_fixtures = true
36
47
 
@@ -51,35 +62,35 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
51
62
  end
52
63
 
53
64
  test "it doesn't load the columns_to_load_on_demand straight away when finding the records" do
54
- record = Implicit.find(:first)
65
+ record = Implicit.first
55
66
  assert_not_equal nil, record
56
67
  assert_not_loaded record, "file_data"
57
68
  assert_not_loaded record, "processing_log"
58
69
 
59
- record = Implicit.find(:all).first
70
+ record = Implicit.all.to_a.first
60
71
  assert_not_equal nil, record
61
72
  assert_not_loaded record, "file_data"
62
73
  assert_not_loaded record, "processing_log"
63
74
  end
64
75
 
65
76
  test "it loads the columns when accessed as an attribute" do
66
- record = Implicit.find(:first)
77
+ record = Implicit.first
67
78
  assert_equal "This is the file data!", record.file_data
68
79
  assert_equal "Processed 0 entries OK", record.results
69
80
  assert_equal record.results.object_id, record.results.object_id # should not have to re-find
70
81
 
71
- record = Implicit.find(:all).first
82
+ record = Implicit.all.to_a.first
72
83
  assert_not_equal nil, record.file_data
73
84
  end
74
85
 
75
86
  test "it loads the columns only once even if nil" do
76
- record = Implicit.find(:first)
87
+ record = Implicit.first
77
88
  assert_not_loaded record, "file_data"
78
89
  assert_equal "This is the file data!", record.file_data
79
90
  assert_loaded record, "file_data"
80
91
  Implicit.update_all(:file_data => nil)
81
92
 
82
- record = Implicit.find(:first)
93
+ record = Implicit.first
83
94
  assert_not_loaded record, "file_data"
84
95
  assert_equal nil, record.file_data
85
96
  assert_loaded record, "file_data"
@@ -89,7 +100,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
89
100
  end
90
101
 
91
102
  test "it loads the column when accessed using read_attribute" do
92
- record = Implicit.find(:first)
103
+ record = Implicit.first
93
104
  assert_equal "This is the file data!", record.read_attribute(:file_data)
94
105
  assert_equal "This is the file data!", record.read_attribute("file_data")
95
106
  assert_equal "Processed 0 entries OK", record.read_attribute("results")
@@ -97,19 +108,19 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
97
108
  end
98
109
 
99
110
  test "it loads the column when accessed using read_attribute_before_type_cast" do
100
- record = Implicit.find(:first)
111
+ record = Implicit.first
101
112
  assert_equal "This is the file data!", record.read_attribute_before_type_cast("file_data")
102
113
  assert_equal "Processed 0 entries OK", record.read_attribute_before_type_cast("results")
103
114
  # read_attribute_before_type_cast doesn't tolerate symbol arguments as read_attribute does
104
115
  end
105
116
 
106
117
  test "it loads the column when generating #attributes" do
107
- attributes = Implicit.find(:first).attributes
118
+ attributes = Implicit.first.attributes
108
119
  assert_equal "This is the file data!", attributes["file_data"]
109
120
  end
110
121
 
111
122
  test "loads all the columns in one query when generating #attributes" do
112
- record = Implicit.find(:first)
123
+ record = Implicit.first
113
124
  assert_queries(1) do
114
125
  attributes = record.attributes
115
126
  assert_equal "This is the file data!", attributes["file_data"]
@@ -119,20 +130,20 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
119
130
 
120
131
  test "it loads the column when generating #to_json" do
121
132
  ActiveRecord::Base.include_root_in_json = true
122
- json = Implicit.find(:first).to_json
133
+ json = Implicit.first.to_json
123
134
  assert_equal "This is the file data!", ActiveSupport::JSON.decode(json)["implicit"]["file_data"]
124
135
  end
125
136
 
126
137
  test "it loads the column for #clone" do
127
- record = Implicit.find(:first).clone
138
+ record = Implicit.first.clone
128
139
  assert_equal "This is the file data!", record.file_data
129
140
 
130
- record = Implicit.find(:first).clone.tap(&:save!)
141
+ record = Implicit.first.clone.tap(&:save!)
131
142
  assert_equal "This is the file data!", Implicit.find(record.id).file_data
132
143
  end
133
144
 
134
145
  test "it clears the column on reload, and can load it again" do
135
- record = Implicit.find(:first)
146
+ record = Implicit.first
136
147
  old_object_id = record.file_data.object_id
137
148
  Implicit.update_all(:file_data => "New file data")
138
149
 
@@ -142,8 +153,8 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
142
153
  assert_equal "New file data", record.file_data
143
154
  end
144
155
 
145
- test "it doesn't override custom :select finds" do
146
- record = Implicit.find(:first, :select => "id, file_data")
156
+ test "it doesn't override custom select() finds" do
157
+ record = Implicit.select("id, file_data").first
147
158
  klass = ActiveRecord.const_defined?(:MissingAttributeError) ? ActiveRecord::MissingAttributeError : ActiveModel::MissingAttributeError
148
159
  assert_raise klass do
149
160
  record.processed_at # explicitly not loaded, overriding default
@@ -152,7 +163,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
152
163
  end
153
164
 
154
165
  test "it raises normal ActiveRecord::RecordNotFound if the record is deleted before the column load" do
155
- record = Implicit.find(:first)
166
+ record = Implicit.first
156
167
  Implicit.delete_all
157
168
 
158
169
  assert_raise ActiveRecord::RecordNotFound do
@@ -161,7 +172,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
161
172
  end
162
173
 
163
174
  test "it doesn't raise on column access if the record is deleted after the column load" do
164
- record = Implicit.find(:first)
175
+ record = Implicit.first
165
176
  record.file_data
166
177
  Implicit.delete_all
167
178
 
@@ -218,7 +229,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
218
229
 
219
230
  test "it works on child records loaded from associations" do
220
231
  parent = parents(:some_parent)
221
- child = parent.children.find(:first)
232
+ child = parent.children.first
222
233
  assert_not_loaded child, "test_data"
223
234
  assert_equal "Some test data", child.test_data
224
235
  end
@@ -232,7 +243,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
232
243
 
233
244
  test "it doesn't break validates_presence_of" do
234
245
  class ValidatedImplicit < ActiveRecord::Base
235
- set_table_name "implicits"
246
+ self.table_name = "implicits"
236
247
  columns_on_demand
237
248
  validates_presence_of :original_filename, :file_data, :results
238
249
  end
@@ -254,7 +265,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
254
265
  original_record = Serializing.create!(:data => data)
255
266
  assert_equal data, original_record.data
256
267
 
257
- record = Serializing.find(:first)
268
+ record = Serializing.first
258
269
  assert_not_loaded record, "data"
259
270
  assert_equal data, record.data
260
271
  assert_equal false, record.data_changed?
@@ -266,7 +277,7 @@ class ColumnsOnDemandTest < ActiveRecord::TestCase
266
277
  assert_equal true, record.changed?
267
278
  record.save!
268
279
 
269
- record = Serializing.find(:first)
280
+ record = Serializing.first
270
281
  assert_not_loaded record, "data"
271
282
  assert_equal "replacement", record.data
272
283
  end
@@ -9,7 +9,7 @@ puts "Rails: #{ENV['RAILS_VERSION'] || 'default'}"
9
9
  gem 'activesupport', ENV['RAILS_VERSION']
10
10
  gem 'activerecord', ENV['RAILS_VERSION']
11
11
 
12
- require 'test/unit'
12
+ require 'minitest/autorun'
13
13
  require 'active_support'
14
14
  require 'active_support/test_case'
15
15
  require 'active_record'
metadata CHANGED
@@ -1,140 +1,126 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: columns_on_demand
3
- version: !ruby/object:Gem::Version
4
- hash: 3
5
- prerelease:
6
- segments:
7
- - 3
8
- - 0
9
- - 2
10
- version: 3.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.1.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Will Bryant
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-04-21 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-07-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: activerecord
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rake
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: mysql
50
35
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mysql
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
60
48
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: mysql2
64
49
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mysql2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
74
62
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: pg
78
63
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
80
- none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
88
76
  type: :development
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: sqlite3
92
77
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
102
90
  type: :development
103
- version_requirements: *id006
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
104
97
  description: |
105
98
  Lazily loads large columns on demand.
106
-
99
+
107
100
  By default, does this for all TEXT (:text) and BLOB (:binary) columns, but a list
108
101
  of specific columns to load on demand can be given.
109
-
102
+
110
103
  This is useful to reduce the memory taken by Rails when loading a number of records
111
104
  that have large columns if those particular columns are actually not required most
112
105
  of the time. In this situation it can also greatly reduce the database query time
113
106
  because loading large BLOB/TEXT columns generally means seeking to other database
114
107
  pages since they are not stored wholly in the record's page itself.
115
-
108
+
116
109
  Although this plugin is mainly used for BLOB and TEXT columns, it will actually
117
110
  work on all types - and is just as useful for large string fields etc.
118
-
119
-
111
+
112
+
120
113
  Compatibility
121
114
  =============
122
-
115
+
123
116
  Supports mysql, mysql2, postgresql, and sqlite3.
124
-
125
- Currently tested against Rails 3.2.13 and 3.1.8, on Ruby 1.8.7 and 2.0.0p0.
126
- Was also tested compatible with 2.3.14 and 3.0.17.
127
-
128
- Note that 3.0 and 3.1 have ActiveRecord regressions that will affect sqlite users.
129
117
 
118
+ Currently tested against Rails 3.2.18, 4.0.8, and 4.1.4, on Ruby 2.0.0.
130
119
  email: will.bryant@gmail.com
131
120
  executables: []
132
-
133
121
  extensions: []
134
-
135
122
  extra_rdoc_files: []
136
-
137
- files:
123
+ files:
138
124
  - .gitignore
139
125
  - Gemfile
140
126
  - MIT-LICENSE
@@ -154,38 +140,28 @@ files:
154
140
  - test/test_helper.rb
155
141
  homepage: http://github.com/willbryant/columns_on_demand
156
142
  licenses: []
157
-
143
+ metadata: {}
158
144
  post_install_message:
159
145
  rdoc_options: []
160
-
161
- require_paths:
146
+ require_paths:
162
147
  - lib
163
- required_ruby_version: !ruby/object:Gem::Requirement
164
- none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- hash: 3
169
- segments:
170
- - 0
171
- version: "0"
172
- required_rubygems_version: !ruby/object:Gem::Requirement
173
- none: false
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- hash: 3
178
- segments:
179
- - 0
180
- version: "0"
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
181
158
  requirements: []
182
-
183
159
  rubyforge_project:
184
- rubygems_version: 1.8.15
160
+ rubygems_version: 2.2.2
185
161
  signing_key:
186
- specification_version: 3
162
+ specification_version: 4
187
163
  summary: Lazily loads large columns on demand.
188
- test_files:
164
+ test_files:
189
165
  - test/activerecord_count_queries.rb
190
166
  - test/columns_on_demand_test.rb
191
167
  - test/database.yml