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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e2af8b1aaf2ba19e065727ca50a8340e15ae2da
4
- data.tar.gz: 42febaa5ebfdbf3ad1cbee5b6263ddc9593cfa18
3
+ metadata.gz: b05f09b9906904849565691a625d04746a38abe5
4
+ data.tar.gz: 9050e528adabcb488dc0aaf1f987f9c49a346e3b
5
5
  SHA512:
6
- metadata.gz: 319c73384f3d7738430c69a5ca2c5c21c48f9c75ed1253e75c3b509b7793996607e383aaaecc9fb929dd3f3d9cd70a7f30f46b77412e93c7b392601943a51883
7
- data.tar.gz: 392e3d12c891be2a2181994c50e53eb9c1d450f47f84c97f0ef7a65ca0a0ae8ebf9decce40029228e46265372d702e729b1d854468dcbb9f9420de148a69cbd5
6
+ metadata.gz: dd71294a17d5ee86d403c7df62436f03dc48e2b2c1fb7b07b7198493239dbc643c797021a2e0e3041ef2796c415a304701eb0ec2a0395e40e7e0fd73a4548143
7
+ data.tar.gz: 189374aeae895a2e0a19d420e794ab545bf50ecae7f8734135d837dfc6f119eca4f9c79369b7d0f7a481b57fb928a1461bb7fc5422d0439ccfca80a88c18754e
data/Gemfile CHANGED
@@ -10,8 +10,4 @@ gemspec
10
10
  # Git. Remember to move these dependencies to your gemspec before releasing
11
11
  # your gem to rubygems.org.
12
12
 
13
- # To use debugger
14
- # gem 'ruby-debug19', :require => 'ruby-debug'
15
- # gem 'ruby-debug'
16
-
17
13
  gem 'rails', ENV['RAILS_VERSION']
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 and 3.1.8, on Ruby 2.0.0.
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
- Note that 3.0 and 3.1 have ActiveRecord regressions that will affect sqlite users.
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-2014 Will Bryant, Sekuda Ltd, released under the MIT license
47
+ Copyright (c) 2008-2015 Will Bryant, Sekuda Ltd, released under the MIT license
@@ -1,3 +1,3 @@
1
1
  module ColumnsOnDemand
2
- VERSION = '4.2.0'
2
+ VERSION = '4.2.1'
3
3
  end
@@ -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
- alias_method_chain :changed_in_place?, :columns_on_demand if ActiveRecord::AttributeMethods::Dirty.instance_methods.include?(:changed_attributes)
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 RelationMethods
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.send(:include, ColumnsOnDemand::RelationMethods)
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 'ruby-debug'
21
- Debugger.start
20
+ require 'byebug'
22
21
  rescue LoadError
23
- # ruby-debug not installed, no debugging for you
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.0
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: 2014-09-08 00:00:00.000000000 Z
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.0.14
160
+ rubygems_version: 2.2.2
161
161
  signing_key:
162
162
  specification_version: 4
163
163
  summary: Lazily loads large columns on demand.