columns_on_demand 4.2.0 → 4.2.1

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