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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +891 -888
  3. data/README.rdoc +181 -181
  4. data/Rakefile +37 -37
  5. data/lib/composite_primary_keys/arel/sqlserver.rb +37 -37
  6. data/lib/composite_primary_keys/arel/to_sql.rb +18 -18
  7. data/lib/composite_primary_keys/associations/association.rb +23 -23
  8. data/lib/composite_primary_keys/associations/collection_association.rb +31 -31
  9. data/lib/composite_primary_keys/associations/foreign_association.rb +15 -15
  10. data/lib/composite_primary_keys/associations/has_many_association.rb +35 -35
  11. data/lib/composite_primary_keys/associations/{join_dependency.rb → join_association.rb} +1 -1
  12. data/lib/composite_primary_keys/associations/through_association.rb +25 -25
  13. data/lib/composite_primary_keys/autosave_association.rb +60 -60
  14. data/lib/composite_primary_keys/composite_arrays.rb +86 -86
  15. data/lib/composite_primary_keys/composite_relation.rb +29 -29
  16. data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
  17. data/lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb +26 -26
  18. data/lib/composite_primary_keys/counter_cache.rb +15 -15
  19. data/lib/composite_primary_keys/fixtures.rb +21 -21
  20. data/lib/composite_primary_keys/persistence.rb +82 -82
  21. data/lib/composite_primary_keys/relation/calculations.rb +104 -104
  22. data/lib/composite_primary_keys/sanitization.rb +42 -42
  23. data/lib/composite_primary_keys/transactions.rb +34 -34
  24. data/lib/composite_primary_keys/validations/uniqueness.rb +31 -31
  25. data/lib/composite_primary_keys/version.rb +8 -8
  26. data/lib/composite_primary_keys.rb +118 -118
  27. data/scripts/console.rb +48 -48
  28. data/scripts/txt2html +76 -76
  29. data/scripts/txt2js +65 -65
  30. data/tasks/databases/mysql.rake +40 -40
  31. data/tasks/databases/oracle.rake +41 -41
  32. data/tasks/databases/postgresql.rake +38 -38
  33. data/tasks/databases/sqlite.rake +25 -25
  34. data/tasks/databases/sqlserver.rake +43 -43
  35. data/tasks/website.rake +18 -18
  36. data/test/README_tests.rdoc +56 -56
  37. data/test/abstract_unit.rb +114 -114
  38. data/test/connections/connection_spec.rb +27 -27
  39. data/test/connections/databases.example.yml +40 -40
  40. data/test/connections/databases.yml +40 -39
  41. data/test/fixtures/article.rb +10 -10
  42. data/test/fixtures/articles.yml +7 -7
  43. data/test/fixtures/capitol.rb +3 -3
  44. data/test/fixtures/capitols.yml +16 -16
  45. data/test/fixtures/comment.rb +5 -5
  46. data/test/fixtures/comments.yml +17 -17
  47. data/test/fixtures/department.rb +16 -16
  48. data/test/fixtures/dorm.rb +2 -2
  49. data/test/fixtures/dorms.yml +4 -4
  50. data/test/fixtures/employee.rb +5 -5
  51. data/test/fixtures/group.rb +2 -2
  52. data/test/fixtures/groups.yml +6 -6
  53. data/test/fixtures/membership.rb +8 -8
  54. data/test/fixtures/membership_status.rb +2 -2
  55. data/test/fixtures/membership_statuses.yml +16 -16
  56. data/test/fixtures/memberships.yml +10 -10
  57. data/test/fixtures/product.rb +9 -9
  58. data/test/fixtures/product_tariff.rb +5 -5
  59. data/test/fixtures/product_tariffs.yml +14 -14
  60. data/test/fixtures/products.yml +11 -11
  61. data/test/fixtures/reading.rb +4 -4
  62. data/test/fixtures/readings.yml +10 -10
  63. data/test/fixtures/reference_code.rb +7 -7
  64. data/test/fixtures/reference_codes.yml +28 -28
  65. data/test/fixtures/reference_type.rb +12 -12
  66. data/test/fixtures/reference_types.yml +9 -9
  67. data/test/fixtures/restaurant.rb +9 -9
  68. data/test/fixtures/restaurants.yml +14 -14
  69. data/test/fixtures/restaurants_suburb.rb +2 -2
  70. data/test/fixtures/room.rb +11 -11
  71. data/test/fixtures/room_assignment.rb +13 -13
  72. data/test/fixtures/room_assignments.yml +24 -24
  73. data/test/fixtures/room_attribute.rb +2 -2
  74. data/test/fixtures/room_attribute_assignment.rb +4 -4
  75. data/test/fixtures/room_attribute_assignments.yml +4 -4
  76. data/test/fixtures/room_attributes.yml +2 -2
  77. data/test/fixtures/rooms.yml +12 -12
  78. data/test/fixtures/street.rb +2 -2
  79. data/test/fixtures/student.rb +3 -3
  80. data/test/fixtures/students.yml +15 -15
  81. data/test/fixtures/suburb.rb +5 -5
  82. data/test/fixtures/tariff.rb +5 -5
  83. data/test/fixtures/tariffs.yml +14 -14
  84. data/test/fixtures/topic_sources.yml +3 -3
  85. data/test/fixtures/topics.yml +8 -8
  86. data/test/fixtures/users.yml +10 -10
  87. data/test/plugins/pagination.rb +405 -405
  88. data/test/plugins/pagination_helper.rb +135 -135
  89. data/test/test_associations.rb +372 -372
  90. data/test/test_attribute_methods.rb +63 -63
  91. data/test/test_callbacks.rb +99 -99
  92. data/test/test_composite_arrays.rb +38 -38
  93. data/test/test_counter_cache.rb +30 -30
  94. data/test/test_dumpable.rb +15 -15
  95. data/test/test_dup.rb +37 -37
  96. data/test/test_equal.rb +26 -26
  97. data/test/test_habtm.rb +141 -141
  98. data/test/test_miscellaneous.rb +32 -32
  99. data/test/test_optimistic.rb +18 -18
  100. data/test/test_pagination.rb +35 -35
  101. data/test/test_polymorphic.rb +43 -43
  102. data/test/test_predicates.rb +59 -59
  103. data/test/test_preload.rb +102 -102
  104. data/test/test_santiago.rb +23 -23
  105. data/test/test_touch.rb +23 -23
  106. data/test/test_tutorial_example.rb +25 -25
  107. data/test/test_validations.rb +13 -13
  108. 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
@@ -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
@@ -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.1
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: 2021-11-14 00:00:00.000000000 Z
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/join_dependency.rb
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.2.31
219
+ rubygems_version: 3.3.4
220
220
  signing_key:
221
221
  specification_version: 4
222
222
  summary: Composite key support for ActiveRecord