composite_primary_keys 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ == 1.0.2 2008-06-07
2
+
3
+ * fix for has many through when through association has composite keys
4
+
1
5
  == 1.0.1 2008-06-06
2
6
 
3
7
  * Oracle fixes
@@ -57,7 +57,8 @@ module CompositePrimaryKeys
57
57
  #add conditions from reflection!
58
58
  through_records.first.class.preload_associations(through_records, source, reflection.options)
59
59
  through_records.each do |through_record|
60
- add_preloaded_records_to_collection(id_to_record_map[through_record[through_primary_key].to_s], reflection.name, through_record.send(source))
60
+ key = through_primary_key.to_s.split(CompositePrimaryKeys::ID_SEP).map{|k| through_record.send(k)}.join(CompositePrimaryKeys::ID_SEP)
61
+ add_preloaded_records_to_collection(id_to_record_map[key], reflection.name, through_record.send(source))
61
62
  end
62
63
  end
63
64
  else
@@ -2,7 +2,7 @@ module CompositePrimaryKeys
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -135,4 +135,27 @@ create table restaurants_suburbs (
135
135
  store_id int(11) not null,
136
136
  city_id int(11) not null,
137
137
  suburb_id int(11) not null
138
+ ) TYPE=InnoDB;
139
+
140
+ create table dorms (
141
+ id int(11) not null auto_increment,
142
+ primary key(id)
143
+ ) TYPE=InnoDB;
144
+
145
+ create table rooms (
146
+ dorm_id int(11) not null,
147
+ room_id int(11) not null,
148
+ primary key (dorm_id, room_id)
149
+ ) TYPE=InnoDB;
150
+
151
+ create table room_attributes (
152
+ id int(11) not null auto_increment,
153
+ name varchar(50),
154
+ primary key(id)
155
+ ) TYPE=InnoDB;
156
+
157
+ create table room_attribute_assignments (
158
+ dorm_id int(11) not null,
159
+ room_id int(11) not null,
160
+ room_attribute_id integer not null
138
161
  ) TYPE=InnoDB;
@@ -124,4 +124,25 @@ create table restaurants_suburbs (
124
124
  store_id integer not null,
125
125
  city_id integer not null,
126
126
  suburb_id integer not null
127
- );
127
+ );
128
+
129
+ create table dorms (
130
+ id integer not null primary key autoincrement
131
+ );
132
+
133
+ create table rooms (
134
+ dorm_id integer not null,
135
+ room_id integer not null,
136
+ primary key (dorm_id, room_id)
137
+ );
138
+
139
+ create table room_attributes (
140
+ id integer not null primary key autoincrement,
141
+ name varchar(50)
142
+ );
143
+
144
+ create table room_attribute_assignments (
145
+ dorm_id integer not null,
146
+ room_id integer not null,
147
+ room_attribute_id integer not null
148
+ );
@@ -5,9 +5,14 @@ require 'fixtures/product_tariff'
5
5
  require 'fixtures/suburb'
6
6
  require 'fixtures/street'
7
7
  require 'fixtures/restaurant'
8
+ require 'fixtures/dorm'
9
+ require 'fixtures/room'
10
+ require 'fixtures/room_attribute'
11
+ require 'fixtures/room_attribute_assignment'
8
12
 
9
13
  class TestAssociations < Test::Unit::TestCase
10
- fixtures :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs
14
+ fixtures :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs,
15
+ :dorms, :rooms, :room_attributes, :room_attribute_assignments
11
16
 
12
17
  def test_quoted_table_columns
13
18
  assert_equal "product_tariffs.product_id,product_tariffs.tariff_id,product_tariffs.tariff_start_date",
@@ -94,6 +99,13 @@ class TestAssociations < Test::Unit::TestCase
94
99
  assert_equal 3, @products.inject(0) {|sum, product| sum + product.instance_variable_get('@tariffs').length},
95
100
  "Incorrect number of tariffs returned"
96
101
  end
102
+
103
+ def test_has_many_through_when_through_association_is_composite
104
+ dorm = Dorm.find(:first)
105
+ assert_equal 1, dorm.rooms.length
106
+ assert_equal 1, dorm.rooms.first.room_attributes.length
107
+ assert_equal 'keg', dorm.rooms.first.room_attributes.first.name
108
+ end
97
109
 
98
110
  def test_associations_with_conditions
99
111
  @suburb = Suburb.find([2, 1])
Binary file
@@ -33,7 +33,7 @@
33
33
  <h1>Composite Primary Keys</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/compositekeys"; return false'>
35
35
  Get Version
36
- <a href="http://rubyforge.org/projects/compositekeys" class="numbers">1.0.1</a>
36
+ <a href="http://rubyforge.org/projects/compositekeys" class="numbers">1.0.2</a>
37
37
  </div>
38
38
  <h1>&#x2192; Ruby on Rails</h1>
39
39
 
@@ -1,3 +1,3 @@
1
1
  // Announcement JS file
2
- var version = "1.0.1";
2
+ var version = "1.0.2";
3
3
  MagicAnnouncement.show('compositekeys', version);
@@ -1,4 +1,4 @@
1
1
  // Version JS file
2
- var version = "1.0.1";
2
+ var version = "1.0.2";
3
3
 
4
4
  document.write(" - " + version);
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: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dr Nic Williams
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-06 00:00:00 -05:00
12
+ date: 2008-06-07 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency