composite_primary_keys 12.0.0.rc5 → 12.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +41 -3
  3. data/README.rdoc +3 -2
  4. data/lib/composite_primary_keys.rb +57 -57
  5. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -0
  6. data/lib/composite_primary_keys/arel/sqlserver.rb +1 -3
  7. data/lib/composite_primary_keys/associations/through_association.rb +2 -1
  8. data/lib/composite_primary_keys/attribute_methods.rb +2 -2
  9. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +13 -0
  10. data/lib/composite_primary_keys/base.rb +12 -1
  11. data/lib/composite_primary_keys/composite_arrays.rb +49 -14
  12. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +8 -3
  13. data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +1 -1
  14. data/lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb +24 -0
  15. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +30 -12
  16. data/lib/composite_primary_keys/core.rb +1 -1
  17. data/lib/composite_primary_keys/persistence.rb +2 -2
  18. data/lib/composite_primary_keys/relation.rb +108 -15
  19. data/lib/composite_primary_keys/relation/calculations.rb +5 -0
  20. data/lib/composite_primary_keys/relation/finder_methods.rb +8 -8
  21. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +1 -1
  22. data/lib/composite_primary_keys/validations/uniqueness.rb +1 -1
  23. data/lib/composite_primary_keys/version.rb +2 -2
  24. data/test/abstract_unit.rb +4 -6
  25. data/test/fixtures/article.rb +4 -0
  26. data/test/fixtures/articles.yml +4 -3
  27. data/test/fixtures/comment.rb +1 -3
  28. data/test/fixtures/comments.yml +10 -9
  29. data/test/fixtures/db_definitions/db2-create-tables.sql +0 -14
  30. data/test/fixtures/db_definitions/db2-drop-tables.sql +1 -3
  31. data/test/fixtures/db_definitions/mysql.sql +7 -44
  32. data/test/fixtures/db_definitions/oracle.drop.sql +3 -9
  33. data/test/fixtures/db_definitions/oracle.sql +12 -48
  34. data/test/fixtures/db_definitions/postgresql.sql +7 -44
  35. data/test/fixtures/db_definitions/sqlite.sql +6 -42
  36. data/test/fixtures/db_definitions/sqlserver.sql +5 -41
  37. data/test/fixtures/department.rb +8 -3
  38. data/test/fixtures/departments.yml +4 -4
  39. data/test/fixtures/readings.yml +2 -2
  40. data/test/fixtures/restaurants_suburbs.yml +1 -1
  41. data/test/fixtures/streets.yml +2 -2
  42. data/test/fixtures/suburbs.yml +2 -2
  43. data/test/fixtures/user.rb +3 -2
  44. data/test/test_associations.rb +30 -23
  45. data/test/test_composite_arrays.rb +14 -0
  46. data/test/test_create.rb +15 -18
  47. data/test/test_delete.rb +3 -3
  48. data/test/test_exists.rb +5 -5
  49. data/test/test_find.rb +22 -2
  50. data/test/test_habtm.rb +2 -2
  51. data/test/test_ids.rb +5 -6
  52. data/test/test_nested_attributes.rb +0 -57
  53. data/test/test_polymorphic.rb +29 -13
  54. data/test/test_preload.rb +4 -3
  55. data/test/test_serialize.rb +2 -2
  56. data/test/test_update.rb +19 -1
  57. metadata +10 -70
  58. data/test/db_test.rb +0 -53
  59. data/test/fixtures/hack.rb +0 -5
  60. data/test/fixtures/hacks.yml +0 -3
  61. data/test/fixtures/pk_called_id.rb +0 -5
  62. data/test/fixtures/pk_called_ids.yml +0 -11
  63. data/test/fixtures/reference_code_using_composite_key_alias.rb +0 -8
  64. data/test/fixtures/reference_code_using_simple_key_alias.rb +0 -8
  65. data/test/fixtures/seat.rb +0 -5
  66. data/test/fixtures/seats.yml +0 -9
  67. data/test/fixtures/topic.rb +0 -6
  68. data/test/fixtures/topic_source.rb +0 -7
  69. data/test/setup.rb +0 -51
  70. data/test/test_aliases.rb +0 -18
  71. data/test/test_enum.rb +0 -21
  72. data/test/test_suite.rb +0 -35
