activerecord 2.3.4 → 2.3.5

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 (37) hide show
  1. data/CHANGELOG +8 -0
  2. data/Rakefile +1 -1
  3. data/lib/active_record/associations.rb +10 -7
  4. data/lib/active_record/associations/association_proxy.rb +7 -8
  5. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +2 -2
  6. data/lib/active_record/associations/has_one_association.rb +9 -0
  7. data/lib/active_record/autosave_association.rb +32 -23
  8. data/lib/active_record/base.rb +7 -0
  9. data/lib/active_record/connection_adapters/mysql_adapter.rb +6 -2
  10. data/lib/active_record/fixtures.rb +1 -1
  11. data/lib/active_record/locking/optimistic.rb +0 -33
  12. data/lib/active_record/locking/pessimistic.rb +0 -22
  13. data/lib/active_record/nested_attributes.rb +101 -38
  14. data/lib/active_record/validations.rb +35 -35
  15. data/lib/active_record/version.rb +1 -1
  16. data/lib/activerecord.rb +1 -0
  17. data/test/cases/associations/has_many_associations_test.rb +12 -0
  18. data/test/cases/associations/has_many_through_associations_test.rb +22 -0
  19. data/test/cases/associations/has_one_associations_test.rb +21 -0
  20. data/test/cases/autosave_association_test.rb +230 -11
  21. data/test/cases/base_test.rb +2 -0
  22. data/test/cases/connection_test_mysql.rb +8 -0
  23. data/test/cases/fixtures_test.rb +2 -2
  24. data/test/cases/locking_test.rb +0 -18
  25. data/test/cases/nested_attributes_test.rb +109 -37
  26. data/test/cases/reflection_test.rb +3 -3
  27. data/test/cases/validations_i18n_test.rb +8 -0
  28. data/test/cases/validations_test.rb +37 -9
  29. data/test/fixtures/accounts.yml +1 -0
  30. data/test/fixtures/fixture_database.sqlite3 +0 -0
  31. data/test/fixtures/fixture_database_2.sqlite3 +0 -0
  32. data/test/models/company.rb +10 -0
  33. data/test/models/pirate.rb +9 -2
  34. data/test/models/treasure.rb +2 -0
  35. data/test/schema/mysql_specific_schema.rb +12 -0
  36. data/test/schema/schema.rb +1 -0
  37. metadata +4 -4
@@ -2,6 +2,7 @@ signals37:
2
2
  id: 1
3
3
  firm_id: 1
4
4
  credit_limit: 50
5
+ firm_name: 37signals
5
6
 
6
7
  unknown:
7
8
  id: 2
@@ -64,6 +64,8 @@ class Firm < Company
64
64
  has_many :readonly_clients, :class_name => 'Client', :readonly => true
65
65
  has_many :clients_using_primary_key, :class_name => 'Client',
66
66
  :primary_key => 'name', :foreign_key => 'firm_name'
67
+ has_many :clients_using_primary_key_with_delete_all, :class_name => 'Client',
68
+ :primary_key => 'name', :foreign_key => 'firm_name', :dependent => :delete_all
67
69
  has_many :clients_grouped_by_firm_id, :class_name => "Client", :group => "firm_id", :select => "firm_id"
68
70
  has_many :clients_grouped_by_name, :class_name => "Client", :group => "name", :select => "name"
69
71
 
@@ -72,7 +74,14 @@ class Firm < Company
72
74
  has_one :account_with_select, :foreign_key => "firm_id", :select => "id, firm_id", :class_name=>'Account'
73
75
  has_one :readonly_account, :foreign_key => "firm_id", :class_name => "Account", :readonly => true
74
76
  has_one :account_using_primary_key, :primary_key => "firm_id", :class_name => "Account"
77
+ has_one :account_using_foreign_and_primary_keys, :foreign_key => "firm_name", :primary_key => "name", :class_name => "Account"
75
78
  has_one :deletable_account, :foreign_key => "firm_id", :class_name => "Account", :dependent => :delete
79
+
80
+ has_one :account_limit_500_with_hash_conditions, :foreign_key => "firm_id", :class_name => "Account", :conditions => { :credit_limit => 500 }
81
+
82
+ has_one :unautosaved_account, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
83
+ has_many :accounts
84
+ has_many :unautosaved_accounts, :foreign_key => "firm_id", :class_name => 'Account', :autosave => false
76
85
  end
