composite_primary_keys 4.0.0.beta8 → 4.0.0.beta9
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
@@ -21,6 +21,51 @@ module ActiveRecord
|
|
21
21
|
remove_duplicate_results!(active_record, records, @associations)
|
22
22
|
records
|
23
23
|
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def construct_association(record, join_part, row)
|
28
|
+
return if record.id.to_s != join_part.parent.record_id(row).to_s
|
29
|
+
|
30
|
+
macro = join_part.reflection.macro
|
31
|
+
if macro == :has_one
|
32
|
+
return if record.association_cache.key?(join_part.reflection.name)
|
33
|
+
# CPK
|
34
|
+
# association = join_part.instantiate(row) unless row[join_part.aliased_primary_key].nil?
|
35
|
+
association = association_for_primary_key_from_row(join_part, row)
|
36
|
+
|
37
|
+
set_target_and_inverse(join_part, association, record)
|
38
|
+
else
|
39
|
+
# CPK
|
40
|
+
# association = join_part.instantiate(row) unless row[join_part.aliased_primary_key].nil?
|
41
|
+
association = association_for_primary_key_from_row(join_part, row)
|
42
|
+
|
43
|
+
case macro
|
44
|
+
when :has_many, :has_and_belongs_to_many
|
45
|
+
other = record.association(join_part.reflection.name)
|
46
|
+
other.loaded!
|
47
|
+
other.target.push(association) if association
|
48
|
+
other.set_inverse_instance(association)
|
49
|
+
when :belongs_to
|
50
|
+
set_target_and_inverse(join_part, association, record)
|
51
|
+
else
|
52
|
+
raise ConfigurationError, "unknown macro: #{join_part.reflection.macro}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
association
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def association_for_primary_key_from_row(join_part, row)
|
61
|
+
result = nil
|
62
|
+
if (cpk = join_part.aliased_primary_key).is_a?(Array)
|
63
|
+
result = join_part.instantiate(row) if cpk.detect {|pk| row[pk].nil? }.nil?
|
64
|
+
else
|
65
|
+
result = join_part.instantiate(row) unless row[join_part.aliased_primary_key].nil?
|
66
|
+
end
|
67
|
+
result
|
68
|
+
end
|
24
69
|
end
|
25
70
|
end
|
26
71
|
end
|
data/test/test_associations.rb
CHANGED
@@ -42,7 +42,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# Its not generating the instances of associated classes from the rows
|
45
|
-
def
|
45
|
+
def test_find_includes
|
46
46
|
# Old style
|
47
47
|
products = Product.find(:all, :include => :product_tariffs)
|
48
48
|
assert_equal(3, products.length)
|
@@ -54,6 +54,25 @@ class TestAssociations < ActiveSupport::TestCase
|
|
54
54
|
assert_equal(3, products.inject(0) {|sum, product| sum + product.product_tariffs.length})
|
55
55
|
end
|
56
56
|
|
57
|
+
def test_find_includes_eager_loading
|
58
|
+
product = products(:second_product)
|
59
|
+
product_tarrif = product_tariffs(:second_free)
|
60
|
+
|
61
|
+
# Old style, include a where clause to force eager loading
|
62
|
+
products = Product.find(:all, :include => :product_tariffs,
|
63
|
+
:conditions => ["product_tariffs.product_id = ?", product.id])
|
64
|
+
|
65
|
+
assert_equal(1, products.length)
|
66
|
+
assert_equal(product, products.first)
|
67
|
+
assert_equal([product_tarrif], product.product_tariffs)
|
68
|
+
|
69
|
+
# New style
|
70
|
+
products = Product.includes(:product_tariffs).where('product_tariffs.product_id' => product.id)
|
71
|
+
assert_equal(1, products.length)
|
72
|
+
assert_equal(product, products.first)
|
73
|
+
assert_equal([product_tarrif], product.product_tariffs)
|
74
|
+
end
|
75
|
+
|
57
76
|
def test_find_includes_tariffs
|
58
77
|
# Old style
|
59
78
|
tariffs = Tariff.find(:all, :include => :product_tariffs)
|
@@ -234,4 +253,4 @@ class TestAssociations < ActiveSupport::TestCase
|
|
234
253
|
assert_equal(1, memberships.length)
|
235
254
|
assert_equal([1,1], memberships[0].id)
|
236
255
|
end
|
237
|
-
end
|
256
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: composite_primary_keys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta9
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,15 +14,15 @@ date: 2011-08-22 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &4158840 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.1.0.
|
22
|
+
version: 3.1.0.rc6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *4158840
|
26
26
|
description: Composite key support for ActiveRecord 3
|
27
27
|
email:
|
28
28
|
- drnicwilliams@gmail.com
|