composite_primary_keys 4.0.0.beta1 → 4.0.0.beta2

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.
data/History.txt CHANGED
@@ -1,7 +1,17 @@
1
+ == 4.0.0.beta2 Not released
2
+ * ActiveRecord 3.1 RC4 compatibility.
3
+ * Fix instantiation of CPK models with included associations
4
+
1
5
  == 4.0.0.beta1 2011-06-09
2
- * ActiveRecord 3.1 compatibility. This required a significant rewrite due to
6
+ * ActiveRecord 3.1 RC1 compatibility. This required a significant rewrite due to
3
7
  all the changes in AR 3.1 versus 3.0.
4
8
 
9
+ == 3.1.10 Not released
10
+ * Bugfix for belongs_to with includes (John Ash)
11
+ * Improved tests for calling clear on a habtm association, which involved (David Rueck)
12
+ * Fixed bug that resulted in unrelated records being deleted when calling (David Rueck)
13
+
14
+
5
15
  == 3.1.9 2011-06-04
6
16
  * Improve HABTM association tests (David Rueck)
7
17
  * Remove deprecated Rake tasks (Charlie Savage)
@@ -0,0 +1,26 @@
1
+ module ActiveRecord
2
+ module Associations
3
+ class JoinDependency
4
+ def instantiate(rows)
5
+ primary_key = join_base.aliased_primary_key
6
+ parents = {}
7
+
8
+ records = rows.map { |model|
9
+ # CPK
10
+ #primary_id = model[primary_key]
11
+ primary_id = if primary_key.kind_of?(Array)
12
+ primary_key.map {|key| model[key]}
13
+ else
14
+ model[primary_key]
15
+ end
16
+ parent = parents[primary_id] ||= join_base.instantiate(model)
17
+ construct(parent, @associations, join_associations, model)
18
+ parent
19
+ }.uniq
20
+
21
+ remove_duplicate_results!(active_record, records, @associations)
22
+ records
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,6 +3,6 @@ module CompositePrimaryKeys
3
3
  MAJOR = 4
4
4
  MINOR = 0
5
5
  TINY = 0
6
- STRING = [MAJOR, MINOR, TINY, 'beta1'].join('.')
6
+ STRING = [MAJOR, MINOR, TINY, 'beta2'].join('.')
7
7
  end
8
8
  end
@@ -26,7 +26,7 @@ $:.unshift(File.dirname(__FILE__)) unless
26
26
 
27
27
  unless defined?(ActiveRecord)
28
28
  require 'rubygems'
29
- gem 'activerecord', '=3.1.0.rc1'
29
+ gem 'activerecord', '=3.1.0.rc4'
30
30
  require 'active_record'
31
31
  end
32
32
 
@@ -39,6 +39,7 @@ require 'active_record/associations/association'
39
39
  require 'active_record/associations/association_scope'
40
40
  require 'active_record/associations/has_and_belongs_to_many_association'
41
41
  require 'active_record/associations/has_many_association'
42
+ require 'active_record/associations/join_dependency'
42
43
  require 'active_record/associations/join_dependency/join_part'
43
44
  require 'active_record/associations/join_dependency/join_association'
44
45
  require 'active_record/associations/preloader/association'
@@ -72,6 +73,7 @@ require 'composite_primary_keys/associations/association'
72
73
  require 'composite_primary_keys/associations/association_scope'
73
74
  require 'composite_primary_keys/associations/has_and_belongs_to_many_association'
74
75
  require 'composite_primary_keys/associations/has_many_association'
76
+ require 'composite_primary_keys/associations/join_dependency'
75
77
  require 'composite_primary_keys/associations/join_dependency/join_part'
76
78
  require 'composite_primary_keys/associations/join_dependency/join_association'
77
79
  require 'composite_primary_keys/associations/preloader/association'
@@ -4,4 +4,7 @@ first_product:
4
4
 
5
5
  second_product:
6
6
  id: 2
7
- name: Product Two
7
+ name: Product Two
8
+ third_product:
9
+ id: 3
10
+ name: Product Three
@@ -6,7 +6,7 @@ class TestAssociations < ActiveSupport::TestCase
6
6
  :departments, :memberships
7
7
 
8
8
  def test_count
9
- assert_equal(2, Product.count(:include => :product_tariffs))
9
+ assert_equal(3, Product.count(:include => :product_tariffs))
10
10
  assert_equal(3, Tariff.count(:include => :product_tariffs))
11
11
 