@@ -5,11 +5,11 @@ class TestSerialization < ActiveSupport::TestCase
5
5
 
6
6
  def test_json
7
7
  department = Department.first
8
- assert_equal('{"department_id":1,"location_id":1}', department.to_json)
8
+ assert_equal('{"id":1,"location_id":1}', department.to_json)
9
9
  end
10
10
 
11
11
  def test_serializable_hash
12
12
  department = Department.first
13
- assert_equal({"department_id" => 1,"location_id" => 1}, department.serializable_hash)
13
+ assert_equal({"id" => 1,"location_id" => 1}, department.serializable_hash)
14
14
  end
15
15
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../abstract_unit', __FILE__)
2
2
 
3
3
  class TestUpdate < ActiveSupport::TestCase
4
- fixtures :reference_types, :reference_codes
4
+ fixtures :departments, :reference_types, :reference_codes, :rooms, :room_assignments
5
5
 
6
6
  CLASSES = {
7
7
  :single => {
@@ -36,6 +36,13 @@ class TestUpdate < ActiveSupport::TestCase
36
36
  end
37
37
  end
38
38
 
39
+ def test_update_attributes_with_id_field
40
+ department = departments(:accounting)
41
+ department.update_attribute(:location_id, 3)
42
+ department.reload
43
+ assert_equal(3, department.location_id)
44
+ end
45
+
39
46
  def test_update_primary_key
40
47
  obj = ReferenceCode.find([1,1])
41
48
  obj.reference_type_id = 2
@@ -76,4 +83,15 @@ class TestUpdate < ActiveSupport::TestCase
76
83
 
77
84
  assert_equal(2, query.count)
78
85
  end
86
+
87
+ def test_update_with_uniqueness
88
+ assignment = room_assignments(:jacksons_room)
89
+ room_1 = rooms(:branner_room_1)
90
+ room_2 = rooms(:branner_room_3)
91
+
92
+ assert_equal(room_1, assignment.room)
93
+ assignment.room = room_2
94
+ assignment.save!
95
+ assert_equal(room_2, assignment.room)
96
+ end
79
97
  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: 12.0.0.rc5
4
+ version: 12.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charlie Savage
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-14 00:00:00.000000000 Z
11
+ date: 2020-12-30 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: 6.0.0.rc1
19
+ version: 6.0.0
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: 6.0.0.rc1
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,48 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: mysql2
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: sqlite3
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: pg
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
41
  description: Composite key support for ActiveRecord
84
42
  email:
85
43
  executables: []
@@ -90,6 +48,7 @@ files:
90
48
  - README.rdoc
91
49
  - Rakefile
92
50
  - lib/composite_primary_keys.rb
51
+ - lib/composite_primary_keys/active_model/attribute_assignment.rb
93
52
  - lib/composite_primary_keys/arel/sqlserver.rb
94
53
  - lib/composite_primary_keys/arel/to_sql.rb
95
54
  - lib/composite_primary_keys/associations/association.rb
@@ -112,6 +71,7 @@ files:
112
71
  - lib/composite_primary_keys/composite_relation.rb
113
72
  - lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb
114
73
  - lib/composite_primary_keys/connection_adapters/abstract_adapter.rb
74
+ - lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb
115
75
  - lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb
116
76
  - lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb
117
77
  - lib/composite_primary_keys/core.rb
@@ -146,7 +106,6 @@ files:
146
106
  - test/connections/databases.ci.yml
147
107
  - test/connections/databases.example.yml
148
108
  - test/connections/databases.yml
149
- - test/db_test.rb
150
109
  - test/fixtures/article.rb
151
110
  - test/fixtures/articles.yml
152
111
  - test/fixtures/capitol.rb
@@ -169,14 +128,10 @@ files:
169
128
  - test/fixtures/employees.yml
170
129
  - test/fixtures/group.rb
171
130
  - test/fixtures/groups.yml
172
- - test/fixtures/hack.rb
173
- - test/fixtures/hacks.yml
174
131
  - test/fixtures/membership.rb
175
132
  - test/fixtures/membership_status.rb
176
133
  - test/fixtures/membership_statuses.yml
177
134
  - test/fixtures/memberships.yml
178
- - test/fixtures/pk_called_id.rb
179
- - test/fixtures/pk_called_ids.yml
180
135
  - test/fixtures/product.rb
181
136
  - test/fixtures/product_tariff.rb
182
137
  - test/fixtures/product_tariffs.yml
@@ -184,8 +139,6 @@ files:
184
139
  - test/fixtures/reading.rb
185
140
  - test/fixtures/readings.yml
186
141
  - test/fixtures/reference_code.rb
187
- - test/fixtures/reference_code_using_composite_key_alias.rb
188
- - test/fixtures/reference_code_using_simple_key_alias.rb
189
142
  - test/fixtures/reference_codes.yml
190
143
  - test/fixtures/reference_type.rb
191
144
  - test/fixtures/reference_types.yml
@@ -201,8 +154,6 @@ files:
201
154
  - test/fixtures/room_attribute_assignments.yml
202
155
  - test/fixtures/room_attributes.yml
203
156
  - test/fixtures/rooms.yml
204
- - test/fixtures/seat.rb
205
- - test/fixtures/seats.yml
206
157
  - test/fixtures/street.rb
207
158
  - test/fixtures/streets.yml
208
159
  - test/fixtures/student.rb
@@ -211,16 +162,12 @@ files:
211
162
  - test/fixtures/suburbs.yml
212
163
  - test/fixtures/tariff.rb
213
164
  - test/fixtures/tariffs.yml
214
- - test/fixtures/topic.rb
215
- - test/fixtures/topic_source.rb
216
165
  - test/fixtures/topic_sources.yml
217
166
  - test/fixtures/topics.yml
218
167
  - test/fixtures/user.rb
219
168
  - test/fixtures/users.yml
220
169
  - test/plugins/pagination.rb
221
170
  - test/plugins/pagination_helper.rb
222
- - test/setup.rb
223
- - test/test_aliases.rb
224
171
  - test/test_associations.rb
225
172
  - test/test_attribute_methods.rb
226
173
  - test/test_attributes.rb
@@ -232,7 +179,6 @@ files:
232
179
  - test/test_delete.rb
233
180
  - test/test_dumpable.rb
234
181
  - test/test_dup.rb
235
- - test/test_enum.rb
236
182
  - test/test_equal.rb
237
183
  - test/test_exists.rb
238
184
  - test/test_find.rb
@@ -247,7 +193,6 @@ files:
247
193
  - test/test_preload.rb
248
194
  - test/test_santiago.rb
249
195
  - test/test_serialize.rb
250
- - test/test_suite.rb
251
196
  - test/test_touch.rb
252
197
  - test/test_tutorial_example.rb
253
198
  - test/test_update.rb
@@ -264,23 +209,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
209
  requirements:
265
210
  - - ">="
266
211
  - !ruby/object:Gem::Version
267
- version: 2.2.2
212
+ version: 2.5.0
268
213
  required_rubygems_version: !ruby/object:Gem::Requirement
269
214
  requirements:
270
- - - ">"
215
+ - - ">="
271
216
  - !ruby/object:Gem::Version
272
- version: 1.3.1
217
+ version: '0'
273
218
  requirements: []
274
- rubygems_version: 3.0.3
219
+ rubygems_version: 3.1.4
275
220
  signing_key:
276
221
  specification_version: 4
277
222
  summary: Composite key support for ActiveRecord
278
223
  test_files:
279
224
  - test/abstract_unit.rb
280
- - test/db_test.rb
281
225
  - test/README_tests.rdoc
282
- - test/setup.rb
283
- - test/test_aliases.rb
284
226
  - test/test_associations.rb
285
227
  - test/test_attributes.rb
286
228
  - test/test_attribute_methods.rb
@@ -292,7 +234,6 @@ test_files:
292
234
  - test/test_delete.rb
293
235
  - test/test_dumpable.rb
294
236
  - test/test_dup.rb
295
- - test/test_enum.rb
296
237
  - test/test_equal.rb
297
238
  - test/test_exists.rb
298
239
  - test/test_find.rb
@@ -307,7 +248,6 @@ test_files:
307
248
  - test/test_preload.rb
308
249
  - test/test_santiago.rb
309
250
  - test/test_serialize.rb
310
- - test/test_suite.rb
311
251
  - test/test_touch.rb
312
252
  - test/test_tutorial_example.rb
313
253
  - test/test_update.rb
@@ -1,53 +0,0 @@
1
- # assoc_test.rb
2
-
3
- path = File.expand_path(File.join(File.basename(__FILE__), "..", "lib", "composite_primary_keys"))
4
- puts path
5
-
6
- require File.join(path)
7
- require 'active_record'
8
-
9
- $configuration = {
10
- :adapter => 'postgresql',
11
- :database => 'cpk_test',
12
- :username => 'postgres'
13
- }
14
-
15
- ActiveRecord::Base.establish_connection($configuration) unless ActiveRecord::Base.connected?
16
-
17
- module GlobePG
18
- class PGBase < ActiveRecord::Base
19
- self.abstract_class = true
20
- # establish_connection($configuration) unless connected?
21
- end
22
- end
23
-
24
- module GlobePG
25
- class TeacherToSchool < PGBase
26
- set_table_name 'teacher_to_school'
27
- self.primary_keys = ['teacherid', 'schoolid']
28
-
29
- belongs_to :globe_teacher, :foreign_key => 'teacherid'
30
- belongs_to :globe_school, :foreign_key => 'schoolid'
31
- end
32
- end
33
-
34
- module GlobePG
35
- class GlobeSchool < PGBase
36
- set_table_name 'globe_school'
37
- self.primary_key = 'schoolid'
38
- has_many :teacher_to_schools, :foreign_key => :schoolid
39
- has_many :globe_teachers, :through => :teacher_to_schools
40
- end
41
- end
42
-
43
- module GlobePG
44
- class GlobeTeacher < PGBase
45
- set_table_name 'globe_teacher'
46
- self.primary_key = 'teacherid'
47
- has_many :teacher_to_schools, :foreign_key => :teacherid
48
- has_many :globe_schools, :through => :teacher_to_schools
49
- end
50
- end
51
-
52
- teacher = GlobePG::GlobeTeacher.find_by_teacherid('ZZGLOBEY')
53
- p teacher.globe_schools
@@ -1,5 +0,0 @@
1
- class Hack < ActiveRecord::Base
2
- has_many :comments, :as => :person
3
-
4
- has_one :first_comment, :as => :person, :class_name => "Comment"
5
- end
@@ -1,3 +0,0 @@
1
- andrew:
2
- id: 7
3
- name: andrew
@@ -1,5 +0,0 @@
1
- class PkCalledId < ActiveRecord::Base
2
- self.primary_keys = :id, :reference_code
3
-
4
- validates_presence_of :reference_code, :code_label, :abbreviation
5
- end
@@ -1,11 +0,0 @@
1
- name_prefix_mr:
2
- id: 1
3
- reference_code: 1
4
- code_label: MR
5
- abbreviation: Mr
6
-
7
- name_prefix_mrs:
8
- id: 2
9
- reference_code: 1
10
- code_label: MRS
11
- abbreviation: Mrs
@@ -1,8 +0,0 @@
1
- class ReferenceCodeUsingCompositeKeyAlias < ActiveRecord::Base
2
- self.table_name = 'reference_codes'
3
- self.primary_key = [:reference_type_id, :reference_code]
4
-
5
- belongs_to :reference_type, :foreign_key => "reference_type_id"
6
-
7
- validates_presence_of :reference_code, :code_label, :abbreviation
8
- end
@@ -1,8 +0,0 @@
1
- class ReferenceCodeUsingSimpleKeyAlias < ActiveRecord::Base
2
- self.table_name = 'reference_codes'
3
- self.primary_key = :code_label
4
-
5
- belongs_to :reference_type, :foreign_key => "reference_type_id"
6
-
7
- validates_presence_of :reference_code, :code_label, :abbreviation
8
- end
@@ -1,5 +0,0 @@
1
- class Seat < ActiveRecord::Base
2
- self.primary_keys = [:flight_number, :seat]
3
-
4
- validates_uniqueness_of :customer
5
- end
@@ -1,9 +0,0 @@
1
- seat1:
2
- flight_number: 1
3
- seat: 1
4
- customer: 1
5
-
6
- seat2:
7
- flight_number: 1
8
- seat: 2
9
- customer: 2
@@ -1,6 +0,0 @@
1
- class Topic < ActiveRecord::Base
2
- has_many :topic_sources, dependent: :destroy
3
- accepts_nested_attributes_for :topic_sources
4
-
5
- validates :name, :feed_size, presence: true
6
- end
@@ -1,7 +0,0 @@
1
- class TopicSource < ActiveRecord::Base
2
- self.primary_keys = :topic_id, :platform
3
-
4
- belongs_to :topic, inverse_of: :topic_sources
5
-
6
- validates :platform, presence: true
7
- end
@@ -1,51 +0,0 @@
1
- # setup_db.rb
2
- require 'dbi'
3
-
4
- # Run "createdb cpk_test" first
5
-
6
- teacher_to_school = %Q{
7
- create table teacher_to_school(
8
- schoolid varchar(8),
9
- teacherid varchar(8),
10
- datebegin date,
11
- teacherrole varchar(20),
12
- primary key (schoolid, teacherid)
13
- );
14
-
15
- }
16
-
17
- globe_teacher = %Q{
18
- create table globe_teacher(
19
- teacherid varchar(8) primary key,
20
- currentschoolid varchar(8),
21
- userid varchar(16)
22
- );
23
-
24
- }
25
-
26
- globe_school = %Q{
27
- create table globe_school(
28
- schoolid varchar(8) primary key,
29
- schoolname varchar(100) not null,
30
- city varchar(35) not null
31
- )
32
-
33
- }
34
-
35
- add_records = [
36
- "insert into globe_teacher values ('ZZGLOBEY', 'ZZGLOBE1',
37
- 'dberger');",
38
- "insert into globe_school values ('ZZCOUCAR', 'NCAR Foothills Lab',
39
- 'Boulder');",
40
- "insert into globe_school values ('ZZGLOBE1', 'The GLOBE Program',
41
- 'Boulder');",
42
- "insert into teacher_to_school values('ZZGLOBE1', 'ZZGLOBEY', '1-JUN-2010', 'GLOBE OFFICE');",
43
- "insert into teacher_to_school values('ZZCOUCAR', 'ZZGLOBEY', '1-AUG-2010', 'GLOBE Teacher');"
44
- ]
45
-
46
- DBI.connect('dbi:Pg:cpk_test', 'postgres') do |dbh|
47
- dbh.execute(teacher_to_school)
48
- dbh.execute(globe_teacher)
49
- dbh.execute(globe_school)
50
- add_records.each{ |sql| dbh.execute(sql) }
51
- end