activerecord 3.2.8 → 3.2.9.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- data/CHANGELOG.md +154 -6558
- data/examples/performance.rb +32 -37
- data/lib/active_record/associations.rb +8 -5
- data/lib/active_record/associations/collection_association.rb +5 -3
- data/lib/active_record/associations/has_many_through_association.rb +14 -0
- data/lib/active_record/associations/has_one_association.rb +16 -14
- data/lib/active_record/associations/preloader.rb +14 -10
- data/lib/active_record/associations/preloader/association.rb +1 -3
- data/lib/active_record/attribute_methods/dirty.rb +3 -3
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +14 -5
- data/lib/active_record/base.rb +4 -5
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +10 -4
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +1 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
- data/lib/active_record/connection_adapters/column.rb +24 -9
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +29 -33
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +3 -3
- data/lib/active_record/counter_cache.rb +5 -1
- data/lib/active_record/explain_subscriber.rb +2 -1
- data/lib/active_record/migration.rb +2 -2
- data/lib/active_record/persistence.rb +9 -8
- data/lib/active_record/railties/databases.rake +6 -6
- data/lib/active_record/scoping/named.rb +2 -2
- data/lib/active_record/store.rb +2 -0
- data/lib/active_record/timestamp.rb +1 -0
- data/lib/active_record/transactions.rb +22 -3
- data/lib/active_record/version.rb +2 -2
- metadata +9 -12
data/lib/active_record/store.rb
CHANGED
@@ -36,11 +36,13 @@ module ActiveRecord
|
|
36
36
|
def store_accessor(store_attribute, *keys)
|
37
37
|
Array(keys).flatten.each do |key|
|
38
38
|
define_method("#{key}=") do |value|
|
39
|
+
send("#{store_attribute}=", {}) unless send(store_attribute).is_a?(Hash)
|
39
40
|
send(store_attribute)[key] = value
|
40
41
|
send("#{store_attribute}_will_change!")
|
41
42
|
end
|
42
43
|
|
43
44
|
define_method(key) do
|
45
|
+
send("#{store_attribute}=", {}) unless send(store_attribute).is_a?(Hash)
|
44
46
|
send(store_attribute)[key]
|
45
47
|
end
|
46
48
|
end
|
@@ -208,6 +208,21 @@ module ActiveRecord
|
|
208
208
|
connection.transaction(options, &block)
|
209
209
|
end
|
210
210
|
|
211
|
+
# This callback is called after a record has been created, updated, or destroyed.
|
212
|
+
#
|
213
|
+
# You can specify that the callback should only be fired by a certain action with
|
214
|
+
# the +:on+ option:
|
215
|
+
#
|
216
|
+
# after_commit :do_foo, :on => :create
|
217
|
+
# after_commit :do_bar, :on => :update
|
218
|
+
# after_commit :do_baz, :on => :destroy
|
219
|
+
#
|
220
|
+
# Also, to have the callback fired on create and update, but not on destroy:
|
221
|
+
#
|
222
|
+
# after_commit :do_zoo, :if => :persisted?
|
223
|
+
#
|
224
|
+
# Note that transactional fixtures do not play well with this feature. Please
|
225
|
+
# use the +test_after_commit+ gem to have these hooks fired in tests.
|
211
226
|
def after_commit(*args, &block)
|
212
227
|
options = args.last
|
213
228
|
if options.is_a?(Hash) && options[:on]
|
@@ -217,6 +232,9 @@ module ActiveRecord
|
|
217
232
|
set_callback(:commit, :after, *args, &block)
|
218
233
|
end
|
219
234
|
|
235
|
+
# This callback is called after a create, update, or destroy are rolled back.
|
236
|
+
#
|
237
|
+
# Please check the documentation of +after_commit+ for options.
|
220
238
|
def after_rollback(*args, &block)
|
221
239
|
options = args.last
|
222
240
|
if options.is_a?(Hash) && options[:on]
|
@@ -311,6 +329,7 @@ module ActiveRecord
|
|
311
329
|
@_start_transaction_state[:destroyed] = @destroyed
|
312
330
|
end
|
313
331
|
@_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) + 1
|
332
|
+
@_start_transaction_state[:frozen?] = @attributes.frozen?
|
314
333
|
end
|
315
334
|
|
316
335
|
# Clear the new record state and id of a record.
|
@@ -325,10 +344,10 @@ module ActiveRecord
|
|
325
344
|
def restore_transaction_record_state(force = false) #:nodoc:
|
326
345
|
if defined?(@_start_transaction_state)
|
327
346
|
@_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) - 1
|
328
|
-
if @_start_transaction_state[:level] < 1
|
347
|
+
if @_start_transaction_state[:level] < 1 || force
|
329
348
|
restore_state = remove_instance_variable(:@_start_transaction_state)
|
330
|
-
was_frozen =
|
331
|
-
@attributes = @attributes.dup if
|
349
|
+
was_frozen = restore_state[:frozen?]
|
350
|
+
@attributes = @attributes.dup if @attributes.frozen?
|
332
351
|
@new_record = restore_state[:new_record]
|
333
352
|
@destroyed = restore_state[:destroyed]
|
334
353
|
if restore_state.has_key?(:id)
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
5
|
-
prerelease:
|
4
|
+
version: 3.2.9.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Heinemeier Hansson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.2.
|
21
|
+
version: 3.2.9.rc1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.2.
|
29
|
+
version: 3.2.9.rc1
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: activemodel
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - '='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3.2.
|
37
|
+
version: 3.2.9.rc1
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 3.2.
|
45
|
+
version: 3.2.9.rc1
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: arel
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,12 +250,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
250
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
251
|
none: false
|
252
252
|
requirements:
|
253
|
-
- - ! '
|
253
|
+
- - ! '>'
|
254
254
|
- !ruby/object:Gem::Version
|
255
|
-
version:
|
256
|
-
segments:
|
257
|
-
- 0
|
258
|
-
hash: -3836965031648198362
|
255
|
+
version: 1.3.1
|
259
256
|
requirements: []
|
260
257
|
rubyforge_project:
|
261
258
|
rubygems_version: 1.8.24
|