webdack-uuid_migration 1.4.0 → 1.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25ef14eb1022b074c75b7ade13dd9c8e7082ba2b09eb3eeca117af57e531791e
4
- data.tar.gz: 6b496e37a98d3efd7d8f3d6654a024e21e810786c10f7298a713e4de770dde8e
3
+ metadata.gz: 9826dc874d0b0545b500caa8d1ddaac9f2d13905730e0d1a32271df4624266e9
4
+ data.tar.gz: 1b372945e222bca7777cfdf67908745be2032df93de044e6c11617b03e61309c
5
5
  SHA512:
6
- metadata.gz: 439f373570a94d237cd92f86e980fc8d8f21cf1939110be0827915030bd8fc84307b0a9774b85e0a33d474bca12d72b303e3893417fad793e17b8859327d72fa
7
- data.tar.gz: 1dcb80f724a2d9b2aefa3b88b1e201dbab2ff89b2ba10c3d852d9d9ccbd3e6efa390fa58c227e546dd3de773e07c3631636ec2378889d4f440b66c7a7fdc384d
6
+ metadata.gz: a44d513dd4cb66befcd8b697ebb8fa3d750f1da464e62d49e787a7063a96588e2c237fa48e159ee556920175d04ce58266afd3293a20a4255b0ce7a6906a3263
7
+ data.tar.gz: fbd07db878a5560566dfc5dba04dc9e2808949429059c45db9666a140eb2cd0dd5696e88427fb035d97a9cb3e38af0d8bd68e9698cf880f662612d324282cb5c
@@ -0,0 +1,9 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: monthly
7
+ time: "23:30"
8
+ open-pull-requests-limit: 10
9
+ target-branch: develop
data/README.md CHANGED
@@ -49,6 +49,7 @@ this gem can safely be removed from your applications Gemfile.
49
49
 
50
50
  - Put `require 'webdack/uuid_migration/helpers'` in your migration file.
51
51
  - Enable `'pgcrypto'` directly in Postgres database or by adding `enable_extension 'pgcrypto'` to your migration.
52
+ If you want to generate random UUIDs, enable `uuid-ossp` as well.
52
53
  - Use methods from {Webdack::UUIDMigration::Helpers} as appropriate.
53
54
 
54
55
  Example:
@@ -80,8 +81,9 @@ Example:
80
81
  end
81
82
  ```
82
83
 
83
- Integer values are converted to UUID by padding 0's to the left. This makes it possible to
84
- retrieve old id in future.
84
+ By default, integer values are converted to UUID by padding 0's to the left.
85
+ This makes it possible to retrieve old id in future. See **Generating random UUIDs** below to
86
+ convert integer into random UUIDs using a seed.
85
87
 
86
88
  See {Webdack::UUIDMigration::Helpers} for more details. {Webdack::UUIDMigration::Helpers} is mixed
87
89
  into {ActiveRecord::Migration}, so that all methods can directly be used within migrations.
@@ -153,6 +155,31 @@ Example:
153
155
  # See the rspec test case in spec folder for full example
154
156
  ```
155
157
 
