data_migrate 11.0.0 → 11.1.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: f4cb85674ca4d30151e8398c7459c398cb966db2340569465c891680b46a27f4
4
- data.tar.gz: a76f23e9e73e3f1be609d982d98788871343e27375aa917d05c69c5f244b31a5
3
+ metadata.gz: 93b03e47ca0a194f18a72fdb0cc47a54de82688858aa6660827ef7f68644ef8d
4
+ data.tar.gz: 4aa2328b5e432edb4b445fa46efe0f2871e5eb47acee15a02c2a19bc4505404b
5
5
  SHA512:
6
- metadata.gz: 9c7a5fc972ff75b6232c83166f647788bf0ccc20fdb876e20e1e8635155b03e35ec8e8e06a3d266f1725a95f26cc34cb8016235e9d39ebee93275180309a212d
7
- data.tar.gz: d54ab0386a5b4c926b3979faafedf6b9eb9a7c1a29b1ce16c5c985255195194092600740ffafe9ef6fb974936a0d381eaaec5f60c9ca76b16948d078e33445a5
6
+ metadata.gz: 975645eca490e58faa6895abd76888876f2fa5d90487272d95441c6f887d75799db561c1a5773b53dd3f0d4fe9ffe3487beb964eab138766243cde3162dd0284
7
+ data.tar.gz: d6aa8d28e0225ab194440f51b5c66787a363e4021c5291215ba406f7c410dd13ae898cdc3a19bb43908c20de6c0801c7bc3a51dcc78b8df7ccf69178d55568eb
@@ -19,6 +19,10 @@ jobs:
19
19
  - gemfiles/rails_7.0.gemfile
20
20
  - gemfiles/rails_7.1.gemfile
21
21
  - gemfiles/rails_7.2.gemfile
22
+ - gemfiles/rails_8.0.gemfile
23
+ exclude:
24
+ - ruby: '3.1'
25
+ gemfile: 'gemfiles/rails_8.0.gemfile'
22
26
  runs-on: ubuntu-latest
23
27
  env:
24
28
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
data/Appraisals CHANGED
@@ -7,10 +7,13 @@ appraise 'rails-7.0' do
7
7
  end
8
8
 
9
9
  appraise 'rails-7.1' do
10
- gem 'rails', '7.1.0'
10
+ gem 'rails', '~> 7.1.0'
11
11
  end
12
12
 
13
-
14
13
  appraise 'rails-7.2' do
15
- gem 'rails', '7.2.0.beta1'
14
+ gem 'rails', '~> 7.2.0'
15
+ end
16
+
17
+ appraise 'rails-8.0' do
18
+ gem 'rails', '8.0.0.beta1'
16
19
  end
data/Changelog.md CHANGED
@@ -1,7 +1,13 @@
1
1
  # Changelog
2
2
 
