composite_primary_keys 13.0.1 → 13.0.2
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.
- checksums.yaml +4 -4
- data/History.rdoc +891 -888
- data/README.rdoc +181 -181
- data/Rakefile +37 -37
- data/lib/composite_primary_keys/arel/sqlserver.rb +37 -37
- data/lib/composite_primary_keys/arel/to_sql.rb +18 -18
- data/lib/composite_primary_keys/associations/association.rb +23 -23
- data/lib/composite_primary_keys/associations/collection_association.rb +31 -31
- data/lib/composite_primary_keys/associations/foreign_association.rb +15 -15
- data/lib/composite_primary_keys/associations/has_many_association.rb +35 -35
- data/lib/composite_primary_keys/associations/{join_dependency.rb → join_association.rb} +1 -1
- data/lib/composite_primary_keys/associations/through_association.rb +25 -25
- data/lib/composite_primary_keys/autosave_association.rb +60 -60
- data/lib/composite_primary_keys/composite_arrays.rb +86 -86
- data/lib/composite_primary_keys/composite_relation.rb +29 -29
- data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
- data/lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb +26 -26
- data/lib/composite_primary_keys/counter_cache.rb +15 -15
- data/lib/composite_primary_keys/fixtures.rb +21 -21
- data/lib/composite_primary_keys/persistence.rb +82 -82
- data/lib/composite_primary_keys/relation/calculations.rb +104 -104
- data/lib/composite_primary_keys/sanitization.rb +42 -42
- data/lib/composite_primary_keys/transactions.rb +34 -34
- data/lib/composite_primary_keys/validations/uniqueness.rb +31 -31
- data/lib/composite_primary_keys/version.rb +8 -8
- data/lib/composite_primary_keys.rb +118 -118
- data/scripts/console.rb +48 -48
- data/scripts/txt2html +76 -76
- data/scripts/txt2js +65 -65
- data/tasks/databases/mysql.rake +40 -40
- data/tasks/databases/oracle.rake +41 -41
- data/tasks/databases/postgresql.rake +38 -38
- data/tasks/databases/sqlite.rake +25 -25
- data/tasks/databases/sqlserver.rake +43 -43
- data/tasks/website.rake +18 -18
- data/test/README_tests.rdoc +56 -56
- data/test/abstract_unit.rb +114 -114
- data/test/connections/connection_spec.rb +27 -27
- data/test/connections/databases.example.yml +40 -40
- data/test/connections/databases.yml +40 -39
- data/test/fixtures/article.rb +10 -10
- data/test/fixtures/articles.yml +7 -7
- data/test/fixtures/capitol.rb +3 -3
- data/test/fixtures/capitols.yml +16 -16
- data/test/fixtures/comment.rb +5 -5
- data/test/fixtures/comments.yml +17 -17
- data/test/fixtures/department.rb +16 -16
- data/test/fixtures/dorm.rb +2 -2
- data/test/fixtures/dorms.yml +4 -4
- data/test/fixtures/employee.rb +5 -5
- data/test/fixtures/group.rb +2 -2
- data/test/fixtures/groups.yml +6 -6
- data/test/fixtures/membership.rb +8 -8
- data/test/fixtures/membership_status.rb +2 -2
- data/test/fixtures/membership_statuses.yml +16 -16
- data/test/fixtures/memberships.yml +10 -10
- data/test/fixtures/product.rb +9 -9
- data/test/fixtures/product_tariff.rb +5 -5
- data/test/fixtures/product_tariffs.yml +14 -14
- data/test/fixtures/products.yml +11 -11
- data/test/fixtures/reading.rb +4 -4
- data/test/fixtures/readings.yml +10 -10
- data/test/fixtures/reference_code.rb +7 -7
- data/test/fixtures/reference_codes.yml +28 -28
- data/test/fixtures/reference_type.rb +12 -12
- data/test/fixtures/reference_types.yml +9 -9
- data/test/fixtures/restaurant.rb +9 -9
- data/test/fixtures/restaurants.yml +14 -14
- data/test/fixtures/restaurants_suburb.rb +2 -2
- data/test/fixtures/room.rb +11 -11
- data/test/fixtures/room_assignment.rb +13 -13
- data/test/fixtures/room_assignments.yml +24 -24
- data/test/fixtures/room_attribute.rb +2 -2
- data/test/fixtures/room_attribute_assignment.rb +4 -4
- data/test/fixtures/room_attribute_assignments.yml +4 -4
- data/test/fixtures/room_attributes.yml +2 -2
- data/test/fixtures/rooms.yml +12 -12
- data/test/fixtures/street.rb +2 -2
- data/test/fixtures/student.rb +3 -3
- data/test/fixtures/students.yml +15 -15
- data/test/fixtures/suburb.rb +5 -5
- data/test/fixtures/tariff.rb +5 -5
- data/test/fixtures/tariffs.yml +14 -14
- data/test/fixtures/topic_sources.yml +3 -3
- data/test/fixtures/topics.yml +8 -8
- data/test/fixtures/users.yml +10 -10
- data/test/plugins/pagination.rb +405 -405
- data/test/plugins/pagination_helper.rb +135 -135
- data/test/test_associations.rb +372 -372
- data/test/test_attribute_methods.rb +63 -63
- data/test/test_callbacks.rb +99 -99
- data/test/test_composite_arrays.rb +38 -38
- data/test/test_counter_cache.rb +30 -30
- data/test/test_dumpable.rb +15 -15
- data/test/test_dup.rb +37 -37
- data/test/test_equal.rb +26 -26
- data/test/test_habtm.rb +141 -141
- data/test/test_miscellaneous.rb +32 -32
- data/test/test_optimistic.rb +18 -18
- data/test/test_pagination.rb +35 -35
- data/test/test_polymorphic.rb +43 -43
- data/test/test_predicates.rb +59 -59
- data/test/test_preload.rb +102 -102
- data/test/test_santiago.rb +23 -23
- data/test/test_touch.rb +23 -23
- data/test/test_tutorial_example.rb +25 -25
- data/test/test_validations.rb +13 -13
- metadata +4 -4
data/test/test_preload.rb
CHANGED
@@ -1,102 +1,102 @@
|
|
1
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
-
|
3
|
-
class TestPreload < ActiveSupport::TestCase
|
4
|
-
fixtures :articles, :comments, :users, :employees, :groups, :readings
|
5
|
-
|
6
|
-
class UserForPreload < User
|
7
|
-
has_many :comments_with_include_condition, -> { where('person_type = ?', 'User')},
|
8
|
-
class_name: 'Comment', foreign_key: 'person_id', as: :person
|
9
|
-
has_many :comments_with_exclude_condition, -> { where('person_type <> ?', 'SomeType')},
|
10
|
-
class_name: 'Comment', foreign_key: 'person_id', as: :person
|
11
|
-
end
|
12
|
-
|
13
|
-
class EmployeeForPreload < Employee
|
14
|
-
# this is a rather random condition, which should not interfere with the normal test queries
|
15
|
-
has_and_belongs_to_many :groups_2, class_name: 'Group', foreign_key: 'employee_id', join_table: 'employees_groups'
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_preload_of_polymorphic_association
|
19
|
-
comment = Comment.where(id: [1, 2, 3]).all
|
20
|
-
persons = comment.map(&:person)
|
21
|
-
persons.each do |person|
|
22
|
-
assert_kind_of(ActiveRecord::Base, person)
|
23
|
-
end
|
24
|
-
|
25
|
-
comment = Comment.where(id: [1, 2, 3]).preload(:person).all
|
26
|
-
persons = comment.map(&:person)
|
27
|
-
persons.each do |person|
|
28
|
-
assert_kind_of(ActiveRecord::Base, person)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_preload_for_conditioned_has_many_association
|
33
|
-
# has one comment
|
34
|
-
article = articles(:first)
|
35
|
-
user1 = users(:santiago)
|
36
|
-
user2 = UserForPreload.create(name: 'TestPreload')
|
37
|
-
Comment.create(article: article, person: user2, person_type: 'User')
|
38
|
-
Comment.create(article: article, person: user2, person_type: 'User')
|
39
|
-
|
40
|
-
users = UserForPreload.where(id: [user1.id, user2.id]).all
|
41
|
-
assert_equal(1, users.first.comments_with_include_condition.size)
|
42
|
-
assert_equal(2, users.second.comments_with_include_condition.size)
|
43
|
-
|
44
|
-
users = UserForPreload.where(id: [user1.id, user2.id]).preload(:comments_with_include_condition).all
|
45
|
-
assert_equal(1, users.first.comments_with_include_condition.size)
|
46
|
-
assert_equal(2, users.second.comments_with_include_condition.size)
|
47
|
-
|
48
|
-
users = UserForPreload.where(id: [user1.id, user2.id]).all
|
49
|
-
assert_equal(1, users.first.comments_with_exclude_condition.size)
|
50
|
-
assert_equal(2, users.second.comments_with_exclude_condition.size)
|
51
|
-
|
52
|
-
users = UserForPreload.where(id: [user1.id, user2.id]).preload(:comments_with_exclude_condition).all
|
53
|
-
assert_equal(1, users.first.comments_with_exclude_condition.size)
|
54
|
-
assert_equal(2, users.second.comments_with_exclude_condition.size)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_preload_for_unconditioned_habtm_association
|
58
|
-
employee1 = employees(:steve)
|
59
|
-
employee2 = employees(:jill)
|
60
|
-
employee1.groups = [groups(:cpk)]
|
61
|
-
employee2.groups = [groups(:cpk), groups(:group2)]
|
62
|
-
employee1.save!; employee2.save!
|
63
|
-
|
64
|
-
employees = Employee.where(id: [1, 2]).all
|
65
|
-
assert_equal(1, employees.first.groups.size)
|
66
|
-
assert_equal(2, employees.second.groups.size)
|
67
|
-
|
68
|
-
employees = Employee.where(id: [1, 2]).preload(:groups).all
|
69
|
-
assert_equal(1, employees.first.groups.size)
|
70
|
-
assert_equal(2, employees.second.groups.size)
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_preload_for_conditioned_habtm_association
|
74
|
-
employee1 = employees(:steve)
|
75
|
-
employee2 = employees(:jill)
|
76
|
-
employee1.groups = [groups(:cpk)]
|
77
|
-
employee2.groups = [groups(:cpk), groups(:group2)]
|
78
|
-
employee1.save!; employee2.save!
|
79
|
-
|
80
|
-
employees = EmployeeForPreload.where(id: [1, 2]).all.order(:id)
|
81
|
-
|
82
|
-
# Even without preload two errors: First Employee has Group 1 loaded twice,
|
83
|
-
# Second Employee has only Group 2 instead of Group 1&2
|
84
|
-
assert_equal(1, employees.first.groups.size)
|
85
|
-
assert_equal(1, employees.first.groups_2.size)
|
86
|
-
assert_equal(2, employees.second.groups.size)
|
87
|
-
assert_equal(2, employees.second.groups_2.size)
|
88
|
-
|
89
|
-
employees = EmployeeForPreload.where(id: [1, 2]).preload(:groups_2).all.order(:id)
|
90
|
-
|
91
|
-
# with preloading, the first assertion is valid, but the second only gets Group 2 instead of 1&2
|
92
|
-
assert_equal(1, employees.first.groups_2.size)
|
93
|
-
assert_equal(2, employees.second.groups_2.size)
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_preload_settings_inversion
|
97
|
-
user = User.preload(:readings).find_by!(:name => 'Santiago')
|
98
|
-
assert_equal(2, user.readings.count)
|
99
|
-
reading = user.readings.first
|
100
|
-
assert_equal(true, reading.association(:user).loaded?)
|
101
|
-
end
|
102
|
-
end
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestPreload < ActiveSupport::TestCase
|
4
|
+
fixtures :articles, :comments, :users, :employees, :groups, :readings
|
5
|
+
|
6
|
+
class UserForPreload < User
|
7
|
+
has_many :comments_with_include_condition, -> { where('person_type = ?', 'User')},
|
8
|
+
class_name: 'Comment', foreign_key: 'person_id', as: :person
|
9
|
+
has_many :comments_with_exclude_condition, -> { where('person_type <> ?', 'SomeType')},
|
10
|
+
class_name: 'Comment', foreign_key: 'person_id', as: :person
|
11
|
+
end
|
12
|
+
|
13
|
+
class EmployeeForPreload < Employee
|
14
|
+
# this is a rather random condition, which should not interfere with the normal test queries
|
15
|
+
has_and_belongs_to_many :groups_2, class_name: 'Group', foreign_key: 'employee_id', join_table: 'employees_groups'
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_preload_of_polymorphic_association
|
19
|
+
comment = Comment.where(id: [1, 2, 3]).all
|
20
|
+
persons = comment.map(&:person)
|
21
|
+
persons.each do |person|
|
22
|
+
assert_kind_of(ActiveRecord::Base, person)
|
23
|
+
end
|
24
|
+
|
25
|
+
comment = Comment.where(id: [1, 2, 3]).preload(:person).all
|
26
|
+
persons = comment.map(&:person)
|
27
|
+
persons.each do |person|
|
28
|
+
assert_kind_of(ActiveRecord::Base, person)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_preload_for_conditioned_has_many_association
|
33
|
+
# has one comment
|
34
|
+
article = articles(:first)
|
35
|
+
user1 = users(:santiago)
|
36
|
+
user2 = UserForPreload.create(name: 'TestPreload')
|
37
|
+
Comment.create(article: article, person: user2, person_type: 'User')
|
38
|
+
Comment.create(article: article, person: user2, person_type: 'User')
|
39
|
+
|
40
|
+
users = UserForPreload.where(id: [user1.id, user2.id]).all
|
41
|
+
assert_equal(1, users.first.comments_with_include_condition.size)
|
42
|
+
assert_equal(2, users.second.comments_with_include_condition.size)
|
43
|
+
|
44
|
+
users = UserForPreload.where(id: [user1.id, user2.id]).preload(:comments_with_include_condition).all
|
45
|
+
assert_equal(1, users.first.comments_with_include_condition.size)
|
46
|
+
assert_equal(2, users.second.comments_with_include_condition.size)
|
47
|
+
|
48
|
+
users = UserForPreload.where(id: [user1.id, user2.id]).all
|
49
|
+
assert_equal(1, users.first.comments_with_exclude_condition.size)
|
50
|
+
assert_equal(2, users.second.comments_with_exclude_condition.size)
|
51
|
+
|
52
|
+
users = UserForPreload.where(id: [user1.id, user2.id]).preload(:comments_with_exclude_condition).all
|
53
|
+
assert_equal(1, users.first.comments_with_exclude_condition.size)
|
54
|
+
assert_equal(2, users.second.comments_with_exclude_condition.size)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_preload_for_unconditioned_habtm_association
|
58
|
+
employee1 = employees(:steve)
|
59
|
+
employee2 = employees(:jill)
|
60
|
+
employee1.groups = [groups(:cpk)]
|
61
|
+
employee2.groups = [groups(:cpk), groups(:group2)]
|
62
|
+
employee1.save!; employee2.save!
|
63
|
+
|
64
|
+
employees = Employee.where(id: [1, 2]).all
|
65
|
+
assert_equal(1, employees.first.groups.size)
|
66
|
+
assert_equal(2, employees.second.groups.size)
|
67
|
+
|
68
|
+
employees = Employee.where(id: [1, 2]).preload(:groups).all
|
69
|
+
assert_equal(1, employees.first.groups.size)
|
70
|
+
assert_equal(2, employees.second.groups.size)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_preload_for_conditioned_habtm_association
|
74
|
+
employee1 = employees(:steve)
|
75
|
+
employee2 = employees(:jill)
|
76
|
+
employee1.groups = [groups(:cpk)]
|
77
|
+
employee2.groups = [groups(:cpk), groups(:group2)]
|
78
|
+
employee1.save!; employee2.save!
|
79
|
+
|
80
|
+
employees = EmployeeForPreload.where(id: [1, 2]).all.order(:id)
|
81
|
+
|
82
|
+
# Even without preload two errors: First Employee has Group 1 loaded twice,
|
83
|
+
# Second Employee has only Group 2 instead of Group 1&2
|
84
|
+
assert_equal(1, employees.first.groups.size)
|
85
|
+
assert_equal(1, employees.first.groups_2.size)
|
86
|
+
assert_equal(2, employees.second.groups.size)
|
87
|
+
assert_equal(2, employees.second.groups_2.size)
|
88
|
+
|
89
|
+
employees = EmployeeForPreload.where(id: [1, 2]).preload(:groups_2).all.order(:id)
|
90
|
+
|
91
|
+
# with preloading, the first assertion is valid, but the second only gets Group 2 instead of 1&2
|
92
|
+
assert_equal(1, employees.first.groups_2.size)
|
93
|
+
assert_equal(2, employees.second.groups_2.size)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_preload_settings_inversion
|
97
|
+
user = User.preload(:readings).find_by!(:name => 'Santiago')
|
98
|
+
assert_equal(2, user.readings.count)
|
99
|
+
reading = user.readings.first
|
100
|
+
assert_equal(true, reading.association(:user).loaded?)
|
101
|
+
end
|
102
|
+
end
|
data/test/test_santiago.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
# Test cases devised by Santiago that broke the Composite Primary Keys
|
2
|
-
# code at one point in time. But no more!!!
|
3
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
4
|
-
|
5
|
-
class TestSantiago < ActiveSupport::TestCase
|
6
|
-
fixtures :suburbs, :streets, :users, :articles, :readings
|
7
|
-
|
8
|
-
def test_normal_and_composite_associations
|
9
|
-
assert_not_nil @suburb = Suburb.find([1, 1])
|
10
|
-
assert_equal 1, @suburb.streets.length
|
11
|
-
|
12
|
-
assert_not_nil @street = Street.find(1)
|
13
|
-
assert_not_nil @street.suburb
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_single_keys
|
17
|
-
@santiago = User.find(1)
|
18
|
-
assert_not_nil @santiago.articles
|
19
|
-
assert_equal 2, @santiago.articles.length
|
20
|
-
assert_not_nil @santiago.readings
|
21
|
-
assert_equal 2, @santiago.readings.length
|
22
|
-
end
|
23
|
-
end
|
1
|
+
# Test cases devised by Santiago that broke the Composite Primary Keys
|
2
|
+
# code at one point in time. But no more!!!
|
3
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
4
|
+
|
5
|
+
class TestSantiago < ActiveSupport::TestCase
|
6
|
+
fixtures :suburbs, :streets, :users, :articles, :readings
|
7
|
+
|
8
|
+
def test_normal_and_composite_associations
|
9
|
+
assert_not_nil @suburb = Suburb.find([1, 1])
|
10
|
+
assert_equal 1, @suburb.streets.length
|
11
|
+
|
12
|
+
assert_not_nil @street = Street.find(1)
|
13
|
+
assert_not_nil @street.suburb
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_single_keys
|
17
|
+
@santiago = User.find(1)
|
18
|
+
assert_not_nil @santiago.articles
|
19
|
+
assert_equal 2, @santiago.articles.length
|
20
|
+
assert_not_nil @santiago.readings
|
21
|
+
assert_equal 2, @santiago.readings.length
|
22
|
+
end
|
23
|
+
end
|
data/test/test_touch.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
# Test cases devised by Santiago that broke the Composite Primary Keys
|
2
|
-
# code at one point in time. But no more!!!
|
3
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
4
|
-
|
5
|
-
class TestTouch < ActiveSupport::TestCase
|
6
|
-
fixtures :products, :tariffs
|
7
|
-
|
8
|
-
def test_touching_a_record_updates_its_timestamp
|
9
|
-
tariff = tariffs(:flat)
|
10
|
-
previous_amount = tariff.amount
|
11
|
-
previously_updated_at = tariff.updated_at
|
12
|
-
|
13
|
-
tariff.amount = previous_amount + 1
|
14
|
-
sleep 1.0 # we need to sleep for 1 second because the times updated (on mysql, at least) are only precise to 1 second.
|
15
|
-
tariff.touch
|
16
|
-
assert_not_equal previously_updated_at, tariff.updated_at
|
17
|
-
assert_equal previous_amount + 1, tariff.amount
|
18
|
-
assert tariff.amount_changed?, 'tarif amount should have changed'
|
19
|
-
assert tariff.changed?, 'tarif should be marked as changed'
|
20
|
-
tariff.reload
|
21
|
-
assert_not_equal previously_updated_at, tariff.updated_at
|
22
|
-
end
|
23
|
-
end
|
1
|
+
# Test cases devised by Santiago that broke the Composite Primary Keys
|
2
|
+
# code at one point in time. But no more!!!
|
3
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
4
|
+
|
5
|
+
class TestTouch < ActiveSupport::TestCase
|
6
|
+
fixtures :products, :tariffs
|
7
|
+
|
8
|
+
def test_touching_a_record_updates_its_timestamp
|
9
|
+
tariff = tariffs(:flat)
|
10
|
+
previous_amount = tariff.amount
|
11
|
+
previously_updated_at = tariff.updated_at
|
12
|
+
|
13
|
+
tariff.amount = previous_amount + 1
|
14
|
+
sleep 1.0 # we need to sleep for 1 second because the times updated (on mysql, at least) are only precise to 1 second.
|
15
|
+
tariff.touch
|
16
|
+
assert_not_equal previously_updated_at, tariff.updated_at
|
17
|
+
assert_equal previous_amount + 1, tariff.amount
|
18
|
+
assert tariff.amount_changed?, 'tarif amount should have changed'
|
19
|
+
assert tariff.changed?, 'tarif should be marked as changed'
|
20
|
+
tariff.reload
|
21
|
+
assert_not_equal previously_updated_at, tariff.updated_at
|
22
|
+
end
|
23
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
-
|
3
|
-
class TestTutorialExample < ActiveSupport::TestCase
|
4
|
-
fixtures :users, :groups, :memberships, :membership_statuses
|
5
|
-
|
6
|
-
def test_membership
|
7
|
-
membership = Membership.find([1, 1])
|
8
|
-
assert(membership, "Cannot find a membership")
|
9
|
-
assert(membership.user)
|
10
|
-
assert(membership.group)
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_status
|
14
|
-
membership = Membership.find([1, 1])
|
15
|
-
statuses = membership.statuses
|
16
|
-
assert(membership, "Cannot find a membership")
|
17
|
-
assert(statuses, "No has_many association to status")
|
18
|
-
assert_equal(membership, statuses.first.membership)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_count
|
22
|
-
membership = Membership.find([1, 1])
|
23
|
-
assert(membership, "Cannot find a membership")
|
24
|
-
assert_equal(1, membership.statuses.count)
|
25
|
-
end
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestTutorialExample < ActiveSupport::TestCase
|
4
|
+
fixtures :users, :groups, :memberships, :membership_statuses
|
5
|
+
|
6
|
+
def test_membership
|
7
|
+
membership = Membership.find([1, 1])
|
8
|
+
assert(membership, "Cannot find a membership")
|
9
|
+
assert(membership.user)
|
10
|
+
assert(membership.group)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_status
|
14
|
+
membership = Membership.find([1, 1])
|
15
|
+
statuses = membership.statuses
|
16
|
+
assert(membership, "Cannot find a membership")
|
17
|
+
assert(statuses, "No has_many association to status")
|
18
|
+
assert_equal(membership, statuses.first.membership)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_count
|
22
|
+
membership = Membership.find([1, 1])
|
23
|
+
assert(membership, "Cannot find a membership")
|
24
|
+
assert_equal(1, membership.statuses.count)
|
25
|
+
end
|
26
26
|
end
|
data/test/test_validations.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
-
|
3
|
-
class TestValidations < ActiveSupport::TestCase
|
4
|
-
fixtures :students, :dorms, :rooms, :room_assignments
|
5
|
-
|
6
|
-
def test_uniqueness_validation_persisted
|
7
|
-
room_assignment = RoomAssignment.find([1, 1, 1])
|
8
|
-
assert(room_assignment.valid?)
|
9
|
-
|
10
|
-
room_assignment = RoomAssignment.new(:student_id => 1, :dorm_id => 1, :room_id => 2)
|
11
|
-
assert(!room_assignment.valid?)
|
12
|
-
end
|
13
|
-
end
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestValidations < ActiveSupport::TestCase
|
4
|
+
fixtures :students, :dorms, :rooms, :room_assignments
|
5
|
+
|
6
|
+
def test_uniqueness_validation_persisted
|
7
|
+
room_assignment = RoomAssignment.find([1, 1, 1])
|
8
|
+
assert(room_assignment.valid?)
|
9
|
+
|
10
|
+
room_assignment = RoomAssignment.new(:student_id => 1, :dorm_id => 1, :room_id => 2)
|
11
|
+
assert(!room_assignment.valid?)
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: composite_primary_keys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 13.0.
|
4
|
+
version: 13.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Savage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -57,7 +57,7 @@ files:
|
|
57
57
|
- lib/composite_primary_keys/associations/foreign_association.rb
|
58
58
|
- lib/composite_primary_keys/associations/has_many_association.rb
|
59
59
|
- lib/composite_primary_keys/associations/has_many_through_association.rb
|
60
|
-
- lib/composite_primary_keys/associations/
|
60
|
+
- lib/composite_primary_keys/associations/join_association.rb
|
61
61
|
- lib/composite_primary_keys/associations/preloader/association.rb
|
62
62
|
- lib/composite_primary_keys/associations/through_association.rb
|
63
63
|
- lib/composite_primary_keys/attribute_methods.rb
|
@@ -216,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
216
|
- !ruby/object:Gem::Version
|
217
217
|
version: '0'
|
218
218
|
requirements: []
|
219
|
-
rubygems_version: 3.
|
219
|
+
rubygems_version: 3.3.4
|
220
220
|
signing_key:
|
221
221
|
specification_version: 4
|
222
222
|
summary: Composite key support for ActiveRecord
|