columns_on_demand 4.2.0 → 4.2.1
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.
- checksums.yaml +4 -4
- data/Gemfile +0 -4
- data/README +4 -4
- data/lib/columns_on_demand/version.rb +1 -1
- data/lib/columns_on_demand.rb +41 -6
- data/test/test_helper.rb +2 -3
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b05f09b9906904849565691a625d04746a38abe5
|
4
|
+
data.tar.gz: 9050e528adabcb488dc0aaf1f987f9c49a346e3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd71294a17d5ee86d403c7df62436f03dc48e2b2c1fb7b07b7198493239dbc643c797021a2e0e3041ef2796c415a304701eb0ec2a0395e40e7e0fd73a4548143
|
7
|
+
data.tar.gz: 189374aeae895a2e0a19d420e794ab545bf50ecae7f8734135d837dfc6f119eca4f9c79369b7d0f7a481b57fb928a1461bb7fc5422d0439ccfca80a88c18754e
|
data/Gemfile
CHANGED
data/README
CHANGED
@@ -21,10 +21,10 @@ Compatibility
|
|
21
21
|
|
22
22
|
Supports mysql, mysql2, postgresql, and sqlite3.
|
23
23
|
|
24
|
-
Currently tested against Rails 4.2.0, 4.1.5, 4.0.9, 3.2.18
|
25
|
-
Was also tested compatible with 2.3.14, 3.0.17.
|
24
|
+
Currently tested against Rails 4.2.1, 4.2.0, 4.1.5, 4.0.9, 3.2.18, on Ruby 2.1.5.
|
26
25
|
|
27
|
-
|
26
|
+
Was also previously tested compatible with 2.3.14, 3.0.17, and 3.1.8 on Ruby 2.0.0
|
27
|
+
or 1.8.7 as appropriate, and may still work for them.
|
28
28
|
|
29
29
|
|
30
30
|
Example
|
@@ -44,4 +44,4 @@ class Example
|
|
44
44
|
end
|
45
45
|
|
46
46
|
|
47
|
-
Copyright (c) 2008-
|
47
|
+
Copyright (c) 2008-2015 Will Bryant, Sekuda Ltd, released under the MIT license
|
data/lib/columns_on_demand.rb
CHANGED
@@ -20,9 +20,16 @@ module ColumnsOnDemand
|
|
20
20
|
alias_method_chain :attribute_names, :columns_on_demand
|
21
21
|
alias_method_chain :read_attribute, :columns_on_demand
|
22
22
|
alias_method_chain :read_attribute_before_type_cast, :columns_on_demand
|
23
|
+
if ActiveRecord::AttributeMethods::Read.instance_methods.include?(:_read_attribute)
|
24
|
+
alias_method_chain :_read_attribute, :columns_on_demand
|
25
|
+
end
|
23
26
|
alias_method_chain :missing_attribute, :columns_on_demand
|
24
27
|
alias_method_chain :reload, :columns_on_demand
|
25
|
-
|
28
|
+
if ActiveRecord::AttributeMethods::Dirty.instance_methods.include?(:changed_attributes)
|
29
|
+
alias_method_chain :attribute_changed_in_place?, :columns_on_demand
|
30
|
+
elsif ActiveRecord::AttributeMethods::Dirty.instance_methods.include?(:changed_attributes)
|
31
|
+
alias_method_chain :changed_in_place?, :columns_on_demand
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
28
35
|
def reset_column_information_with_columns_on_demand
|
@@ -118,15 +125,19 @@ module ColumnsOnDemand
|
|
118
125
|
end
|
119
126
|
end
|
120
127
|
end
|
121
|
-
|
128
|
+
|
122
129
|
def ensure_loaded(attr_name)
|
123
130
|
load_attributes(attr_name.to_s) unless column_loaded?(attr_name.to_s)
|
124
131
|
end
|
125
|
-
|
132
|
+
|
126
133
|
def changed_in_place_with_columns_on_demand?(attr_name)
|
127
134
|
column_loaded?(attr_name) && changed_in_place_without_columns_on_demand?(attr_name)
|
128
135
|
end
|
129
136
|
|
137
|
+
def attribute_changed_in_place_with_columns_on_demand?(attr_name)
|
138
|
+
column_loaded?(attr_name) && attribute_changed_in_place_without_columns_on_demand?(attr_name)
|
139
|
+
end
|
140
|
+
|
130
141
|
def read_attribute_with_columns_on_demand(attr_name, &block)
|
131
142
|
ensure_loaded(attr_name)
|
132
143
|
read_attribute_without_columns_on_demand(attr_name, &block)
|
@@ -137,6 +148,11 @@ module ColumnsOnDemand
|
|
137
148
|
read_attribute_before_type_cast_without_columns_on_demand(attr_name)
|
138
149
|
end
|
139
150
|
|
151
|
+
def _read_attribute_with_columns_on_demand(attr_name, &block)
|
152
|
+
ensure_loaded(attr_name)
|
153
|
+
_read_attribute_without_columns_on_demand(attr_name, &block)
|
154
|
+
end
|
155
|
+
|
140
156
|
def missing_attribute_with_columns_on_demand(attr_name, *args)
|
141
157
|
if columns_to_load_on_demand.include?(attr_name)
|
142
158
|
load_attributes(attr_name)
|
@@ -144,7 +160,7 @@ module ColumnsOnDemand
|
|
144
160
|
missing_attribute_without_columns_on_demand(attr_name, *args)
|
145
161
|
end
|
146
162
|
end
|
147
|
-
|
163
|
+
|
148
164
|
def reload_with_columns_on_demand(*args)
|
149
165
|
reload_without_columns_on_demand(*args).tap do
|
150
166
|
columns_loaded.clear
|
@@ -161,7 +177,7 @@ module ColumnsOnDemand
|
|
161
177
|
end
|
162
178
|
end
|
163
179
|
|
164
|
-
module
|
180
|
+
module RelationMethodsArity2
|
165
181
|
def build_select_with_columns_on_demand(arel, selects)
|
166
182
|
if selects.empty? && klass < ColumnsOnDemand::InstanceMethods
|
167
183
|
build_select_without_columns_on_demand(arel, [default_select(true)])
|
@@ -170,10 +186,29 @@ module ColumnsOnDemand
|
|
170
186
|
end
|
171
187
|
end
|
172
188
|
end
|
189
|
+
|
190
|
+
module RelationMethodsArity1
|
191
|
+
def build_select_with_columns_on_demand(arel)
|
192
|
+
if select_values.empty? && klass < ColumnsOnDemand::InstanceMethods
|
193
|
+
arel.project(*arel_columns([default_select(true)]))
|
194
|
+
else
|
195
|
+
build_select_without_columns_on_demand(arel)
|
196
|
+
arel.project(*arel_columns(select_values.uniq))
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
173
200
|
end
|
174
201
|
|
175
202
|
ActiveRecord::Base.send(:extend, ColumnsOnDemand::BaseMethods)
|
203
|
+
|
176
204
|
if ActiveRecord.const_defined?(:Relation)
|
177
|
-
ActiveRecord::Relation.
|
205
|
+
if ActiveRecord::Relation.instance_method(:build_select).arity == 1
|
206
|
+
# 4.2.1 and above
|
207
|
+
ActiveRecord::Relation.send(:include, ColumnsOnDemand::RelationMethodsArity1)
|
208
|
+
else
|
209
|
+
# 4.2.0 and below
|
210
|
+
ActiveRecord::Relation.send(:include, ColumnsOnDemand::RelationMethodsArity2)
|
211
|
+
end
|
212
|
+
|
178
213
|
ActiveRecord::Relation.alias_method_chain :build_select, :columns_on_demand
|
179
214
|
end
|
data/test/test_helper.rb
CHANGED
@@ -17,10 +17,9 @@ require 'active_record'
|
|
17
17
|
require 'active_record/fixtures'
|
18
18
|
|
19
19
|
begin
|
20
|
-
require '
|
21
|
-
Debugger.start
|
20
|
+
require 'byebug'
|
22
21
|
rescue LoadError
|
23
|
-
#
|
22
|
+
# no debugging for you
|
24
23
|
end
|
25
24
|
|
26
25
|
ActiveRecord::Base.configurations = YAML::load(IO.read(File.join(File.dirname(__FILE__), "database.yml")))
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: columns_on_demand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Bryant
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mysql
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mysql2
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pg
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: sqlite3
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: |
|
@@ -121,7 +121,7 @@ executables: []
|
|
121
121
|
extensions: []
|
122
122
|
extra_rdoc_files: []
|
123
123
|
files:
|
124
|
-
- .gitignore
|
124
|
+
- ".gitignore"
|
125
125
|
- Gemfile
|
126
126
|
- MIT-LICENSE
|
127
127
|
- README
|
@@ -147,17 +147,17 @@ require_paths:
|
|
147
147
|
- lib
|
148
148
|
required_ruby_version: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
159
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.2.2
|
161
161
|
signing_key:
|
162
162
|
specification_version: 4
|
163
163
|
summary: Lazily loads large columns on demand.
|