77
86
 
78
87
  class DependentFirm < Company
@@ -136,6 +145,7 @@ end
136
145
 
137
146
  class Account < ActiveRecord::Base
138
147
  belongs_to :firm
148
+ belongs_to :unautosaved_firm, :foreign_key => "firm_id", :class_name => "Firm", :autosave => false
139
149
 
140
150
  def self.destroyed_account_ids
141
151
  @destroyed_account_ids ||= Hash.new { |h,k| h[k] = [] }
@@ -1,6 +1,8 @@
1
1
  class Pirate < ActiveRecord::Base
2
- belongs_to :parrot
3
- has_and_belongs_to_many :parrots
2
+ belongs_to :parrot, :validate => true
3
+ belongs_to :non_validated_parrot, :class_name => 'Parrot'
4
+ has_and_belongs_to_many :parrots, :validate => true
5
+ has_and_belongs_to_many :non_validated_parrots, :class_name => 'Parrot'
4
6
  has_and_belongs_to_many :parrots_with_method_callbacks, :class_name => "Parrot",
5
7
  :before_add => :log_before_add,
6
8
  :after_add => :log_after_add,
@@ -17,6 +19,7 @@ class Pirate < ActiveRecord::Base
17
19
 
18
20
  # These both have :autosave enabled because accepts_nested_attributes_for is used on them.
19
21
  has_one :ship
22
+ has_one :non_validated_ship, :class_name => 'Ship'
20
23
  has_many :birds
21
24
  has_many :birds_with_method_callbacks, :class_name => "Bird",
22
25
  :before_add => :log_before_add,
@@ -40,6 +43,10 @@ class Pirate < ActiveRecord::Base
40
43
  @ship_log ||= []
41
44
  end
42
45
 
46
+ def reject_empty_ships_on_create(attributes)
47
+ attributes.delete('_reject_me_if_new').present? && new_record?
48
+ end
49
+
43
50
  private
44
51
  def log_before_add(record)
45
52
  log(record, "before_adding_method")
@@ -3,4 +3,6 @@ class Treasure < ActiveRecord::Base
3
3
  belongs_to :looter, :polymorphic => true
4
4
 
5
5
  has_many :price_estimates, :as => :estimate_of
6
+
7
+ accepts_nested_attributes_for :looter
6
8
  end
@@ -9,4 +9,16 @@ ActiveRecord::Schema.define do
9
9
  t.text :medium_text, :limit => 16777215
10
10
  t.text :long_text, :limit => 2147483647
11
11
  end
12
+
13
+ ActiveRecord::Base.connection.execute <<-SQL
14
+ DROP PROCEDURE IF EXISTS ten;
15
+ SQL
16
+
17
+ ActiveRecord::Base.connection.execute <<-SQL
18
+ CREATE PROCEDURE ten() SQL SECURITY INVOKER
19
+ BEGIN
20
+ select 10;
21
+ END
22
+ SQL
23
+
12
24
  end
@@ -23,6 +23,7 @@ ActiveRecord::Schema.define do
23
23
  # unless the ordering matters. In which case, define them below
24
24
  create_table :accounts, :force => true do |t|
25
25
  t.integer :firm_id
26
+ t.string :firm_name
26
27
  t.integer :credit_limit
27
28
  end
28
29
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.4
4
+ version: 2.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ autorequire: active_record
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-04 00:00:00 +12:00
12
+ date: 2009-11-27 00:00:00 +13:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 2.3.4
23
+ version: 2.3.5
24
24
  version:
25
25
  description: Implements the ActiveRecord pattern (Fowler, PoEAA) for ORM. It ties database tables and classes together for business objects, like Customer or Subscription, that can find, save, and destroy themselves without resorting to manual SQL.
26
26
  email: david@loudthinking.com
@@ -390,7 +390,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
390
390
  requirements: []
391
391
 
392
392
  rubyforge_project: activerecord
393
- rubygems_version: 1.3.2
393
+ rubygems_version: 1.3.5
394
394
  signing_key:
395
395
  specification_version: 3
396
396
  summary: Implements the ActiveRecord pattern for ORM.