3
- # 11.0.0
3
+ # 11.1.0
4
+ - Allow multiple data migration paths https://github.com/ilyakatz/data-migrate/pull/331
5
+ - Fix db:prepare:with_data task on [Rails 7.2](https://github.com/ilyakatz/data-migrate/pull/339)
6
+ - Fix ConnectionPool deprecation warnings on [Rails 7.2](https://github.com/ilyakatz/data-migrate/pull/341)
7
+ - Add Rails 8.0 to testing grounds https://github.com/ilyakatz/data-migrate/pull/341
8
+ - [Bump webrick from 1.8.1 to 1.8.2](https://github.com/ilyakatz/data-migrate/pull/345)
4
9
 
10
+ # 11.0.0
5
11
  - [Update rexml to 3.3.6](https://github.com/ilyakatz/data-migrate/pull/329)
6
12
  - Fixes a bug which ignored migrations on [Rails 7.1 and higher](https://github.com/ilyakatz/data-migrate/pull/326)
7
13
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- data_migrate (11.0.0)
4
+ data_migrate (11.1.0)
5
5
  activerecord (>= 6.1)
6
6
  railties (>= 6.1)
7
7
 
@@ -165,7 +165,7 @@ GEM
165
165
  tzinfo (2.0.6)
166
166
  concurrent-ruby (~> 1.0)
167
167
  unicode-display_width (2.5.0)
168
- webrick (1.8.1)
168
+ webrick (1.8.2)
169
169
  zeitwerk (2.6.13)
170
170
 
171
171
  PLATFORMS
data/README.md CHANGED
@@ -38,6 +38,11 @@ table to track all migrations.
38
38
 
39
39
  Support Rails 6.1 through 7.2
40
40
 
41
+ For **Rails 6.0** support, please use gem version `9.1.x`:
42
+
43
+ ```ruby
44
+ gem 'data_migrate', '~> 9.1.0'
45
+ ```
41
46
 
42
47
  #### v1
43
48
 
@@ -86,6 +91,7 @@ You can generate a data migration as you would a schema migration:
86
91
  rake db:migrate:status:with_data # Display status of data and schema migrations
87
92
  rake db:migrate:up:with_data # Runs the "up" for a given migration VERSION
88
93
  rake db:migrate:with_data # Migrate the database data and schema (options: VERSION=x, VERBOSE=false)
94
+ rake db:prepare:with_data # Runs setup if database does not exist, or runs data and schema migrations if it does
89
95
  rake db:rollback:with_data # Rolls the schema back to the previous version (specify steps w/ STEP=n)
90
96
  rake db:schema:load:with_data # Load both schema.rb and data_schema.rb file into the database
91
97
  rake db:structure:load:with_data # Load both structure.sql and data_schema.rb file into the database
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- data_migrate (11.0.0)
4
+ data_migrate (11.1.0)
5
5
  activerecord (>= 6.1)
6
6
  railties (>= 6.1)
7
7
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- data_migrate (11.0.0)
4
+ data_migrate (11.1.0)
5
5
  activerecord (>= 6.1)
6
6
  railties (>= 6.1)
7
7
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- data_migrate (11.0.0)
4
+ data_migrate (11.1.0)
5
5
  activerecord (>= 6.1)
6
6
  railties (>= 6.1)
7
7
 
@@ -121,6 +121,7 @@ GEM
121
121
  marcel (1.0.4)
122
122
  method_source (1.0.0)
123
123
  mini_mime (1.1.5)
124
+ mini_portile2 (2.8.7)
124
125
  minitest (5.25.1)
125
126
  mutex_m (0.2.0)
126
127
  net-imap (0.4.14)
@@ -133,6 +134,9 @@ GEM
133
134
  net-smtp (0.5.0)
134
135
  net-protocol
135
136
  nio4r (2.7.3)
137
+ nokogiri (1.16.7)
138
+ mini_portile2 (~> 2.8.2)
139
+ racc (~> 1.4)
136
140
  nokogiri (1.16.7-aarch64-linux)
137
141
  racc (~> 1.4)
138
142
  nokogiri (1.16.7-arm64-darwin)
@@ -228,6 +232,8 @@ GEM
228
232
  rubocop-ast (1.29.0)
229
233
  parser (>= 3.2.1.0)
230
234
  ruby-progressbar (1.13.0)
235
+ sqlite3 (1.7.2)
236
+ mini_portile2 (~> 2.8.0)
231
237
  sqlite3 (1.7.2-aarch64-linux)
232
238
  sqlite3 (1.7.2-arm64-darwin)
233
239
  sqlite3 (1.7.2-x86_64-darwin)
@@ -249,6 +255,7 @@ PLATFORMS
249
255
  aarch64-linux
250
256
  arm64-darwin-22
251
257
  arm64-darwin-23
258
+ ruby
252
259
  x86_64-darwin-22
253
260
  x86_64-linux
254
261
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- data_migrate (11.0.0)
4
+ data_migrate (11.1.0)
5
5
  activerecord (>= 6.1)
6
6
  railties (>= 6.1)
7
7
 
@@ -118,6 +118,7 @@ GEM
118
118
  marcel (1.0.4)
119
119
  method_source (1.1.0)
120
120
  mini_mime (1.1.5)
121
+ mini_portile2 (2.8.7)
121
122
  minitest (5.25.1)
122
123
  net-imap (0.4.14)
123
124
  date
@@ -129,6 +130,9 @@ GEM
129
130
  net-smtp (0.5.0)
130
131
  net-protocol
131
132
  nio4r (2.7.3)
133
+ nokogiri (1.16.7)
134
+ mini_portile2 (~> 2.8.2)
135
+ racc (~> 1.4)
132
136
  nokogiri (1.16.7-aarch64-linux)
133
137
  racc (~> 1.4)
134
138
  nokogiri (1.16.7-arm64-darwin)
@@ -248,6 +252,7 @@ GEM
248
252
  PLATFORMS
249
253
  aarch64-linux
250
254
  arm64-darwin-23
255
+ ruby
251
256
  x86_64-darwin-22
252
257
  x86_64-linux
253
258
 
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rails", "8.0.0.beta1"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,268 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ data_migrate (11.1.0)
5
+ activerecord (>= 6.1)
6
+ railties (>= 6.1)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ actioncable (8.0.0.beta1)
12
+ actionpack (= 8.0.0.beta1)
13
+ activesupport (= 8.0.0.beta1)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ zeitwerk (~> 2.6)
17
+ actionmailbox (8.0.0.beta1)
18
+ actionpack (= 8.0.0.beta1)
19
+ activejob (= 8.0.0.beta1)
20
+ activerecord (= 8.0.0.beta1)
21
+ activestorage (= 8.0.0.beta1)
22
+ activesupport (= 8.0.0.beta1)
23
+ mail (>= 2.8.0)
24
+ actionmailer (8.0.0.beta1)
25
+ actionpack (= 8.0.0.beta1)
26
+ actionview (= 8.0.0.beta1)
27
+ activejob (= 8.0.0.beta1)
28
+ activesupport (= 8.0.0.beta1)
29
+ mail (>= 2.8.0)
30
+ rails-dom-testing (~> 2.2)
31
+ actionpack (8.0.0.beta1)
32
+ actionview (= 8.0.0.beta1)
33
+ activesupport (= 8.0.0.beta1)
34
+ nokogiri (>= 1.8.5)
35
+ rack (>= 2.2.4)
36
+ rack-session (>= 1.0.1)
37
+ rack-test (>= 0.6.3)
38
+ rails-dom-testing (~> 2.2)
39
+ rails-html-sanitizer (~> 1.6)
40
+ useragent (~> 0.16)
41
+ actiontext (8.0.0.beta1)
42
+ actionpack (= 8.0.0.beta1)
43
+ activerecord (= 8.0.0.beta1)
44
+ activestorage (= 8.0.0.beta1)
45
+ activesupport (= 8.0.0.beta1)
46
+ globalid (>= 0.6.0)
47
+ nokogiri (>= 1.8.5)
48
+ actionview (8.0.0.beta1)
49
+ activesupport (= 8.0.0.beta1)
50
+ builder (~> 3.1)
51
+ erubi (~> 1.11)
52
+ rails-dom-testing (~> 2.2)
53
+ rails-html-sanitizer (~> 1.6)
54
+ activejob (8.0.0.beta1)
55
+ activesupport (= 8.0.0.beta1)
56
+ globalid (>= 0.3.6)
57
+ activemodel (8.0.0.beta1)
58
+ activesupport (= 8.0.0.beta1)
59
+ activerecord (8.0.0.beta1)
60
+ activemodel (= 8.0.0.beta1)
61
+ activesupport (= 8.0.0.beta1)
62
+ timeout (>= 0.4.0)
63
+ activestorage (8.0.0.beta1)
64
+ actionpack (= 8.0.0.beta1)
65
+ activejob (= 8.0.0.beta1)
66
+ activerecord (= 8.0.0.beta1)
67
+ activesupport (= 8.0.0.beta1)
68
+ marcel (~> 1.0)
69
+ activesupport (8.0.0.beta1)
70
+ base64
71
+ benchmark (>= 0.3)
72
+ bigdecimal
73
+ concurrent-ruby (~> 1.0, >= 1.3.1)
74
+ connection_pool (>= 2.2.5)
75
+ drb
76
+ i18n (>= 1.6, < 2)
77
+ logger (>= 1.4.2)
78
+ minitest (>= 5.1)
79
+ securerandom (>= 0.3)
80
+ tzinfo (~> 2.0, >= 2.0.5)
81
+ uri (>= 0.13.1)
82
+ appraisal (2.5.0)
83
+ bundler
84
+ rake
85
+ thor (>= 0.14.0)
86
+ ast (2.4.2)
87
+ base64 (0.2.0)
88
+ benchmark (0.3.0)
89
+ bigdecimal (3.1.8)
90
+ builder (3.3.0)
91
+ childprocess (5.1.0)
92
+ logger (~> 1.5)
93
+ coderay (1.1.3)
94
+ concurrent-ruby (1.3.4)
95
+ connection_pool (2.4.1)
96
+ crass (1.0.6)
97
+ date (3.3.4)
98
+ diff-lcs (1.5.1)
99
+ drb (2.2.1)
100
+ erubi (1.13.0)
101
+ globalid (1.2.1)
102
+ activesupport (>= 6.1)
103
+ i18n (1.14.6)
104
+ concurrent-ruby (~> 1.0)
105
+ iniparse (1.5.0)
106
+ io-console (0.7.2)
107
+ irb (1.14.1)
108
+ rdoc (>= 4.0.0)
109
+ reline (>= 0.4.2)
110
+ json (2.7.2)
111
+ language_server-protocol (3.17.0.3)
112
+ logger (1.6.1)
113
+ loofah (2.22.0)
114
+ crass (~> 1.0.2)
115
+ nokogiri (>= 1.12.0)
116
+ mail (2.8.1)
117
+ mini_mime (>= 0.1.1)
118
+ net-imap
119
+ net-pop
120
+ net-smtp
121
+ marcel (1.0.4)
122
+ method_source (1.1.0)
123
+ mini_mime (1.1.5)
124
+ mini_portile2 (2.8.7)
125
+ minitest (5.25.1)
126
+ net-imap (0.4.16)
127
+ date
128
+ net-protocol
129
+ net-pop (0.1.2)
130
+ net-protocol
131
+ net-protocol (0.2.2)
132
+ timeout
133
+ net-smtp (0.5.0)
134
+ net-protocol
135
+ nio4r (2.7.3)
136
+ nokogiri (1.16.7)
137
+ mini_portile2 (~> 2.8.2)
138
+ racc (~> 1.4)
139
+ nokogiri (1.16.7-arm64-darwin)
140
+ racc (~> 1.4)
141
+ overcommit (0.64.0)
142
+ childprocess (>= 0.6.3, < 6)
143
+ iniparse (~> 1.4)
144
+ rexml (~> 3.2)
145
+ parallel (1.26.3)
146
+ parser (3.3.5.0)
147
+ ast (~> 2.4.1)
148
+ racc
149
+ pry (0.14.2)
150
+ coderay (~> 1.1)
151
+ method_source (~> 1.0)
152
+ psych (5.1.2)
153
+ stringio
154
+ racc (1.8.1)
155
+ rack (3.1.7)
156
+ rack-session (2.0.0)
157
+ rack (>= 3.0.0)
158
+ rack-test (2.1.0)
159
+ rack (>= 1.3)
160
+ rackup (2.1.0)
161
+ rack (>= 3)
162
+ webrick (~> 1.8)
163
+ rails (8.0.0.beta1)
164
+ actioncable (= 8.0.0.beta1)
165
+ actionmailbox (= 8.0.0.beta1)
166
+ actionmailer (= 8.0.0.beta1)
167
+ actionpack (= 8.0.0.beta1)
168
+ actiontext (= 8.0.0.beta1)
169
+ actionview (= 8.0.0.beta1)
170
+ activejob (= 8.0.0.beta1)
171
+ activemodel (= 8.0.0.beta1)
172
+ activerecord (= 8.0.0.beta1)
173
+ activestorage (= 8.0.0.beta1)
174
+ activesupport (= 8.0.0.beta1)
175
+ bundler (>= 1.15.0)
176
+ railties (= 8.0.0.beta1)
177
+ rails-dom-testing (2.2.0)
178
+ activesupport (>= 5.0.0)
179
+ minitest
180
+ nokogiri (>= 1.6)
181
+ rails-html-sanitizer (1.6.0)
182
+ loofah (~> 2.21)
183
+ nokogiri (~> 1.14)
184
+ railties (8.0.0.beta1)
185
+ actionpack (= 8.0.0.beta1)
186
+ activesupport (= 8.0.0.beta1)
187
+ irb (~> 1.13)
188
+ rackup (>= 1.0.0)
189
+ rake (>= 12.2)
190
+ thor (~> 1.0, >= 1.2.2)
191
+ zeitwerk (~> 2.6)
192
+ rainbow (3.1.1)
193
+ rake (13.2.1)
194
+ rb-readline (0.5.5)
195
+ rdoc (6.7.0)
196
+ psych (>= 4.0.0)
197
+ regexp_parser (2.9.2)
198
+ reline (0.5.10)
199
+ io-console (~> 0.5)
200
+ rexml (3.3.7)
201
+ rspec (3.13.0)
202
+ rspec-core (~> 3.13.0)
203
+ rspec-expectations (~> 3.13.0)
204
+ rspec-mocks (~> 3.13.0)
205
+ rspec-core (3.13.1)
206
+ rspec-support (~> 3.13.0)
207
+ rspec-expectations (3.13.3)
208
+ diff-lcs (>= 1.2.0, < 2.0)
209
+ rspec-support (~> 3.13.0)
210
+ rspec-mocks (3.13.1)
211
+ diff-lcs (>= 1.2.0, < 2.0)
212
+ rspec-support (~> 3.13.0)
213
+ rspec-support (3.13.1)
214
+ rubocop (1.66.1)
215
+ json (~> 2.3)
216
+ language_server-protocol (>= 3.17.0)
217
+ parallel (~> 1.10)
218
+ parser (>= 3.3.0.2)
219
+ rainbow (>= 2.2.2, < 4.0)
220
+ regexp_parser (>= 2.4, < 3.0)
221
+ rubocop-ast (>= 1.32.2, < 2.0)
222
+ ruby-progressbar (~> 1.7)
223
+ unicode-display_width (>= 2.4.0, < 3.0)
224
+ rubocop-ast (1.32.3)
225
+ parser (>= 3.3.1.0)
226
+ ruby-progressbar (1.13.0)
227
+ securerandom (0.3.1)
228
+ sqlite3 (2.1.0)
229
+ mini_portile2 (~> 2.8.0)
230
+ sqlite3 (2.1.0-arm64-darwin)
231
+ stringio (3.1.1)
232
+ thor (1.3.2)
233
+ timecop (0.9.10)
234
+ timeout (0.4.1)
235
+ tzinfo (2.0.6)
236
+ concurrent-ruby (~> 1.0)
237
+ unicode-display_width (2.6.0)
238
+ uri (0.13.1)
239
+ useragent (0.16.10)
240
+ webrick (1.8.2)
241
+ websocket-driver (0.7.6)
242
+ websocket-extensions (>= 0.1.0)
243
+ websocket-extensions (0.1.5)
244
+ zeitwerk (2.6.18)
245
+
246
+ PLATFORMS
247
+ aarch64-linux
248
+ arm64-darwin-23
249
+ ruby
250
+ x86_64-darwin-22
251
+ x86_64-linux
252
+
253
+ DEPENDENCIES
254
+ appraisal
255
+ data_migrate!
256
+ overcommit
257
+ pry
258
+ rails (= 8.0.0.beta1)
259
+ rake
260
+ rb-readline
261
+ rspec
262
+ rspec-core
263
+ rubocop
264
+ sqlite3
265
+ timecop
266
+
267
+ BUNDLED WITH
268
+ 2.4.17
@@ -12,7 +12,7 @@ module DataMigrate
12
12
 
13
13
  class << self
14
14
  def migrations_paths
15
- [DataMigrate.config.data_migrations_path]
15
+ Array.wrap(DataMigrate.config.data_migrations_path)
16
16
  end
17
17
 
18
18
  def create_data_schema_table
@@ -29,13 +29,13 @@ module DataMigrate
29
29
  end
30
30
 
31
31
  def versions
32
- @versions ||= begin
33
- versions = []
34
- Dir.foreach(DataMigrate::DataMigrator.full_migrations_path) do |file|
35
- match_data = DataMigrate::DataMigrator.match(file)
36
- versions << match_data[1].to_i if match_data
32
+ @versions ||= Set.new.tap do |versions|
33
+ DataMigrate::DataMigrator.migrations_paths.each do |path|
34
+ Dir.foreach(path) do |file|
35
+ match_data = DataMigrate::DataMigrator.match(file)
36
+ versions << match_data[1].to_i if match_data
37
+ end
37
38
  end
38
- versions
39
39
  end
40
40
  end
41
41
 
@@ -10,21 +10,21 @@ module DataMigrate
10
10
  extend self
11
11
 
12
12
  # These method are only introduced in Rails 7.1
13
- unless respond_to?(:with_temporary_connection_for_each)
14
- def with_temporary_connection_for_each(env: ActiveRecord::Tasks::DatabaseTasks.env, name: nil, &block) # :nodoc:
13
+ unless respond_to?(:with_temporary_pool_for_each)
14
+ def with_temporary_pool_for_each(env: ActiveRecord::Tasks::DatabaseTasks.env, name: nil, &block) # :nodoc:
15
15
  if name
16
16
  db_config = ActiveRecord::Base.configurations.configs_for(env_name: env, name: name)
17
- with_temporary_connection(db_config, &block)
17
+ with_temporary_pool(db_config, &block)
18
18
  else
19
19
  ActiveRecord::Base.configurations.configs_for(env_name: env, name: name).each do |db_config|
20
- with_temporary_connection(db_config, &block)
20
+ with_temporary_pool(db_config, &block)
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
- def with_temporary_connection(db_config) # :nodoc:
25
+ def with_temporary_connection(db_config, &block) # :nodoc:
26
26
  with_temporary_pool(db_config) do |pool|
27
- yield pool.connection
27
+ pool.with_connection(&block)
28
28
  end
29
29
  end
30
30
 
@@ -49,8 +49,8 @@ module DataMigrate
49
49
  def db_configs_with_versions
50
50
  db_configs_with_versions = Hash.new { |h, k| h[k] = [] }
51
51
 
52
- with_temporary_connection_for_each do |conn|
53
- db_config = conn.pool.db_config
52
+ with_temporary_pool_for_each do |pool|
53
+ db_config = pool.db_config
54
54
  if db_config.primary?
55
55
  versions_to_run = DataMigrate::DatabaseTasks.pending_data_migrations.map { |m| m[:version] }
56
56
  target_version = ActiveRecord::Tasks::DatabaseTasks.target_version
@@ -214,19 +214,13 @@ module DataMigrate
214
214
  seed = false
215
215
 
216
216
  each_current_configuration(env) do |db_config|
217
- next unless db_config.primary?
217
+ next unless primary?(db_config)
218
218
 
219
- with_temporary_pool(db_config) do
220
- begin
221
- database_initialized = migration_connection.schema_migration.table_exists?
222
- rescue ActiveRecord::NoDatabaseError
219
+ with_temporary_pool(db_config) do |pool|
220
+ unless database_exists?(pool.connection)
223
221
  create(db_config)
224
- retry
225
- end
226
-
227
- unless database_initialized
228
222
  if File.exist?(schema_dump_path(db_config))
229
- load_schema(db_config, ActiveRecord.schema_format, nil)
223
+ load_schema(db_config, schema_format, nil)
230
224
  load_schema_current(
231
225
  :ruby,
232
226
  ENV["DATA_SCHEMA"]
@@ -237,7 +231,7 @@ module DataMigrate
237
231
  end
238
232
 
239
233
  migrate_with_data
240
- if ActiveRecord.dump_schema_after_migration
234
+ if dump_schema_after_migration?
241
235
  dump_schema(db_config)
242
236
  DataMigrate::Tasks::DataMigrateTasks.dump
243
237
  end
@@ -246,5 +240,41 @@ module DataMigrate
246
240
 
247
241
  load_seed if seed
248
242
  end
243
+
244
+ private
245
+
246
+ def database_exists?(connection)
247
+ if connection.respond_to?(:database_exists?) # Rails 7.1+
248
+ connection.database_exists?
249
+ else
250
+ connection.table_exists?(ActiveRecord::SchemaMigration.table_name)
251
+ end
252
+ rescue ActiveRecord::NoDatabaseError
253
+ false
254
+ end
255
+
256
+ def primary?(db_config)
257
+ if db_config.respond_to?(:primary?) # Rails 7.0+
258
+ db_config.primary?
259
+ else
260
+ db_config.name == "primary"
261
+ end
262
+ end
263
+
264
+ def dump_schema_after_migration?
265
+ if ActiveRecord.respond_to?(:dump_schema_after_migration)
266
+ ActiveRecord.dump_schema_after_migration
267
+ else
268
+ ActiveRecord::Base.dump_schema_after_migration
269
+ end
270
+ end
271
+
272
+ def schema_format
273
+ if ActiveRecord.respond_to?(:schema_format)
274
+ ActiveRecord.schema_format
275
+ else
276
+ ActiveRecord::Base.schema_format
277
+ end
278
+ end
249
279
  end
250
280
  end
@@ -6,7 +6,7 @@ module DataMigrate
6
6
  extend self
7
7
 
8
8
  def migrations_paths
9
- @migrations_paths ||= DataMigrate.config.data_migrations_path
9
+ @migrations_paths ||= Array.wrap(DataMigrate.config.data_migrations_path)
10
10
  end
11
11
 
12
12
  def dump
@@ -55,11 +55,13 @@ module DataMigrate
55
55
  db_list_schema = DataMigrate::RailsHelper.schema_migration_versions
56
56
  file_list = []
57
57
 
58
- Dir.foreach(File.join(Rails.root, migrations_paths)) do |file|
59
- # only files matching "20091231235959_some_name.rb" pattern
60
- if match_data = /(\d{14})_(.+)\.rb/.match(file)
61
- status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
62
- file_list << [status, match_data[1], match_data[2], 'data']
58
+ migrations_paths.each do |path|
59
+ Dir.foreach(File.join(Rails.root, path)) do |file|
60
+ # only files matching "20091231235959_some_name.rb" pattern
61
+ if match_data = /(\d{14})_(.+)\.rb/.match(file)
62
+ status = db_list_data.delete(match_data[1]) ? 'up' : 'down'
63
+ file_list << [status, match_data[1], match_data[2], 'data']
64
+ end
63
65
  end
64
66
  end
65
67
 
@@ -1,3 +1,3 @@
1
1
  module DataMigrate
2
- VERSION = "11.0.0".freeze
2
+ VERSION = "11.1.0".freeze
3
3
  end
@@ -38,8 +38,9 @@ module DataMigrate
38
38
  File.join(data_migrations_path, "#{file_name}.rb")
39
39
  end
40
40
 
41
+ # Use the first path in the data_migrations_path as the target directory
41
42
  def data_migrations_path
42
- DataMigrate.config.data_migrations_path
43
+ Array.wrap(DataMigrate.config.data_migrations_path).first
43
44
  end
44
45
  end
45
46
  end
@@ -51,9 +51,10 @@ describe DataMigrate::DataMigrator do
51
51
  describe "#migrations_status" do
52
52
  it "returns all migrations statuses" do
53
53
  status = described_class.migrations_status
54
- expect(status.length).to eq 2
54
+ expect(status.length).to eq 3
55
55
  expect(status.first).to eq ["down", "20091231235959", "Some name"]
56
56
  expect(status.second).to eq ["down", "20171231235959", "Super update"]
57
+ expect(status.third).to eq ["down", "20241231235959", "Data two update"]
57
58
  end
58
59
  end
59
60
 
@@ -5,9 +5,7 @@ require "spec_helper"
5
5
  describe DataMigrate::DatabaseTasks do
6
6
  let(:subject) { DataMigrate::DatabaseTasks }
7
7
  let(:migration_path) { "spec/db/migrate" }
8
- let(:data_migrations_path) {
9
- DataMigrate.config.data_migrations_path
10
- }
8
+ let(:data_migrations_path) { DataMigrate.config.data_migrations_path }
11
9
 
12
10
  before do
13
11
  # In a normal Rails installation, db_dir would defer to
@@ -18,11 +16,13 @@ describe DataMigrate::DatabaseTasks do
18
16
  end
19
17
 
20
18
  before do
21
- allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:migrations_paths) {
19
+ allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:migrations_paths) do
22
20
  data_migrations_path
23
- }
24
- ActiveRecord::Base.establish_connection({ adapter: "sqlite3", database: "spec/db/test.db" })
25
- hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new('test', 'test', { adapter: "sqlite3", database: "spec/db/test.db" })
21
+ end
22
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: "spec/db/test.db")
23
+ hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(
24
+ 'test', 'test', adapter: "sqlite3", database: "spec/db/test.db"
25
+ )
26
26
  config_obj = ActiveRecord::DatabaseConfigurations.new([hash_config])
27
27
  allow(ActiveRecord::Base).to receive(:configurations).and_return(config_obj)
28
28
  end
@@ -36,12 +36,10 @@ describe DataMigrate::DatabaseTasks do
36
36
  before do
37
37
  DataMigrate::RailsHelper.schema_migration.create_table
38
38
 
39
- allow(DataMigrate::SchemaMigration).to receive(:migrations_paths) {
40
- migration_path
41
- }
42
- allow(DataMigrate::DatabaseTasks).to receive(:data_migrations_path) {
39
+ allow(DataMigrate::SchemaMigration).to receive(:migrations_paths) { migration_path }
40
+ allow(DataMigrate::DatabaseTasks).to receive(:data_migrations_path) do
43
41
  data_migrations_path
44
- }.at_least(:once)
42
+ end.at_least(:once)
45
43
  end
46
44
 
47
45
  describe :past_migrations do
@@ -79,11 +77,14 @@ describe DataMigrate::DatabaseTasks do
79
77
  if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_0
80
78
  describe :schema_dump_path do
81
79
  before do
82
- allow(ActiveRecord::Base).to receive(:configurations).and_return(ActiveRecord::DatabaseConfigurations.new([db_config]))
80
+ allow(ActiveRecord::Base).to receive(:configurations)
81
+ .and_return(ActiveRecord::DatabaseConfigurations.new([db_config]))
83
82
  end
84
83
 
85
84
  context "for primary database" do
86
- let(:db_config) { ActiveRecord::DatabaseConfigurations::HashConfig.new("development", "primary", {} ) }
85
+ let(:db_config) do
86
+ ActiveRecord::DatabaseConfigurations::HashConfig.new("development", "primary", {})
87
+ end
87
88
 
88
89
  context "for :ruby db format" do
89
90
  it 'returns the data schema path' do
@@ -101,5 +102,113 @@ describe DataMigrate::DatabaseTasks do
101
102
  end
102
103
  end
103
104
  end
105
+
106
+ describe :prepare_all_with_data do
107
+ let(:db_config) do
108
+ ActiveRecord::DatabaseConfigurations::HashConfig.new(
109
+ 'test',
110
+ 'primary',
111
+ adapter: "sqlite3",
112
+ database: "spec/db/test.db"
113
+ )
114
+ end
115
+
116
+ let(:pool) { double("ConnectionPool") }
117
+ let(:connection) { double("Connection") }
118
+
119
+ before do
120
+ allow(subject).to receive(:each_current_configuration).and_yield(db_config)
121
+ allow(subject).to receive(:with_temporary_pool).with(db_config).and_yield(pool)
122
+ allow(pool).to receive(:connection).and_return(connection)
123
+ allow(subject).to receive(:schema_dump_path).and_return("db/data_schema.rb")
124
+ allow(File).to receive(:exist?).and_return(true)
125
+ allow(subject).to receive(:load_schema)
126
+ allow(subject).to receive(:load_schema_current)
127
+ allow(subject).to receive(:migrate_with_data)
128
+ allow(subject).to receive(:dump_schema)
129
+ allow(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
130
+ allow(subject).to receive(:load_seed)
131
+
132
+ configurations = ActiveRecord::DatabaseConfigurations.new([db_config])
133
+ allow(ActiveRecord::Base).to receive(:configurations).and_return(configurations)
134
+ end
135
+
136
+ context "when the database does not exist" do
137
+ before do
138
+ allow(subject).to receive(:database_exists?).with(connection).and_return(false)
139
+ allow_any_instance_of(ActiveRecord::Tasks::DatabaseTasks).to receive(:create)
140
+ .and_return(true)
141
+ end
142
+
143
+ it "creates the database" do
144
+ expect_any_instance_of(ActiveRecord::Tasks::DatabaseTasks).to receive(:create)
145
+ .with(db_config)
146
+ subject.prepare_all_with_data
147
+ end
148
+
149
+ it "loads the schema" do
150
+ expect(subject).to receive(:load_schema).with(
151
+ db_config,
152
+ subject.send(:schema_format),
153
+ nil
154
+ )
155
+ subject.prepare_all_with_data
156
+ end
157
+
158
+ it "loads the current data schema" do
159
+ expect(subject).to receive(:load_schema_current).with(:ruby, ENV["DATA_SCHEMA"])
160
+ subject.prepare_all_with_data
161
+ end
162
+
163
+ it "runs migrations with data" do
164
+ expect(subject).to receive(:migrate_with_data)
165
+ subject.prepare_all_with_data
166
+ end
167
+
168
+ it "dumps the schema after migration" do
169
+ expect(subject).to receive(:dump_schema).with(db_config)
170
+ expect(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
171
+ subject.prepare_all_with_data
172
+ end
173
+
174
+ it "loads seed data" do
175
+ expect(subject).to receive(:load_seed)
176
+ subject.prepare_all_with_data
177
+ end
178
+ end
179
+
180
+ context "when the database exists" do
181
+ before do
182
+ allow(subject).to receive(:database_exists?).with(connection).and_return(true)
183
+ end
184
+
185
+ it "does not create the database" do
186
+ expect(ActiveRecord::Tasks::DatabaseTasks).not_to receive(:create)
187
+ subject.prepare_all_with_data
188
+ end
189
+
190
+ it "does not load the schema" do
191
+ expect(subject).not_to receive(:load_schema)
192
+ expect(subject).not_to receive(:load_schema_current)
193
+ subject.prepare_all_with_data
194
+ end
195
+
196
+ it "runs migrations with data" do
197
+ expect(subject).to receive(:migrate_with_data)
198
+ subject.prepare_all_with_data
199
+ end
200
+
201
+ it "dumps the schema after migration" do
202
+ expect(subject).to receive(:dump_schema).with(db_config)
203
+ expect(DataMigrate::Tasks::DataMigrateTasks).to receive(:dump)
204
+ subject.prepare_all_with_data
205
+ end
206
+
207
+ it "does not load seed data" do
208
+ expect(subject).not_to receive(:load_seed)
209
+ subject.prepare_all_with_data
210
+ end
211
+ end
212
+ end
104
213
  end
105
214
  end
@@ -0,0 +1,9 @@
1
+ class DataTwoUpdate < ActiveRecord::Migration[6.1]
2
+ def up
3
+ puts "Doing DataTwoUpdate"
4
+ end
5
+
6
+ def down
7
+ puts "Undoing DataTwoUpdate"
8
+ end
9
+ end
data/spec/spec_helper.rb CHANGED
@@ -21,7 +21,7 @@ RSpec.configure do |config|
21
21
  else
22
22
  @prev_data_migrations_path = DataMigrate.config.data_migrations_path
23
23
  DataMigrate.configure do |config|
24
- config.data_migrations_path = "spec/db/data"
24
+ config.data_migrations_path = ["spec/db/data", "spec/db/data_two"]
25
25
  end
26
26
  end
27
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_migrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.0.0
4
+ version: 11.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew J Vargo
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-09-04 00:00:00.000000000 Z
13
+ date: 2024-10-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -214,6 +214,8 @@ files:
214
214
  - gemfiles/rails_7.1.gemfile.lock
215
215
  - gemfiles/rails_7.2.gemfile
216
216
  - gemfiles/rails_7.2.gemfile.lock
217
+ - gemfiles/rails_8.0.gemfile
218
+ - gemfiles/rails_8.0.gemfile.lock
217
219
  - lib/capistrano/data_migrate.rb
218
220
  - lib/capistrano/data_migrate/migrate.rb
219
221
  - lib/data_migrate.rb
@@ -230,7 +232,6 @@ files:
230
232
  - lib/data_migrate/schema_migration.rb
231
233
  - lib/data_migrate/status_service.rb
232
234
  - lib/data_migrate/tasks/data_migrate_tasks.rb
233
- - lib/data_migrate/test.rb
234
235
  - lib/data_migrate/version.rb
235
236
  - lib/generators/data_migrate.rb
236
237
  - lib/generators/data_migration/data_migration_generator.rb
@@ -255,6 +256,7 @@ files:
255
256
  - spec/db/data/partial_schema/test_data_schema.rb
256
257
  - spec/db/data/schema/data_schema.rb
257
258
  - spec/db/data/schema/test_data_schema.rb
259
+ - spec/db/data_two/20241231235959_data_two_update.rb
258
260
  - spec/db/migrate/20131111111111_late_migration.rb
259
261
  - spec/db/migrate/20202020202011_db_migration.rb
260
262
  - spec/generators/data_migration/data_migration_generator_spec.rb
@@ -1,14 +0,0 @@
1
- module Base
2
- extend self
3
-
4
- def foo
5
- puts "Base#foo called"
6
- end
7
- end
8
-
9
- module Child
10
- extend Base
11
- extend self
12
-
13
- puts "foo: #{respond_to?(:foo)}"
14
- end