composite_primary_keys 3.1.8 → 3.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/History.txt +16 -12
  2. data/Rakefile +2 -4
  3. data/lib/composite_primary_keys/version.rb +1 -1
  4. data/test/connections/native_mysql/connection.rb +1 -1
  5. data/test/connections/native_oracle/connection.rb +1 -1
  6. data/test/connections/native_oracle_enhanced/connection.rb +1 -1
  7. data/test/connections/native_postgresql/connection.rb +1 -1
  8. data/test/connections/native_sqlite/connection.rb +1 -1
  9. data/test/fixtures/article.rb +1 -1
  10. data/test/fixtures/comment.rb +0 -1
  11. data/test/fixtures/db_definitions/db2-create-tables.sql +4 -13
  12. data/test/fixtures/db_definitions/db2-drop-tables.sql +1 -1
  13. data/test/fixtures/db_definitions/mysql.sql +5 -13
  14. data/test/fixtures/db_definitions/oracle.drop.sql +1 -2
  15. data/test/fixtures/db_definitions/oracle.sql +4 -13
  16. data/test/fixtures/db_definitions/postgresql.sql +5 -13
  17. data/test/fixtures/db_definitions/sqlite.sql +4 -13
  18. data/test/fixtures/department.rb +1 -0
  19. data/test/fixtures/departments.yml +5 -1
  20. data/test/fixtures/employees.yml +12 -2
  21. data/test/fixtures/membership.rb +0 -2
  22. data/test/fixtures/product.rb +4 -2
  23. data/test/fixtures/restaurant.rb +4 -1
  24. data/test/fixtures/restaurants.yml +8 -1
  25. data/test/fixtures/tariff.rb +0 -1
  26. data/test/fixtures/tariffs.yml +2 -0
  27. data/test/test_associations.rb +6 -23
  28. data/test/test_attribute_methods.rb +5 -6
  29. data/test/test_delete.rb +35 -2
  30. data/test/test_habtm.rb +42 -0
  31. data/test/test_ids.rb +0 -8
  32. data/test/test_suite.rb +1 -0
  33. metadata +6 -23
  34. data/lib/composite_primary_keys/associations/association.rb +0 -23
  35. data/lib/composite_primary_keys/associations/association_scope.rb +0 -67
  36. data/lib/composite_primary_keys/associations/join_dependency/join_association.rb +0 -22
  37. data/lib/composite_primary_keys/associations/join_dependency/join_part.rb +0 -39
  38. data/lib/composite_primary_keys/associations/preloader/association.rb +0 -61
  39. data/lib/composite_primary_keys/associations/preloader/belongs_to.rb +0 -13
  40. data/lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb +0 -46
  41. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +0 -19
  42. data/lib/composite_primary_keys/attribute_methods/read.rb +0 -88
  43. data/lib/composite_primary_keys/attribute_methods/write.rb +0 -40
  44. data/lib/composite_primary_keys/composite_predicates.rb +0 -44
  45. data/lib/composite_primary_keys/named_scope.rb +0 -29
  46. data/lib/composite_primary_keys/relation/finder_methods.rb +0 -119
  47. data/lib/composite_primary_keys/relation/query_methods.rb +0 -24
  48. data/test/fixtures/article_group.rb +0 -4
  49. data/test/fixtures/article_groups.yml +0 -7
  50. data/test/fixtures/kitchen_sink.rb +0 -3
  51. data/test/fixtures/kitchen_sinks.yml +0 -5
  52. data/test/fixtures/way_node.rb +0 -3
@@ -1,30 +1,34 @@
1
+ == 3.1.9 2011-06-04
2
+ * Improve HABTM association tests (David Rueck)
3
+ * Remove deprecated Rake tasks (Charlie Savage)
4
+
1
5
  == 3.1.8 2011-05-26
2
6
  * Fix calling clear on a HABTM associate (David Rueck)
3
7
 
4
8
  == 3.1.7 2011-05-26
5
9
  * Support regular AR models having one or many composite models (Jacques Fuentes)
6
- * Minor test cleanup
7
- * Make version requirements more explicit
8
- * Remove Arel extensions used for calculations
10
+ * Minor test cleanup (Charlie Savage)
11
+ * Make version requirements more explicit (Charlie Savage)
12
+ * Remove Arel extensions used for calculations (Charlie Savage)
9
13
 
10
14
  == 3.1.6 2011-04-03
11
- * Updated belongs_to association to be a bit more flexible with non-CPK
15
+ * Updated belongs_to association to be a bit more flexible with non-CPK (Charlie Savage)
12
16
  base models (Jacques Fuentes)
13
17
  * Fix uniqueness check (David Rueck)
14
18
  * Fix write issue when one of they keys in a composite key is
15
19
  called id (Tom Hughes)
16
20
 
17
21
  == 3.1.5 2011-03-24
18
- * Fix simple calculation methods
19
- * Fix instantiation of cpk records via associations.
20
- * Fix Relation#delete
21
- * Fix Relation#destroy
22
+ * Fix simple calculation methods (Charlie Savage)
23
+ * Fix instantiation of cpk records via associations (Charlie Savage)
24
+ * Fix Relation#delete (Charlie Savage)
25
+ * Fix Relation#destroy (Charlie Savage)
22
26
 
23
27
  == 3.1.4 2011-03-06
24
- * Support ActiveRecord 3.0.5 (interpolate_sql was removed and
25
- replaced by interpolate_and_sanitize_sql)
26
- * Fix persistence methods to support destroy callbacks
27
- * Support rake 0.9.0 beta
28
+ * Support ActiveRecord 3.0.5 - interpolate_sql was removed and
29
+ replaced by interpolate_and_sanitize_sql (Charlie Savage)
30
+ * Fix persistence methods to support destroy callbacks (Charlie Savage)
31
+ * Support rake 0.9.0 beta (Charlie Savage)
28
32
 
29
33
 
30
34
  == 3.1.2 2011-02-26
data/Rakefile CHANGED
@@ -2,9 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/clean'
4
4
  require 'rake/testtask'
5
- require 'rake/rdoctask'
6
- require 'rake/packagetask'
7
- require 'rake/gempackagetask'
5
+ require 'rubygems/package_task'
8
6
 
9
7
  # Set global variable so other tasks can access them
10
8
  ::PROJECT_ROOT = File.expand_path(".")
@@ -14,7 +12,7 @@ require 'rake/gempackagetask'
14
12
  spec = Gem::Specification.load("#{GEM_NAME}.gemspec")
15
13
 
16
14
  # Setup Rake tasks for managing the gem
17
- Rake::GemPackageTask.new(spec).define
15
+ Gem::PackageTask.new(spec).define
18
16
 
19
17
  # Now load in other task files
20
18
  Dir.glob('tasks/**/*.rake').each do |rake_file|
@@ -2,7 +2,7 @@ module CompositePrimaryKeys
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 1
5
- TINY = 8
5
+ TINY = 9
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -1,6 +1,6 @@
1
1
  print "Using native MySQL\n"
2
2
 
3
- require 'active_record'
3
+ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
4
4
 
5
5
  def connection_string
6
6
  options = {}
@@ -1,6 +1,6 @@
1
1
  print "Using native Oracle\n"
2
2
 
3
- require 'active_record'
3
+ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
4
4
 
5
5
  def connection_string
6
6
  "#{SPEC['username']}/#{SPEC['password']}@#{SPEC['host']}"
@@ -1,6 +1,6 @@
1
1
  print "Using native Oracle Enhanced\n"
2
2
 
3
- require 'active_record'
3
+ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
4
4
 
5
5
  def connection_string
6
6
  "#{SPEC['username']}/#{SPEC['password']}@#{SPEC['host']}"
@@ -1,6 +1,6 @@
1
1
  print "Using native Postgresql\n"
2
2
 
3
- require 'active_record'
3
+ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
4
4
  require File.join(PROJECT_ROOT, 'test', 'connections', 'connection_spec')
5
5
  require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys', 'connection_adapters', 'postgresql_adapter')
6
6
 
@@ -1,6 +1,6 @@
1
1
  print "Using native Sqlite3\n"
2
2
 
3
- require 'active_record'
3
+ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
4
4
  require File.join(PROJECT_ROOT, 'test', 'connections', 'connection_spec')
5
5
 
6
6
  def connection_string
@@ -1,5 +1,5 @@
1
1
  class Article < ActiveRecord::Base
2
- has_many :readings
2
+ has_many :readings, :dependent => :delete_all
3
3
  has_many :users, :through => :readings
4
4
  end
5
5
 
@@ -1,5 +1,4 @@
1
1
  class Comment < ActiveRecord::Base
