composite_primary_keys 13.0.7 → 14.0.9
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 +50 -1
- data/README.rdoc +182 -181
- data/Rakefile +1 -1
- data/lib/composite_primary_keys/associations/association.rb +2 -2
- data/lib/composite_primary_keys/associations/association_scope.rb +1 -1
- data/lib/composite_primary_keys/associations/collection_association.rb +38 -31
- data/lib/composite_primary_keys/associations/has_many_through_association.rb +19 -0
- data/lib/composite_primary_keys/associations/preloader/association.rb +52 -61
- data/lib/composite_primary_keys/autosave_association.rb +60 -60
- data/lib/composite_primary_keys/composite_arrays.rb +88 -86
- data/lib/composite_primary_keys/composite_predicates.rb +121 -120
- data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +1 -2
- data/lib/composite_primary_keys/nested_attributes.rb +2 -2
- data/lib/composite_primary_keys/persistence.rb +96 -83
- data/lib/composite_primary_keys/relation/calculations.rb +110 -104
- data/lib/composite_primary_keys/relation/query_methods.rb +14 -16
- data/lib/composite_primary_keys/relation.rb +2 -0
- data/lib/composite_primary_keys/validations/uniqueness.rb +40 -32
- data/lib/composite_primary_keys/version.rb +2 -2
- data/lib/composite_primary_keys.rb +117 -119
- data/scripts/console.rb +2 -2
- data/tasks/databases/trilogy.rake +23 -0
- data/test/abstract_unit.rb +124 -114
- data/test/connections/databases.ci.yml +10 -0
- data/test/fixtures/admin.rb +4 -0
- data/test/fixtures/comments.yml +6 -0
- data/test/fixtures/db_definitions/db2-create-tables.sql +34 -0
- data/test/fixtures/db_definitions/db2-drop-tables.sql +7 -1
- data/test/fixtures/db_definitions/mysql.sql +23 -0
- data/test/fixtures/db_definitions/oracle.drop.sql +4 -0
- data/test/fixtures/db_definitions/oracle.sql +21 -0
- data/test/fixtures/db_definitions/postgresql.sql +23 -0
- data/test/fixtures/db_definitions/sqlite.sql +21 -0
- data/test/fixtures/db_definitions/sqlserver.sql +23 -0
- data/test/fixtures/department.rb +20 -16
- data/test/fixtures/moderator.rb +4 -0
- data/test/fixtures/room.rb +4 -1
- data/test/fixtures/room_assignment.rb +18 -14
- data/test/fixtures/staff_room.rb +6 -0
- data/test/fixtures/staff_room_key.rb +6 -0
- data/test/fixtures/user.rb +3 -0
- data/test/fixtures/user_with_polymorphic_name.rb +9 -0
- data/test/test_associations.rb +403 -372
- data/test/test_composite_arrays.rb +44 -38
- data/test/test_has_one_through.rb +30 -0
- data/test/test_nested_attributes.rb +23 -0
- data/test/test_polymorphic.rb +6 -0
- metadata +14 -7
- data/lib/composite_primary_keys/associations/through_association.rb +0 -24
@@ -1,38 +1,44 @@
|
|
1
|
-
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
-
|
3
|
-
class CompositeArraysTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
def test_new_primary_keys
|
6
|
-
keys = CompositePrimaryKeys::CompositeKeys.new
|
7
|
-
assert_not_nil keys
|
8
|
-
assert_equal '', keys.to_s
|
9
|
-
assert_equal '', "#{keys}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_initialize_primary_keys
|
13
|
-
keys = CompositePrimaryKeys::CompositeKeys.new([1,2,3])
|
14
|
-
assert_not_nil keys
|
15
|
-
assert_equal '1,2,3', keys.to_s
|
16
|
-
assert_equal '1,2,3', "#{keys}"
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_to_composite_keys
|
20
|
-
keys = [1,2,3].to_composite_keys
|
21
|
-
assert_equal CompositePrimaryKeys::CompositeKeys, keys.class
|
22
|
-
assert_equal '1,2,3', keys.to_s
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_parse
|
26
|
-
assert_equal ['1', '2'], CompositePrimaryKeys::CompositeKeys.parse('1,2')
|
27
|
-
assert_equal ['The USA', '^Washington, D.C.'],
|
28
|
-
CompositePrimaryKeys::CompositeKeys.parse('The USA,^5EWashington^2C D.C.')
|
29
|
-
assert_equal ['The USA', '^Washington, D.C.'],
|
30
|
-
CompositePrimaryKeys::CompositeKeys.parse(['The USA', '^Washington, D.C.'])
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_to_s
|
34
|
-
assert_equal '1,2', CompositePrimaryKeys::CompositeKeys.new([1, 2]).to_s
|
35
|
-
assert_equal 'The USA,^5EWashington^2C D.C.',
|
36
|
-
CompositePrimaryKeys::CompositeKeys.new(['The USA', '^Washington, D.C.']).to_s
|
37
|
-
end
|
38
|
-
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class CompositeArraysTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def test_new_primary_keys
|
6
|
+
keys = CompositePrimaryKeys::CompositeKeys.new
|
7
|
+
assert_not_nil keys
|
8
|
+
assert_equal '', keys.to_s
|
9
|
+
assert_equal '', "#{keys}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_initialize_primary_keys
|
13
|
+
keys = CompositePrimaryKeys::CompositeKeys.new([1,2,3])
|
14
|
+
assert_not_nil keys
|
15
|
+
assert_equal '1,2,3', keys.to_s
|
16
|
+
assert_equal '1,2,3', "#{keys}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_to_composite_keys
|
20
|
+
keys = [1,2,3].to_composite_keys
|
21
|
+
assert_equal CompositePrimaryKeys::CompositeKeys, keys.class
|
22
|
+
assert_equal '1,2,3', keys.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_parse
|
26
|
+
assert_equal ['1', '2'], CompositePrimaryKeys::CompositeKeys.parse('1,2')
|
27
|
+
assert_equal ['The USA', '^Washington, D.C.'],
|
28
|
+
CompositePrimaryKeys::CompositeKeys.parse('The USA,^5EWashington^2C D.C.')
|
29
|
+
assert_equal ['The USA', '^Washington, D.C.'],
|
30
|
+
CompositePrimaryKeys::CompositeKeys.parse(['The USA', '^Washington, D.C.'])
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_to_s
|
34
|
+
assert_equal '1,2', CompositePrimaryKeys::CompositeKeys.new([1, 2]).to_s
|
35
|
+
assert_equal 'The USA,^5EWashington^2C D.C.',
|
36
|
+
CompositePrimaryKeys::CompositeKeys.new(['The USA', '^Washington, D.C.']).to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_to_param
|
40
|
+
assert_equal '1,2', CompositePrimaryKeys::CompositeKeys.new([1, 2]).to_param
|
41
|
+
assert_equal 'The USA,^5EWashington^2C D.C.',
|
42
|
+
CompositePrimaryKeys::CompositeKeys.new(['The USA', '^Washington, D.C.']).to_param
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestHasOneThrough < ActiveSupport::TestCase
|
4
|
+
fixtures :users, :rooms
|
5
|
+
|
6
|
+
def test_no_cpk
|
7
|
+
# This test makes sure we don't break anything in standard rails by using CPK
|
8
|
+
user = User.find(1)
|
9
|
+
assert_nil user.moderator
|
10
|
+
assert_nil user.admin
|
11
|
+
|
12
|
+
admin = Admin.create!(user: user)
|
13
|
+
assert_equal admin, user.admin
|
14
|
+
assert_equal 1, user.moderator.id
|
15
|
+
assert_equal 1, admin.id
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_has_one_through
|
19
|
+
room = Room.find([1,1])
|
20
|
+
assert_nil room.staff_room
|
21
|
+
assert_nil room.staff_room_key
|
22
|
+
|
23
|
+
key = StaffRoomKey.create!(room: room, key_no: '1234')
|
24
|
+
assert_equal key, room.staff_room_key
|
25
|
+
assert_equal 1, room.staff_room.dorm_id
|
26
|
+
assert_equal 1, room.staff_room.room_id
|
27
|
+
assert_equal 1, key.dorm_id
|
28
|
+
assert_equal 1, key.room_id
|
29
|
+
end
|
30
|
+
end
|
@@ -64,4 +64,27 @@ class TestNestedAttributes < ActiveSupport::TestCase
|
|
64
64
|
assert_equal(reference_code.code_label, 'XX')
|
65
65
|
assert_equal(reference_code.abbreviation, 'Xx')
|
66
66
|
end
|
67
|
+
|
68
|
+
def test_nested_atttribute_update_4
|
69
|
+
code_id = 1003
|
70
|
+
|
71
|
+
reference_type = reference_types(:name_prefix)
|
72
|
+
reference_type.update :reference_codes_attributes => [{
|
73
|
+
:reference_code => code_id,
|
74
|
+
:code_label => 'XX',
|
75
|
+
:abbreviation => 'Xx'
|
76
|
+
}]
|
77
|
+
assert_not_nil ReferenceCode.find_by_reference_code(code_id)
|
78
|
+
reference_code = ReferenceCode.find_by_reference_code(code_id)
|
79
|
+
# directly pass :id as a array
|
80
|
+
reference_type.update :reference_codes_attributes => [{
|
81
|
+
:id => [reference_type.reference_type_id, code_id],
|
82
|
+
:code_label => 'AAA',
|
83
|
+
:abbreviation => 'Aaa'
|
84
|
+
}]
|
85
|
+
|
86
|
+
reference_code = ReferenceCode.find_by_reference_code(code_id)
|
87
|
+
assert_kind_of(ReferenceCode, reference_code)
|
88
|
+
assert_equal(reference_code.code_label, 'AAA')
|
89
|
+
end
|
67
90
|
end
|
data/test/test_polymorphic.rb
CHANGED
@@ -40,4 +40,10 @@ class TestPolymorphic < ActiveSupport::TestCase
|
|
40
40
|
article.user_commentators = []
|
41
41
|
assert_equal(0, article.comments.size)
|
42
42
|
end
|
43
|
+
|
44
|
+
def test_polymorphic_has_many_with_polymorphic_name
|
45
|
+
comments = UserWithPolymorphicName.find(1).comments
|
46
|
+
assert_equal 1, comments[0].person_id
|
47
|
+
assert_equal "User1", comments[0].person_type
|
48
|
+
end
|
43
49
|
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:
|
4
|
+
version: 14.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Savage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 7.0.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 7.0.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- lib/composite_primary_keys/associations/has_many_through_association.rb
|
60
60
|
- lib/composite_primary_keys/associations/join_association.rb
|
61
61
|
- lib/composite_primary_keys/associations/preloader/association.rb
|
62
|
-
- lib/composite_primary_keys/associations/through_association.rb
|
63
62
|
- lib/composite_primary_keys/attribute_methods.rb
|
64
63
|
- lib/composite_primary_keys/attribute_methods/primary_key.rb
|
65
64
|
- lib/composite_primary_keys/attribute_methods/read.rb
|
@@ -99,6 +98,7 @@ files:
|
|
99
98
|
- tasks/databases/postgresql.rake
|
100
99
|
- tasks/databases/sqlite.rake
|
101
100
|
- tasks/databases/sqlserver.rake
|
101
|
+
- tasks/databases/trilogy.rake
|
102
102
|
- tasks/website.rake
|
103
103
|
- test/README_tests.rdoc
|
104
104
|
- test/abstract_unit.rb
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- test/connections/databases.ci.yml
|
107
107
|
- test/connections/databases.example.yml
|
108
108
|
- test/connections/databases.yml
|
109
|
+
- test/fixtures/admin.rb
|
109
110
|
- test/fixtures/article.rb
|
110
111
|
- test/fixtures/articles.yml
|
111
112
|
- test/fixtures/capitol.rb
|
@@ -132,6 +133,7 @@ files:
|
|
132
133
|
- test/fixtures/membership_status.rb
|
133
134
|
- test/fixtures/membership_statuses.yml
|
134
135
|
- test/fixtures/memberships.yml
|
136
|
+
- test/fixtures/moderator.rb
|
135
137
|
- test/fixtures/product.rb
|
136
138
|
- test/fixtures/product_tariff.rb
|
137
139
|
- test/fixtures/product_tariffs.yml
|
@@ -154,6 +156,8 @@ files:
|
|
154
156
|
- test/fixtures/room_attribute_assignments.yml
|
155
157
|
- test/fixtures/room_attributes.yml
|
156
158
|
- test/fixtures/rooms.yml
|
159
|
+
- test/fixtures/staff_room.rb
|
160
|
+
- test/fixtures/staff_room_key.rb
|
157
161
|
- test/fixtures/street.rb
|
158
162
|
- test/fixtures/streets.yml
|
159
163
|
- test/fixtures/student.rb
|
@@ -165,6 +169,7 @@ files:
|
|
165
169
|
- test/fixtures/topic_sources.yml
|
166
170
|
- test/fixtures/topics.yml
|
167
171
|
- test/fixtures/user.rb
|
172
|
+
- test/fixtures/user_with_polymorphic_name.rb
|
168
173
|
- test/fixtures/users.yml
|
169
174
|
- test/plugins/pagination.rb
|
170
175
|
- test/plugins/pagination_helper.rb
|
@@ -183,6 +188,7 @@ files:
|
|
183
188
|
- test/test_exists.rb
|
184
189
|
- test/test_find.rb
|
185
190
|
- test/test_habtm.rb
|
191
|
+
- test/test_has_one_through.rb
|
186
192
|
- test/test_ids.rb
|
187
193
|
- test/test_miscellaneous.rb
|
188
194
|
- test/test_nested_attributes.rb
|
@@ -209,14 +215,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
215
|
requirements:
|
210
216
|
- - ">="
|
211
217
|
- !ruby/object:Gem::Version
|
212
|
-
version: 2.
|
218
|
+
version: 2.7.0
|
213
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
220
|
requirements:
|
215
221
|
- - ">="
|
216
222
|
- !ruby/object:Gem::Version
|
217
223
|
version: '0'
|
218
224
|
requirements: []
|
219
|
-
rubygems_version: 3.4.
|
225
|
+
rubygems_version: 3.4.21
|
220
226
|
signing_key:
|
221
227
|
specification_version: 4
|
222
228
|
summary: Composite key support for ActiveRecord
|
@@ -238,6 +244,7 @@ test_files:
|
|
238
244
|
- test/test_exists.rb
|
239
245
|
- test/test_find.rb
|
240
246
|
- test/test_habtm.rb
|
247
|
+
- test/test_has_one_through.rb
|
241
248
|
- test/test_ids.rb
|
242
249
|
- test/test_miscellaneous.rb
|
243
250
|
- test/test_nested_attributes.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
module ThroughAssociation
|
4
|
-
alias :original_construct_join_attributes :construct_join_attributes
|
5
|
-
|
6
|
-
def construct_join_attributes(*records)
|
7
|
-
# CPK
|
8
|
-
if !self.source_reflection.polymorphic? && source_reflection.klass.composite?
|
9
|
-
ensure_mutable
|
10
|
-
|
11
|
-
ids = records.map do |record|
|
12
|
-
source_reflection.association_primary_key(reflection.klass).map do |key|
|
13
|
-
record.send(key)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
cpk_in_predicate(through_association.scope.klass.arel_table, source_reflection.foreign_key, ids)
|
18
|
-
else
|
19
|
-
original_construct_join_attributes(*records)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|