12
12
  expected = {Date.today => 2,
@@ -45,12 +45,12 @@ class TestAssociations < ActiveSupport::TestCase
45
45
  def test_find_includes_products
46
46
  # Old style
47
47
  products = Product.find(:all, :include => :product_tariffs)
48
- assert_equal(2, products.length)
48
+ assert_equal(3, products.length)
49
49
  assert_equal(3, products.inject(0) {|sum, product| sum + product.product_tariffs.length})
50
50
 
51
51
  # New style
52
52
  products = Product.includes(:product_tariffs)
53
- assert_equal(2, products.length)
53
+ assert_equal(3, products.length)
54
54
  assert_equal(3, products.inject(0) {|sum, product| sum + product.product_tariffs.length})
55
55
  end
56
56
 
@@ -90,15 +90,20 @@ class TestAssociations < ActiveSupport::TestCase
90
90
 
91
91
  def test_has_many_through
92
92
  products = Product.find(:all, :include => :tariffs)
93
- assert_equal(2, products.length)
93
+ assert_equal(3, products.length)
94
94
 
95
95
  tarrifs_length = products.inject(0) {|sum, product| sum + product.tariffs.length}
96
96
  assert_equal(3, tarrifs_length)
97
97
  end
98
98
 
99
+ def test_new_style_includes_with_conditions
100
+ product_tariff = ProductTariff.includes(:tariff).where('tariffs.amount < 5').first
101
+ assert_equal(0, product_tariff.tariff.amount)
102
+ end
103
+
99
104
  def test_find_product_includes
100
105
  products = Product.find(:all, :include => {:product_tariffs => :tariff})
101
- assert_equal(2, products.length)
106
+ assert_equal(3, products.length)
102
107
 
103
108
  product_tariffs_length = products.inject(0) {|sum, product| sum + product.product_tariffs.length}
104
109
  assert_equal(3, product_tariffs_length)
data/test/test_habtm.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'abstract_unit'
2
+ require 'ruby-debug'
2
3
 
3
4
  class TestHabtm < ActiveSupport::TestCase
4
5
 
@@ -26,6 +27,8 @@ class TestHabtm < ActiveSupport::TestCase
26
27
  subway.products << first_product << second_product
27
28
  assert_equal 2, subway.products.size
28
29
  subway.products.clear
30
+ # reload to force reload of associations
31
+ subway = restaurants(:subway_one)
29
32
  assert_equal 0, subway.products.size
30
33
  end
31
34
 
@@ -36,7 +39,36 @@ class TestHabtm < ActiveSupport::TestCase
36
39
  product.restaurants << subway_one << subway_two
37
40
  assert_equal 2, product.restaurants.size
38
41
  product.restaurants.clear
42
+ # reload to force reload of associations
43
+ product = products(:first_product)
39
44
  assert_equal 0, product.restaurants.size
40
45
  end
41
46
 
47
+ # tests case reported in issue #39 where a bug resulted in
48
+ # deletion of incorrect join table records because the owner's id
49
+ # was assumed to be an array and is not in this case
50
+ # and evaluates to a useable but incorrect value
51
+ def test_habtm_clear_cpk_association_side_only_deletes_only_correct_records
52
+ product_one = Product.find(1)
53
+ product_three = Product.find(3)
54
+ subway_one = restaurants(:subway_one)
55
+ subway_two = restaurants(:subway_two)
56
+ product_one.restaurants << subway_one << subway_two
57
+ product_three.restaurants << subway_one << subway_two
58
+ assert_equal 2, product_one.restaurants.size
59
+ assert_equal 2, product_three.restaurants.size
60
+
61
+ # if product_three's id is incorrectly assumed to be
62
+ # an array it will be evaluated as 3[0], which is 1, which would
63
+ # delete product_one's associations rather than product_three's
64
+ product_three.restaurants.clear
65
+
66
+ # reload to force reload of associations
67
+ product_one = Product.find(1)
68
+ product_three = Product.find(3)
69
+
70
+ assert_equal 0, product_three.restaurants.size
71
+ assert_equal 2, product_one.restaurants.size
72
+ end
73
+
42
74
  end
@@ -31,7 +31,7 @@ class TestMiscellaneous < ActiveSupport::TestCase
31
31
  end
32
32
 
33
33
  def test_count
34
- assert_equal 2, Product.count
34
+ assert_equal 3, Product.count
35
35
  end
36
36
 
37
- end
37
+ end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: composite_primary_keys
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196257
4
+ hash: 62196263
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 4
8
8
  - 0
9
9
  - 0
10
10
  - beta
11
- - 1
12
- version: 4.0.0.beta1
11
+ - 2
12
+ version: 4.0.0.beta2
13
13
  platform: ruby
14
14
  authors:
15
15
  - Dr Nic Williams
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2011-06-09 00:00:00 Z
21
+ date: 2011-06-21 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: activerecord
@@ -28,14 +28,14 @@ dependencies:
28
28
  requirements:
29
29
  - - "="
30
30
  - !ruby/object:Gem::Version
31
- hash: 15424103
31
+ hash: 15424109
32
32
  segments:
33
33
  - 3
34
34
  - 1
35
35
  - 0
36
36
  - rc
37
- - 1
38
- version: 3.1.0.rc1
37
+ - 4
38
+ version: 3.1.0.rc4
39
39
  type: :runtime
40
40
  version_requirements: *id001
41
41
  description: Composite key support for ActiveRecord 3
@@ -61,6 +61,7 @@ files:
61
61
  - lib/composite_primary_keys/associations/has_many_association.rb
62
62
  - lib/composite_primary_keys/associations/join_dependency/join_association.rb
63
63
  - lib/composite_primary_keys/associations/join_dependency/join_part.rb
64
+ - lib/composite_primary_keys/associations/join_dependency.rb
64
65
  - lib/composite_primary_keys/associations/preloader/association.rb
65
66
  - lib/composite_primary_keys/associations/preloader/belongs_to.rb
66
67
  - lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb