composite_primary_keys 1.0.3 → 1.0.4
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 +4 -0
- data/tasks/databases.rake +1 -1
- data/test/fixtures/db_definitions/oracle.drop.sql +7 -1
- data/test/fixtures/db_definitions/oracle.sql +29 -0
- data/test/test_associations.rb +3 -2
- data/test/test_attributes.rb +83 -83
- data/tmp/test.db +0 -0
- data/website/index.html +2 -2
- data/website/version-raw.js +1 -1
- data/website/version.js +1 -1
- metadata +2 -2
data/History.txt
CHANGED
data/tasks/databases.rake
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
|
3
3
|
# UNTESTED - firebird sqlserver sqlserver_odbc db2 sybase openbase
|
4
|
-
for adapter in %w( mysql sqlite oracle postgresql ibm_db )
|
4
|
+
for adapter in %w( mysql sqlite oracle oracle_enhanced postgresql ibm_db )
|
5
5
|
Rake::TestTask.new("test_#{adapter}") { |t|
|
6
6
|
t.libs << "test" << "test/connections/native_#{adapter}"
|
7
7
|
t.pattern = "test/test_*.rb"
|
@@ -27,4 +27,10 @@ drop sequence comments_seq;
|
|
27
27
|
drop table hacks;
|
28
28
|
drop table kitchen_sinks;
|
29
29
|
drop table restaurants;
|
30
|
-
drop table restaurants_suburbs;
|
30
|
+
drop table restaurants_suburbs;
|
31
|
+
drop table dorms;
|
32
|
+
drop sequence dorms_seq;
|
33
|
+
drop table rooms;
|
34
|
+
drop table room_attributes;
|
35
|
+
drop sequence room_attributes_seq;
|
36
|
+
drop table room_attribute_assignments;
|
@@ -157,4 +157,33 @@ create table restaurants_suburbs (
|
|
157
157
|
store_id number(11) not null,
|
158
158
|
city_id number(11) not null,
|
159
159
|
suburb_id number(11) not null
|
160
|
+
);
|
161
|
+
|
162
|
+
create table dorms (
|
163
|
+
id number(11) not null,
|
164
|
+
constraint dorms_pk primary key (id)
|
165
|
+
);
|
166
|
+
|
167
|
+
create sequence dorms_seq
|
168
|
+
start with 1000;
|
169
|
+
|
170
|
+
create table rooms (
|
171
|
+
dorm_id number(11) not null,
|
172
|
+
room_id number(11) not null,
|
173
|
+
constraint rooms_pk primary key (dorm_id, room_id)
|
174
|
+
);
|
175
|
+
|
176
|
+
create table room_attributes (
|
177
|
+
id number(11) not null,
|
178
|
+
name varchar(50),
|
179
|
+
constraint room_attributes_pk primary key (id)
|
180
|
+
);
|
181
|
+
|
182
|
+
create sequence room_attributes_seq
|
183
|
+
start with 1000;
|
184
|
+
|
185
|
+
create table room_attribute_assignments (
|
186
|
+
dorm_id number(11) not null,
|
187
|
+
room_id number(11) not null,
|
188
|
+
room_attribute_id number(11) not null
|
160
189
|
);
|
data/test/test_associations.rb
CHANGED
@@ -11,10 +11,11 @@ require 'fixtures/room_attribute'
|
|
11
11
|
require 'fixtures/room_attribute_assignment'
|
12
12
|
require 'fixtures/student'
|
13
13
|
require 'fixtures/room_assignment'
|
14
|
+
require 'fixtures/user'
|
14
15
|
|
15
16
|
class TestAssociations < Test::Unit::TestCase
|
16
17
|
fixtures :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants, :restaurants_suburbs,
|
17
|
-
:dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments
|
18
|
+
:dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users
|
18
19
|
|
19
20
|
def test_quoted_table_columns
|
20
21
|
assert_equal "product_tariffs.product_id,product_tariffs.tariff_id,product_tariffs.tariff_start_date",
|
@@ -31,7 +32,7 @@ class TestAssociations < Test::Unit::TestCase
|
|
31
32
|
assert_equal 0, room.room_attributes.find(:all, :conditions => ["room_attributes.name != ?", "keg"]).size
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
+
def test_has_many_through_on_custom_finder_when_through_association_is_composite_finder_when_through_association_is_not_composite
|
35
36
|
user = User.find(:first)
|
36
37
|
assert_equal 1, user.find_custom_articles.size
|
37
38
|
end
|
data/test/test_attributes.rb
CHANGED
@@ -1,84 +1,84 @@
|
|
1
|
-
require 'abstract_unit'
|
2
|
-
require 'fixtures/reference_type'
|
3
|
-
require 'fixtures/reference_code'
|
4
|
-
require 'fixtures/product'
|
5
|
-
require 'fixtures/tariff'
|
6
|
-
require 'fixtures/product_tariff'
|
7
|
-
|
8
|
-
class TestAttributes < Test::Unit::TestCase
|
9
|
-
fixtures :reference_types, :reference_codes, :products, :tariffs, :product_tariffs
|
10
|
-
|
11
|
-
CLASSES = {
|
12
|
-
:single => {
|
13
|
-
:class => ReferenceType,
|
14
|
-
:primary_keys => :reference_type_id,
|
15
|
-
},
|
16
|
-
:dual => {
|
17
|
-
:class => ReferenceCode,
|
18
|
-
:primary_keys => [:reference_type_id, :reference_code],
|
19
|
-
},
|
20
|
-
}
|
21
|
-
|
22
|
-
def setup
|
23
|
-
self.class.classes = CLASSES
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_brackets
|
27
|
-
testing_with do
|
28
|
-
@first.attributes.each_pair do |attr_name, value|
|
29
|
-
assert_equal value, @first[attr_name]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_brackets_primary_key
|
35
|
-
testing_with do
|
36
|
-
assert_equal @first.id, @first[@primary_keys], "[] failing for #{@klass}"
|
37
|
-
assert_equal @first.id, @first[@first.class.primary_key]
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_brackets_assignment
|
42
|
-
testing_with do
|
43
|
-
@first.attributes.each_pair do |attr_name, value|
|
44
|
-
@first[attr_name]= !value.nil? ? value * 2 : '1'
|
45
|
-
assert_equal !value.nil? ? value * 2 : '1', @first[attr_name]
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_brackets_foreign_key_assignment
|
51
|
-
@flat = Tariff.find(1, Date.today.to_s(:db))
|
52
|
-
@second_free = ProductTariff.find(2,2,Date.today.to_s(:db))
|
53
|
-
@second_free_fk = [:tariff_id, :tariff_start_date]
|
54
|
-
@second_free[key = @second_free_fk] = @flat.id
|
55
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
56
|
-
assert_equal @flat.id, @second_free[key]
|
57
|
-
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id
|
58
|
-
assert_equal @flat.id, @second_free[key]
|
59
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
60
|
-
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id.to_s
|
61
|
-
assert_equal @flat.id, @second_free[key]
|
62
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
63
|
-
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id.to_s
|
64
|
-
assert_equal @flat.id, @second_free[key]
|
65
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
66
|
-
@second_free[key = @second_free_fk.to_composite_ids.to_s] = @flat.id
|
67
|
-
assert_equal @flat.id, @second_free[key]
|
68
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
69
|
-
@second_free[key = @second_free_fk.to_composite_ids.to_s] = @flat.id.to_s
|
70
|
-
assert_equal @flat.id, @second_free[key]
|
71
|
-
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
72
|
-
end
|
73
|
-
private
|
74
|
-
def compare_indexes(obj_name1, indexes1, obj_name2, indexes2)
|
75
|
-
obj1, obj2 = eval "[#{obj_name1}, #{obj_name2}]"
|
76
|
-
indexes1.length.times do |key_index|
|
77
|
-
assert_equal obj1[indexes1[key_index].to_s],
|
78
|
-
obj2[indexes2[key_index].to_s],
|
79
|
-
"#{obj_name1}[#{indexes1[key_index]}]=#{obj1[indexes1[key_index].to_s].inspect} != " +
|
80
|
-
"#{obj_name2}[#{indexes2[key_index]}]=#{obj2[indexes2[key_index].to_s].inspect}; " +
|
81
|
-
"#{obj_name2} = #{obj2.inspect}"
|
82
|
-
end
|
83
|
-
end
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'fixtures/reference_type'
|
3
|
+
require 'fixtures/reference_code'
|
4
|
+
require 'fixtures/product'
|
5
|
+
require 'fixtures/tariff'
|
6
|
+
require 'fixtures/product_tariff'
|
7
|
+
|
8
|
+
class TestAttributes < Test::Unit::TestCase
|
9
|
+
fixtures :reference_types, :reference_codes, :products, :tariffs, :product_tariffs
|
10
|
+
|
11
|
+
CLASSES = {
|
12
|
+
:single => {
|
13
|
+
:class => ReferenceType,
|
14
|
+
:primary_keys => :reference_type_id,
|
15
|
+
},
|
16
|
+
:dual => {
|
17
|
+
:class => ReferenceCode,
|
18
|
+
:primary_keys => [:reference_type_id, :reference_code],
|
19
|
+
},
|
20
|
+
}
|
21
|
+
|
22
|
+
def setup
|
23
|
+
self.class.classes = CLASSES
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_brackets
|
27
|
+
testing_with do
|
28
|
+
@first.attributes.each_pair do |attr_name, value|
|
29
|
+
assert_equal value, @first[attr_name]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_brackets_primary_key
|
35
|
+
testing_with do
|
36
|
+
assert_equal @first.id, @first[@primary_keys], "[] failing for #{@klass}"
|
37
|
+
assert_equal @first.id, @first[@first.class.primary_key]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_brackets_assignment
|
42
|
+
testing_with do
|
43
|
+
@first.attributes.each_pair do |attr_name, value|
|
44
|
+
@first[attr_name]= !value.nil? ? value * 2 : '1'
|
45
|
+
assert_equal !value.nil? ? value * 2 : '1', @first[attr_name]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_brackets_foreign_key_assignment
|
51
|
+
@flat = Tariff.find(1, Date.today.to_s(:db))
|
52
|
+
@second_free = ProductTariff.find(2,2,Date.today.to_s(:db))
|
53
|
+
@second_free_fk = [:tariff_id, :tariff_start_date]
|
54
|
+
@second_free[key = @second_free_fk] = @flat.id
|
55
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
56
|
+
assert_equal @flat.id, @second_free[key]
|
57
|
+
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id
|
58
|
+
assert_equal @flat.id, @second_free[key]
|
59
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
60
|
+
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id.to_s
|
61
|
+
assert_equal @flat.id, @second_free[key]
|
62
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
63
|
+
@second_free[key = @second_free_fk.to_composite_ids] = @flat.id.to_s
|
64
|
+
assert_equal @flat.id, @second_free[key]
|
65
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
66
|
+
@second_free[key = @second_free_fk.to_composite_ids.to_s] = @flat.id
|
67
|
+
assert_equal @flat.id, @second_free[key]
|
68
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
69
|
+
@second_free[key = @second_free_fk.to_composite_ids.to_s] = @flat.id.to_s
|
70
|
+
assert_equal @flat.id, @second_free[key]
|
71
|
+
compare_indexes('@flat', @flat.class.primary_key, '@second_free', @second_free_fk)
|
72
|
+
end
|
73
|
+
private
|
74
|
+
def compare_indexes(obj_name1, indexes1, obj_name2, indexes2)
|
75
|
+
obj1, obj2 = eval "[#{obj_name1}, #{obj_name2}]"
|
76
|
+
indexes1.length.times do |key_index|
|
77
|
+
assert_equal obj1[indexes1[key_index].to_s],
|
78
|
+
obj2[indexes2[key_index].to_s],
|
79
|
+
"#{obj_name1}[#{indexes1[key_index]}]=#{obj1[indexes1[key_index].to_s].inspect} != " +
|
80
|
+
"#{obj_name2}[#{indexes2[key_index]}]=#{obj2[indexes2[key_index].to_s].inspect}; " +
|
81
|
+
"#{obj_name2} = #{obj2.inspect}"
|
82
|
+
end
|
83
|
+
end
|
84
84
|
end
|
data/tmp/test.db
CHANGED
Binary file
|
data/website/index.html
CHANGED
@@ -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.
|
36
|
+
<a href="http://rubyforge.org/projects/compositekeys" class="numbers">1.0.3</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ Ruby on Rails</h1>
|
39
39
|
|
@@ -296,7 +296,7 @@ other stories and things.</p>
|
|
296
296
|
|
297
297
|
<p>Comments are welcome. Send an email to <a href="mailto:drnicwilliams@gmail.com">Dr Nic Williams</a>.</p>
|
298
298
|
<p class="coda">
|
299
|
-
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>,
|
299
|
+
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 15th July 2008<br>
|
300
300
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
301
301
|
</p>
|
302
302
|
</div>
|
data/website/version-raw.js
CHANGED
data/website/version.js
CHANGED
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.
|
4
|
+
version: 1.0.4
|
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-07-
|
12
|
+
date: 2008-07-15 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|