158
+ ## Generating random UUIDs
159
+
160
+ You can provide a `seed` parameter with a valid UUID, which will be used to convert integers into random
161
+ UUIDs using [uuid_generate_v5](https://www.postgresql.org/docs/current/uuid-ossp.html). You will only be
162
+ able to recover the old IDs in the future if you use the seed you used during the migration to generate a
163
+ rainbow table.
164
+
165
+ Examples:
166
+
167
+ ```ruby
168
+ seed = SecureRandom.uuid
169
+
170
+ primary_key_to_uuid :colleges, seed: seed
171
+ columns_to_uuid :students, :institution_id, seed: seed
172
+ polymorphic_column_data_for_uuid :students, :institution, 'College', seed: seed
173
+ primary_key_and_all_references_to_uuid :cities: seed: seed
174
+
175
+ ```
176
+
177
+ **Note:** Given a set of IDs (which are used, for example, as primary key in one table and foreign
178
+ key in multiple tables), you will need to use the same seed in all method calls. Otherwise, the
179
+ conversion will happen differently in each one of the tables, and the relations will be effectively
180
+ lost. In general, it is adviced to use a different seed per ID set (primary key) to maintain data
181
+ consistency and guarantee uniqueness across tables.
182
+
156
183
  ## Compatibility
157
184
 
158
185
  Works with Rails 4.2+, 5 & 6. It uses Rails 4's out-of-the-box UUID support for PostgreSQL.
@@ -174,6 +201,7 @@ To run the test suite:
174
201
  - [Nick Schwaderer](https://github.com/Schwad) Rails 5.2.x compatibility
175
202
  - [Kelsey Hannan](https://github.com/KelseyDH) Upgrading to `pgcrypto`
176
203
  - [Sébastien Dubois](https://github.com/sedubois) Ruby 3.0 compatibility
204
+ - [Manuel Bustillo Alonso](https://github.com/bustikiller) Random UUID support
177
205
 
178
206
  ## Contributing
179
207
 
@@ -5,7 +5,6 @@ module Webdack
5
5
  module Helpers
6
6
  include SchemaHelpers
7
7
 
8
-
9
8
  # Converts primary key from Serial Integer to UUID, migrates all data by left padding with 0's
10
9
  # sets gen_random_uuid() as default for the column
11
10
  #
@@ -14,15 +13,17 @@ module Webdack
14
13
  # @option options [Symbol] :primary_key if not supplied queries the schema (should work most of the times)
15
14
  # @option options [String] :default mechanism to generate UUID for new records, default gen_random_uuid(),
16
15
  # which is Rails 4.0.0 default as well
16
+ # @option options [String] :seed used as namespace to generate UUIDv5 from the existing ID
17
17
  # @return [none]
18
- def primary_key_to_uuid(table, options={})
19
- default= options[:default] || 'gen_random_uuid()'
18
+ def primary_key_to_uuid(table, options = {})
19
+ default = options[:default] || 'gen_random_uuid()'
20
+ seed = options[:seed]
20
21
 
21
- column= connection.primary_key(table)
22
+ column = connection.primary_key(table)
22
23
 
23
24
  execute %Q{ALTER TABLE #{table}
24
25
  ALTER COLUMN #{column} DROP DEFAULT,
25
- ALTER COLUMN #{column} SET DATA TYPE UUID USING (#{to_uuid_pg(column)}),
26
+ ALTER COLUMN #{column} SET DATA TYPE UUID USING (#{to_uuid_pg(column, seed)}),
26
27
  ALTER COLUMN #{column} SET DEFAULT #{default}}
27
28
 
28
29
  execute %Q{DROP SEQUENCE IF EXISTS #{table}_#{column}_seq} rescue nil
@@ -32,22 +33,24 @@ module Webdack
32
33
  #
33
34
  # @param table [Symbol]
34
35
  # @param column [Symbol]
36
+ # @param seed [String]
35
37
  #
36
38
  # @return [none]
37
- def column_to_uuid(table, column)
39
+ def column_to_uuid(table, column, seed: nil)
38
40
  execute %Q{ALTER TABLE #{table}
39
- ALTER COLUMN #{column} SET DATA TYPE UUID USING (#{to_uuid_pg(column)})}
41
+ ALTER COLUMN #{column} SET DATA TYPE UUID USING (#{to_uuid_pg(column, seed)})}
40
42
  end
41
43
 
42
44
  # Converts columns to UUID, migrates all data by left padding with 0's
43
45
  #
44
46
  # @param table [Symbol]
45
47
  # @param columns
48
+ # @param seed [String]
46
49
  #
47
50
  # @return [none]
48
- def columns_to_uuid(table, *columns)
51
+ def columns_to_uuid(table, *columns, seed: nil)
49
52
  columns.each do |column|
50
- column_to_uuid(table, column)
53
+ column_to_uuid(table, column, seed: seed)
51
54
  end
52
55
  end
53
56
 
@@ -68,10 +71,12 @@ module Webdack
68
71
  # @param table[Symbol]
69
72
  # @param column [Symbol] it will change data in corresponding <column>_id
70
73
  # @param entities [String] data referring these entities will be converted
71
- def polymorphic_column_data_for_uuid(table, column, *entities)
72
- list_of_entities= entities.map{|e| "'#{e}'"}.join(', ')
74
+ # @param seed [String]
75
+
76
+ def polymorphic_column_data_for_uuid(table, column, *entities, seed: nil)
77
+ list_of_entities = entities.map { |e| "'#{e}'" }.join(', ')
73
78
  execute %Q{
74
- UPDATE #{table} SET #{column}_id= #{to_uuid_pg("#{column}_id")}
79
+ UPDATE #{table} SET #{column}_id= #{to_uuid_pg("#{column}_id", seed)}
75
80
  WHERE #{column}_type in (#{list_of_entities})
76
81
  }
77
82
  end
@@ -88,29 +93,38 @@ module Webdack
88
93
  # - Restore all foreign keys
89
94
  #
90
95
  # @param table[Symbol]
96
+ # @param seed [String]
97
+
91
98
  # @note Works only with Rails 4.2 or newer
92
- def primary_key_and_all_references_to_uuid(table)
99
+ def primary_key_and_all_references_to_uuid(table, seed: nil)
93
100
  fk_specs = foreign_keys_into(table)
94
101
 
95
102
  drop_foreign_keys(fk_specs)
96
103
 
97
- primary_key_to_uuid(table)
104
+ primary_key_to_uuid(table, seed: seed)
98
105
 
99
106
  fk_specs.each do |fk_spec|
100
- columns_to_uuid fk_spec[:from_table], fk_spec[:column]
107
+ columns_to_uuid fk_spec[:from_table], fk_spec[:column], seed: seed
101
108
  end
102
109
 
103
110
  create_foreign_keys(fk_specs.deep_dup)
104
111
  end
105
112
 
106
113
  private
114
+
107
115
  # Prepare a fragment that can be used in SQL statements that converts teh data value
108
116
  # from integer, string, or UUID to valid UUID string as per Postgres guidelines
109
117
  #
110
118
  # @param column [Symbol]
119
+ # @param seed [String]
120
+
111
121
  # @return [String]
112
- def to_uuid_pg(column)
113
- "uuid(lpad(replace(text(#{column}),'-',''), 32, '0'))"
122
+ def to_uuid_pg(column, seed)
123
+ if seed
124
+ "uuid_generate_v5('#{seed}'::uuid, #{column}::text)"
125
+ else
126
+ "uuid(lpad(replace(text(#{column}),'-',''), 32, '0'))"
127
+ end
114
128
  end
115
129
  end
116
130
  end
@@ -2,6 +2,6 @@
2
2
  module Webdack
3
3
  #
4
4
  module UUIDMigration
5
- VERSION = "1.4.0"
5
+ VERSION = "1.5.0"
6
6
  end
7
7
  end
@@ -1,13 +1,25 @@
1
1
  require_relative 'spec_helper'
2
2
 
3
+ class ActiveRecordMigration
4
+ def self.seed_with(seed)
5
+ @@seed = seed
6
+ self
7
+ end
8
+
9
+ def seed
10
+ @@seed
11
+ end
12
+ end
13
+
3
14
  class BasicMigration < ActiveRecordMigration
4
15
  def change
5
16
  reversible do |dir|
6
17
  dir.up do
7
18
  enable_extension 'pgcrypto'
19
+ enable_extension 'uuid-ossp'
8
20
 
9
- primary_key_to_uuid :students
10
- columns_to_uuid :students, :city_id, :institution_id
21
+ primary_key_to_uuid :students, seed: seed
22
+ columns_to_uuid :students, :city_id, :institution_id, seed: seed
11
23
  end
12
24
 
13
25
  dir.down do
@@ -22,13 +34,14 @@ class MigrateAllOneGo < ActiveRecordMigration
22
34
  reversible do |dir|
23
35
  dir.up do
24
36
  enable_extension 'pgcrypto'
37
+ enable_extension 'uuid-ossp'
25
38
 
26
- primary_key_to_uuid :cities
27
- primary_key_to_uuid :colleges
28
- primary_key_to_uuid :schools
39
+ primary_key_to_uuid :cities, seed: seed
40
+ primary_key_to_uuid :colleges, seed: seed
41
+ primary_key_to_uuid :schools, seed: seed
29
42
 
30
- primary_key_to_uuid :students
31
- columns_to_uuid :students, :city_id, :institution_id
43
+ primary_key_to_uuid :students, seed: seed
44
+ columns_to_uuid :students, :city_id, :institution_id, seed: seed
32
45
  end
33
46
 
34
47
  dir.down do
@@ -43,8 +56,9 @@ class MigrateWithFk < ActiveRecordMigration
43
56
  reversible do |dir|
44
57
  dir.up do
45
58
  enable_extension 'pgcrypto'
59
+ enable_extension 'uuid-ossp'
46
60
 
47
- primary_key_and_all_references_to_uuid :cities
61
+ primary_key_and_all_references_to_uuid :cities, seed: seed
48
62
  end
49
63
 
50
64
  dir.down do
@@ -59,15 +73,16 @@ class MigrateStep01 < ActiveRecordMigration
59
73
  reversible do |dir|
60
74
  dir.up do
61
75
  enable_extension 'pgcrypto'
76
+ enable_extension 'uuid-ossp'
62
77
 
63
- primary_key_to_uuid :cities
64
- primary_key_to_uuid :colleges
78
+ primary_key_to_uuid :cities, seed: seed
79
+ primary_key_to_uuid :colleges, seed: seed
65
80
 
66
- primary_key_to_uuid :students
67
- columns_to_uuid :students, :city_id
81
+ primary_key_to_uuid :students, seed: seed
82
+ columns_to_uuid :students, :city_id, seed: seed
68
83
 
69
84
  change_column :students, :institution_id, :string
70
- polymorphic_column_data_for_uuid :students, :institution, 'College'
85
+ polymorphic_column_data_for_uuid :students, :institution, 'College', seed: seed
71
86
  end
72
87
 
73
88
  dir.down do
@@ -81,8 +96,8 @@ class MigrateStep02 < ActiveRecordMigration
81
96
  def change
82
97
  reversible do |dir|
83
98
  dir.up do
84
- primary_key_to_uuid :schools
85
- columns_to_uuid :students, :institution_id
99
+ primary_key_to_uuid :schools, seed: seed
100
+ polymorphic_column_data_for_uuid :students, :institution, 'School', seed: seed
86
101
  end
87
102
 
88
103
  dir.down do
@@ -117,152 +132,161 @@ describe Webdack::UUIDMigration::Helpers do
117
132
  initial_setup
118
133
  end
119
134
 
120
- describe 'Basic Test' do
121
- it 'should migrate keys correctly' do
122
- # Select a random student
123
- student = Student.all.to_a.sample
124
-
125
- # Store these values to check against later
126
- original_name= student.name
127
- original_ids= [student.id, student.city_id, student.institution_id].map{|i| i.to_i}
128
-
129
- # Migrate and verify that all indexes and primary keys are intact
130
- expect {
131
- BasicMigration.migrate(:up)
132
- reset_columns_data
133
- }.to_not change {
134
- indexes= Student.connection.indexes(:students).sort_by { |i| i.name }.map do |i|
135
- [i.table, i.name, i.unique, i.columns, i.lengths, i.orders, i.where]
135
+ [nil, SecureRandom.uuid].each do |seed|
136
+ context "when the seed is #{seed}" do
137
+ let(:seed_value) { seed }
138
+
139
+ describe 'Basic Test' do
140
+ it 'should migrate keys correctly' do
141
+ # Select a random student
142
+ student = Student.all.to_a.sample
143
+
144
+ # Store these values to check against later
145
+ original_name= student.name
146
+ original_ids= [student.id, student.city_id, student.institution_id].map{|i| i.to_i}
147
+
148
+ # Migrate and verify that all indexes and primary keys are intact
149
+ expect {
150
+ BasicMigration.seed_with(seed_value).migrate(:up)
151
+ reset_columns_data
152
+ }.to_not change {
153
+ indexes= Student.connection.indexes(:students).sort_by { |i| i.name }.map do |i|
154
+ [i.table, i.name, i.unique, i.columns, i.lengths, i.orders, i.where]
155
+ end
156
+
157
+ [indexes, Student.connection.primary_key(:students)]
158
+ }
159
+
160
+ # Verify that our data is still there
161
+ student= Student.where(name: original_name).first
162
+
163
+ # Verify that data in id columns have been migrated to UUID by verifying the format
164
+ [student.id, student.city_id, student.institution_id].each do |id|
165
+ expect(id).to match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/)
166
+ end
167
+
168
+ unless seed_value
169
+ # Verify that it is possible to retirve original id values (only without seed!)
170
+ ids= [student.id, student.city_id, student.institution_id].map{|i| i.gsub('-','').to_i}
171
+ expect(ids).to eq(original_ids)
172
+ end
173
+
174
+ # Verify that schema reprts the migrated columns to be uuid type
175
+ columns= Student.connection.columns(:students)
176
+ [:id, :city_id, :institution_id].each do |column|
177
+ expect(columns.find{|c| c.name == column.to_s}.type).to eq :uuid
178
+ end
179
+
180
+ # Verify that primary key has correct default
181
+ expect(columns.find{|c| c.name == 'id'}.default_function).to eq 'gen_random_uuid()'
136
182
  end
137
-
138
- [indexes, Student.connection.primary_key(:students)]
139
- }
140
-
141
- # Verify that our data is still there
142
- student= Student.where(name: original_name).first
143
-
144
- # Verify that data in id columns have been migrated to UUID by verifying the format
145
- [student.id, student.city_id, student.institution_id].each do |id|
146
- expect(id).to match(/^0{8}-0{4}-0{4}-0{4}-\d{12}$/)
147
183
  end
148
184
 
149
- # Verify that it is possible to retirve original id values
150
- ids= [student.id, student.city_id, student.institution_id].map{|i| i.gsub('-','').to_i}
151
- expect(ids).to eq(original_ids)
152
-
153
- # Verify that schema reprts the migrated columns to be uuid type
154
- columns= Student.connection.columns(:students)
155
- [:id, :city_id, :institution_id].each do |column|
156
- expect(columns.find{|c| c.name == column.to_s}.type).to eq :uuid
185
+ it 'should migrate entire database in one go' do
186
+ expect {
187
+ MigrateAllOneGo.seed_with(seed_value).migrate(:up)
188
+ reset_columns_data
189
+ }.to_not change {
190
+ key_relationships
191
+ }
157
192
  end
158
193
 
159
- # Verify that primary key has correct default
160
- expect(columns.find{|c| c.name == 'id'}.default_function).to eq 'gen_random_uuid()'
161
- end
162
- end
163
-
164
- it 'should migrate entire database in one go' do
165
- expect {
166
- MigrateAllOneGo.migrate(:up)
167
- reset_columns_data
168
- }.to_not change {
169
- key_relationships
170
- }
171
- end
172
-
173
- it 'should migrate a primary key and all columns referencing it using foreign keys', rails_4_2_or_newer: true do
174
- # Create 2 more tables similar to the way new version of Rails will do
175
- create_tables_with_fk
194
+ it 'should migrate a primary key and all columns referencing it using foreign keys', rails_4_2_or_newer: true do
195
+ # Create 2 more tables similar to the way new version of Rails will do
196
+ create_tables_with_fk
176
197
 
177
- # Add Foreign key for this reference as well
178
- ActiveRecord::Base.connection.add_foreign_key :students, :cities
198
+ # Add Foreign key for this reference as well
199
+ ActiveRecord::Base.connection.add_foreign_key :students, :cities
179
200
 
180
- expect {
181
- MigrateWithFk.migrate(:up)
182
- reset_columns_data
183
- }.to_not change {
184
- key_relationships
185
- }
186
- end
201
+ expect {
202
+ MigrateWithFk.seed_with(seed_value).migrate(:up)
203
+ reset_columns_data
204
+ }.to_not change {
205
+ key_relationships
206
+ }
207
+ end
187
208
 
188
- it 'should handle nulls' do
189
- Student.create(name: 'Student without city or institution')
209
+ it 'should handle nulls' do
210
+ Student.create(name: 'Student without city or institution')
190
211
 
191
- expect {
192
- MigrateAllOneGo.migrate(:up)
193
- reset_columns_data
194
- }.to_not change {
195
- key_relationships
196
- }
197
- end
212
+ expect {
213
+ MigrateAllOneGo.seed_with(seed_value).migrate(:up)
214
+ reset_columns_data
215
+ }.to_not change {
216
+ key_relationships
217
+ }
218
+ end
198
219
 
199
- it 'should migrate in steps for polymorphic association' do
200
- expect {
201
- MigrateStep01.migrate(:up)
202
- reset_columns_data
203
- }.to_not change {
204
- key_relationships
205
- }
206
-
207
- expect {
208
- MigrateStep02.migrate(:up)
209
- reset_columns_data
210
- }.to_not change {
211
- key_relationships
212
- }
213
- end
220
+ it 'should migrate in steps for polymorphic association' do
221
+ expect {
222
+ MigrateStep01.seed_with(seed_value).migrate(:up)
223
+ reset_columns_data
224
+ }.to_not change {
225
+ key_relationships
226
+ }
227
+
228
+ expect {
229
+ MigrateStep02.seed_with(seed_value).migrate(:up)
230
+ reset_columns_data
231
+
232
+ }.to_not change {
233
+ key_relationships
234
+ }
235
+ end
214
236
 
215
- it 'should allow running same migration data even if it was already migrated' do
216
- expect {
217
- MigrateStep01.migrate(:up)
218
- # Run again
219
- MigrateStep01.migrate(:up)
220
- reset_columns_data
221
- }.to_not change {
222
- key_relationships
223
- }
224
-
225
- expect {
226
- MigrateStep02.migrate(:up)
227
- # Run again
228
- MigrateStep02.migrate(:up)
229
- reset_columns_data
230
- }.to_not change {
231
- key_relationships
232
- }
233
- end
237
+ it 'should allow running same migration data even if it was already migrated' do
238
+ expect {
239
+ MigrateStep01.seed_with(seed_value).migrate(:up)
240
+ # Run again
241
+ MigrateStep01.seed_with(seed_value).migrate(:up)
242
+ reset_columns_data
243
+ }.to_not change {
244
+ key_relationships
245
+ }
246
+
247
+ expect {
248
+ MigrateStep02.seed_with(seed_value).migrate(:up)
249
+ # Run again
250
+ MigrateStep02.seed_with(seed_value).migrate(:up)
251
+ reset_columns_data
252
+ }.to_not change {
253
+ key_relationships
254
+ }
255
+ end
234
256
 
235
- it 'should allow updation, deletion, and new entity creation' do
236
- MigrateAllOneGo.migrate(:up)
237
- reset_columns_data
257
+ it 'should allow updation, deletion, and new entity creation' do
258
+ MigrateAllOneGo.seed_with(seed_value).migrate(:up)
259
+ reset_columns_data
238
260
 
239
- # Select a random student
240
- student = Student.all.to_a.sample
261
+ # Select a random student
262
+ student = Student.all.to_a.sample
241
263
 
242
- id= student.id
243
- student.name= 'New student 01'
244
- student.save
245
- student = Student.find(id)
264
+ id= student.id
265
+ student.name= 'New student 01'
266
+ student.save
267
+ student = Student.find(id)
246
268
 
247
- expect(student.name).to eq 'New student 01'
269
+ expect(student.name).to eq 'New student 01'
248
270
 
249
- expect { student.destroy }.to change { Student.count }.by(-1)
271
+ expect { student.destroy }.to change { Student.count }.by(-1)
250
272
 
251
- expect {Student.find(id)}.to raise_exception(ActiveRecord::RecordNotFound)
273
+ expect {Student.find(id)}.to raise_exception(ActiveRecord::RecordNotFound)
252
274
 
253
- student= Student.create(
254
- name: 'New student 02',
255
- city: City.where(name: 'City 2').first,
256
- institution: School.where(name: 'School 1').first
257
- )
275
+ student= Student.create(
276
+ name: 'New student 02',
277
+ city: City.where(name: 'City 2').first,
278
+ institution: School.where(name: 'School 1').first
279
+ )
258
280
 
259
- expect(City.where(name: 'City 2').first.students.where(name: 'New student 02').first.name).to eq 'New student 02'
260
- expect(School.where(name: 'School 1').first.students.where(name: 'New student 02').first.name).to eq 'New student 02'
281
+ expect(City.where(name: 'City 2').first.students.where(name: 'New student 02').first.name).to eq 'New student 02'
282
+ expect(School.where(name: 'School 1').first.students.where(name: 'New student 02').first.name).to eq 'New student 02'
261
283
 
262
- College.where(name: 'College 3').first.students << student
284
+ College.where(name: 'College 3').first.students << student
263
285
 
264
- student.reload
286
+ student.reload
265
287
 
266
- expect(student.institution.name).to eq 'College 3'
288
+ expect(student.institution.name).to eq 'College 3'
289
+ end
290
+ end
267
291
  end
268
292
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdack-uuid_migration
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deepak Kumar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-13 00:00:00.000000000 Z
11
+ date: 2023-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -116,6 +116,7 @@ executables: []
116
116
  extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
+ - ".github/dependabot.yml"
119
120
  - ".gitignore"
120
121
  - ".travis.yml"
121
122
  - Gemfile
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  - !ruby/object:Gem::Version
164
165
  version: '0'
165
166
  requirements: []
166
- rubygems_version: 3.1.4
167
+ rubygems_version: 3.2.3
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: Useful helpers to migrate Integer id columns to UUID in PostgreSql.