2
- set_primary_keys :id
3
2
  belongs_to :person, :polymorphic => true
4
3
  belongs_to :hack
5
4
  end
@@ -90,14 +90,6 @@ CREATE TABLE membership_statuses (
90
90
  PRIMARY KEY (id)
91
91
  );
92
92
 
93
- create table kitchen_sinks (
94
- id_1 integer not null,
95
- id_2 integer not null,
96
- a_date date,
97
- a_string varchar(100),
98
- primary key (id_1, id_2)
99
- );
100
-
101
93
  create table restaurants (
102
94
  franchise_id integer not null,
103
95
  store_id integer not null,
@@ -112,9 +104,8 @@ create table restaurants_suburbs (
112
104
  suburb_id integer not null
113
105
  );
114
106
 
115
- create table way_nodes (
116
- id integer not null,
117
- node_id integer not null,
118
- sequence_id integer not null,
119
- primary key (id, sequence_id)
107
+ create table products_restaurants (
108
+ product_id integer not null,
109
+ franchise_id integer not null,
110
+ store_id integer not null
120
111
  );
@@ -14,4 +14,4 @@ drop table PRODUCT_TARIFFS;
14
14
  drop table KITCHEN_SINK;
15
15
  drop table RESTAURANTS;
16
16
  drop table RESTAURANTS_SUBURBS;
17
- drop table WAY_NODES;
17
+ drop table PRODUCTS_RESTAURANTS;
@@ -116,14 +116,6 @@ create table hacks (
116
116
  primary key (name)
117
117
  ) type=InnoDB;
118
118
 
119
- create table kitchen_sinks (
120
- id_1 int(11) not null,
121
- id_2 int(11) not null,
122
- a_date date,
123
- a_string varchar(100),
124
- primary key (id_1, id_2)
125
- ) type=InnoDB;
126
-
127
119
  create table restaurants (
128
120
  franchise_id int(11) not null,
129
121
  store_id int(11) not null,
@@ -185,9 +177,9 @@ create table capitols (
185
177
  primary key (country, city)
186
178
  ) type=InnoDB;
187
179
 
188
- create table way_nodes (
189
- id int(11) not null,
190
- node_id int(11) not null,
191
- sequence_id int(11) not null,
192
- primary key (id, sequence_id)
180
+ create table products_restaurants (
181
+ product_id int(11) not null,
182
+ franchise_id int(11) not null,
183
+ store_id int(11) not null
193
184
  ) type=InnoDB;
185
+
@@ -25,7 +25,6 @@ drop sequence employees_seq;
25
25
  drop table comments;
26
26
  drop sequence comments_seq;
27
27
  drop table hacks;
28
- drop table kitchen_sinks;
29
28
  drop table restaurants;
30
29
  drop table restaurants_suburbs;
31
30
  drop table dorms;
@@ -37,4 +36,4 @@ drop table room_attribute_assignments;
37
36
  drop table room_assignments;
38
37
  drop table students;
39
38
  drop sequence students_seq;
40
- drop table way_nodes;
39
+ drop table products_restaurants;
@@ -124,14 +124,6 @@ create table hacks (
124
124
  name varchar(50) not null primary key
125
125
  );
126
126
 
127
- create table kitchen_sinks (
128
- id_1 number(11) not null,
129
- id_2 number(11) not null,
130
- a_date date,
131
- a_string varchar(100),
132
- constraint kitchen_sinks_pk primary key (id_1, id_2)
133
- );
134
-
135
127
  create table restaurants (
136
128
  franchise_id number(11) not null,
137
129
  store_id number(11) not null,
@@ -186,9 +178,8 @@ create table room_assignments (
186
178
  room_id number(11) not null
187
179
  );
188
180
 
189
- create table way_nodes (
190
- id number(11) not null,
191
- node_id number(11) not null,
192
- sequence_id number(11) not null,
193
- constraint way_nodes_pk primary key (id, sequence_id)
181
+ create table products_restaurants (
182
+ product_id number(11) not null,
183
+ franchise_id number(11) not null,
184
+ store_id number(11) not null
194
185
  );
@@ -136,14 +136,6 @@ create table hacks (
136
136
  primary key (name)
137
137
  );
138
138
 
139
- create table kitchen_sinks (
140
- id_1 int not null,
141
- id_2 int not null,
142
- a_date date,
143
- a_string varchar(100),
144
- primary key (id_1, id_2)
145
- );
146
-
147
139
  create table restaurants (
148
140
  franchise_id int not null,
149
141
  store_id int not null,
@@ -211,9 +203,9 @@ create table capitols (
211
203
  primary key (country, city)
212
204
  );
213
205
 
214
- create table way_nodes (
215
- id int not null,
216
- node_id int not null,
217
- sequence_id int not null,
218
- primary key (id, sequence_id)
206
+ create table products_restaurants (
207
+ product_id int not null,
208
+ franchise_id int not null,
209
+ store_id int not null
219
210
  );
211
+
@@ -105,14 +105,6 @@ create table hacks (
105
105
  name varchar(50) not null primary key
106
106
  );
107
107
 
108
- create table kitchen_sinks (
109
- id_1 integer not null,
110
- id_2 integer not null,
111
- a_date date,
112
- a_string varchar(100),
113
- primary key (id_1, id_2)
114
- );
115
-
116
108
  create table restaurants (
117
109
  franchise_id integer not null,
118
110
  store_id integer not null,
@@ -171,9 +163,8 @@ create table capitols (
171
163
  primary key (country, city)
172
164
  );
173
165
 
174
- create table way_nodes (
175
- id integer not null,
176
- node_id integer not null,
177
- sequence_id integer not null,
178
- primary key (id, sequence_id)
166
+ create table products_restaurants (
167
+ product_id integer not null,
168
+ franchise_id integer not null,
169
+ store_id integer not null
179
170
  );
@@ -1,4 +1,5 @@
1
1
  class Department < ActiveRecord::Base
2
2
  set_primary_keys :department_id, :location_id
3
3
  has_many :employees, :foreign_key => [:department_id, :location_id]
4
+ has_one :head, :class_name => 'Employee', :foreign_key => [:department_id, :location_id], :dependent => :delete
4
5
  end
@@ -1,3 +1,7 @@
1
- department1-cpk:
1
+ accounting:
2
2
  department_id: 1
3
3
  location_id: 1
4
+
5
+ engineering:
6
+ department_id: 2
7
+ location_id: 1
@@ -1,9 +1,19 @@
1
- employee1:
1
+ steve:
2
2
  id: 1
3
3
  department_id: 1
4
4
  location_id: 1
5
- employee2:
5
+
6
+ jill:
6
7
  id: 2
7
8
  department_id: 1
8
9
  location_id: 1
9
10
 
11
+ sarah:
12
+ id: 3
13
+ department_id: 2
14
+ location_id: 1
15
+
16
+ robert:
17
+ id: 4
18
+ department_id: 2
19
+ location_id: 1
@@ -4,7 +4,5 @@ class Membership < ActiveRecord::Base
4
4
  belongs_to :user
5
5
  belongs_to :group
6
6
  has_many :statuses, :class_name => 'MembershipStatus', :foreign_key => [:user_id, :group_id]
7
-
8
7
  has_many :readings, :primary_key => :user_id, :foreign_key => :user_id
9
- has_one :reading, :primary_key => :user_id, :foreign_key => :user_id, :order => 'id DESC'
10
8
  end
@@ -1,7 +1,9 @@
1
1
  class Product < ActiveRecord::Base
2
2
  set_primary_keys :id # redundant
3
3
  has_many :product_tariffs, :foreign_key => :product_id, :dependent => :delete_all
4
- # Yeah, this is fake, it uses for testing
5
- has_one :product_tariff, :foreign_key => :product_id
6
4
  has_many :tariffs, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date]
5
+
6
+ has_and_belongs_to_many :restaurants,
7
+ :foreign_key => :product_id,
8
+ :association_foreign_key => [:franchise_id, :store_id]
7
9
  end
@@ -3,4 +3,7 @@ class Restaurant < ActiveRecord::Base
3
3
  has_and_belongs_to_many :suburbs,
4
4
  :foreign_key => [:franchise_id, :store_id],
5
5
  :association_foreign_key => [:city_id, :suburb_id]
6
- end
6
+ has_and_belongs_to_many :products,
7
+ :foreign_key => [:franchise_id, :store_id],
8
+ :association_foreign_key => :product_id
9
+ end
@@ -2,4 +2,11 @@ mcdonalds:
2
2
  franchise_id: 1
3
3
  store_id: 1
4
4
  name: McDonalds
5
-
5
+ subway_one:
6
+ franchise_id: 2
7
+ store_id: 1
8
+ name: Subway 1
9
+ subway_two:
10
+ franchise_id: 2
11
+ store_id: 2
12
+ name: Subway 2
@@ -1,6 +1,5 @@
1
1
  class Tariff < ActiveRecord::Base
2
2
  set_primary_keys [:tariff_id, :start_date]
3
3
  has_many :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date]
4
- has_one :product_tariff, :foreign_key => [:tariff_id, :tariff_start_date]
5
4
  has_many :products, :through => :product_tariffs, :foreign_key => [:tariff_id, :tariff_start_date]
6
5
  end
@@ -2,10 +2,12 @@ flat:
2
2
  tariff_id: 1
3
3
  start_date: <%= Date.today.to_s(:db) %>
4
4
  amount: 50
5
+
5
6
  free:
6
7
  tariff_id: 2
7
8
  start_date: <%= Date.today.to_s(:db) %>
8
9
  amount: 0
10
+
9
11
  flat_future:
10
12
  tariff_id: 1
11
13
  start_date: <%= Date.today.next.to_s(:db) %>
@@ -1,9 +1,9 @@
1
1
  require 'abstract_unit'
2
2
 
3
3
  class TestAssociations < ActiveSupport::TestCase
4
- fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs,
4
+ fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants,
5
5
  :dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users, :readings,
6
- :memberships
6
+ :departments, :memberships
7
7
 
8
8
  def test_count
9
9
  assert_equal(2, Product.count(:include => :product_tariffs))
@@ -20,7 +20,6 @@ class TestAssociations < ActiveSupport::TestCase
20
20
  assert_equal 2, products(:first_product).product_tariffs.length
21
21
  assert_not_nil products(:first_product).tariffs
22
22
  assert_equal 2, products(:first_product).tariffs.length
23
- assert_not_nil products(:first_product).product_tariff
24
23
  end
25
24
 
26
25
  def test_product_tariffs
@@ -35,7 +34,6 @@ class TestAssociations < ActiveSupport::TestCase
35
34
  assert_equal 1, tariffs(:flat).product_tariffs.length
36
35
  assert_not_nil tariffs(:flat).products
37
36
  assert_equal 1, tariffs(:flat).products.length
38
- assert_not_nil tariffs(:flat).product_tariff
39
37
  end
40
38
 
41
39
  # Its not generating the instances of associated classes from the rows
@@ -152,22 +150,6 @@ class TestAssociations < ActiveSupport::TestCase
152
150
  assert_equal(rooms(:branner_room_1), room_assignment.room)
153
151
  end
154
152
 
155
- def test_has_and_belongs_to_many
156
- @restaurant = Restaurant.find([1,1])
157
- assert_equal 2, @restaurant.suburbs.size
158
-
159
- @restaurant = Restaurant.find([1,1], :include => :suburbs)
160
- assert_equal 2, @restaurant.suburbs.size
161
- end
162
-
163
- def test_habtm_clear
164
- @restaurant = Restaurant.find([1,1])
165
- assert_equal 2, @restaurant.suburbs.size
166
- @restaurant.suburbs.clear
167
- @restaurant = Restaurant.find([1,1])
168
- assert_equal 0, @restaurant.suburbs.size
169
- end
170
-
171
153
  def test_has_many_with_primary_key
172
154
  @membership = Membership.find([1, 1])
173
155
  assert_equal 2, @membership.reading.id
@@ -175,8 +157,8 @@ class TestAssociations < ActiveSupport::TestCase
175
157
 
176
158
  def test_has_one_with_composite
177
159
  # In this case a regular model has_one composite model
178
- product = products(:first_product)
179
- assert_not_nil(product.product_tariff)
160
+ department = departments(:engineering)
161
+ assert_not_nil(department.head)
180
162
  end
181
163
 
182
164
  def test_has_many_with_primary_key
@@ -200,7 +182,8 @@ class TestAssociations < ActiveSupport::TestCase
200
182
  end
201
183
 
202
184
  def test_joins_has_one_with_primary_key
203
- @membership = Membership.find(:first, :joins => :reading, :conditions => { :readings => { :id => 2 } })
185
+ @membership = Membership.find(:first, :joins => :readings,
186
+ :conditions => { :readings => { :id => 2 } })
204
187
 
205
188
  assert_equal [1, 1], @membership.id
206
189
  end