composite_primary_keys 12.0.0.rc5 → 12.0.4

Sign up to get free protection for your applications and to get access to all the features.
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