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.

Files changed (28) hide show
  1. data/CHANGELOG.md +154 -6558
  2. data/examples/performance.rb +32 -37
  3. data/lib/active_record/associations.rb +8 -5
  4. data/lib/active_record/associations/collection_association.rb +5 -3
  5. data/lib/active_record/associations/has_many_through_association.rb +14 -0
  6. data/lib/active_record/associations/has_one_association.rb +16 -14
  7. data/lib/active_record/associations/preloader.rb +14 -10
  8. data/lib/active_record/associations/preloader/association.rb +1 -3
  9. data/lib/active_record/attribute_methods/dirty.rb +3 -3
  10. data/lib/active_record/attribute_methods/time_zone_conversion.rb +14 -5
  11. data/lib/active_record/base.rb +4 -5
  12. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +10 -4
  13. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +1 -0
  14. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
  15. data/lib/active_record/connection_adapters/column.rb +24 -9
  16. data/lib/active_record/connection_adapters/postgresql_adapter.rb +29 -33
  17. data/lib/active_record/connection_adapters/sqlite_adapter.rb +3 -3
  18. data/lib/active_record/counter_cache.rb +5 -1
  19. data/lib/active_record/explain_subscriber.rb +2 -1
  20. data/lib/active_record/migration.rb +2 -2
  21. data/lib/active_record/persistence.rb +9 -8
  22. data/lib/active_record/railties/databases.rake +6 -6
  23. data/lib/active_record/scoping/named.rb +2 -2
  24. data/lib/active_record/store.rb +2 -0
  25. data/lib/active_record/timestamp.rb +1 -0
  26. data/lib/active_record/transactions.rb +22 -3
  27. data/lib/active_record/version.rb +2 -2
  28. metadata +9 -12
@@ -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
@@ -39,6 +39,7 @@ module ActiveRecord
39
39
 
40
40
  def initialize_dup(other)
41
41
  clear_timestamp_attributes
42
+ super
42
43
  end
43
44
 
44
45
  private
@@ -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 = @attributes.frozen?
331
- @attributes = @attributes.dup if was_frozen
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)
@@ -2,8 +2,8 @@ module ActiveRecord
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 2
5
- TINY = 8
6
- PRE = nil
5
+ TINY = 9
6
+ PRE = "rc1"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
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.8
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-08-09 00:00:00.000000000 Z
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.8
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.8
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.8
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.8
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: '0'
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