data-migration 1.1.0 → 1.3.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: 37438001715cc268d2f647d68ee27c6a49d3a4c879187d61a2779523b1d34fb9
4
- data.tar.gz: 55d7277c0848aa1395ab004ec986a3d268e18feebbe5fdbe7766b5658ef2a561
3
+ metadata.gz: c5f01e486573054202526bf5fa21c9acb04b7c1093928cc5c1f1fa42a5d04a67
4
+ data.tar.gz: dbe195a0ee725c658de65fd75190f38a7fe86cc74564945c75388e04de906f1c
5
5
  SHA512:
6
- metadata.gz: 1d655d2e86118b04fdb4f778e3afa611caab5dc95bd048e71f24baf6235b4c7c8fad1cdc2a70d8a15fb6f5491f942d7f272f91bb2b618f9e1541dfae4a443310
7
- data.tar.gz: 72542f7c60d054c70b62b39468edb645c1a3cf777ea07fd30ca710f90bdc9aa8ca66d89979ace38ed2eb48f97740757c836cda7a31169e83031a7b84609c542c
6
+ metadata.gz: 92812fe8790d454531b66618f6f142f69dec5a3e46e75bdb7e22bf914c10c9e23739709a5e300a750882b7c806edb604da5eb023332a6133e8de332beb6963b5
7
+ data.tar.gz: f2109fed76e5508ff160f87109d5c4fefa011233257248b8dcd4ca678b5594e27ef85d8883c9a08c0583485748a769299c02bc09e8cd86ca47250530cbc95fee
data/CHANGELOG.md CHANGED
@@ -1,7 +1,18 @@
1
- # 1.1.0
1
+ # CHANGELOG
2
+
3
+ ## 1.3.0
4
+
5
+ - Fix data migration tasks table generator
6
+ - Update README with better examples
7
+
8
+ ## 1.2.0
9
+
10
+ - Wrap Task.status enum with ActiveRecord version check
11
+
12
+ ## 1.1.0
2
13
 
3
14
  - Fix gem main file name to be `data-migration.rb` instead of `data_migration.rb`
4
15
 
5
- # 1.0.0
16
+ ## 1.0.0
6
17
 
7
18
  - Initial version
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- data-migration (1.1.0)
4
+ data-migration (1.3.0)
5
5
  activejob (> 5)
6
6
  activerecord (> 5)
7
7
  activesupport (> 5)
data/README.md CHANGED
@@ -39,26 +39,32 @@ Using RubyGems:
39
39
  gem install data-migration
40
40
  ```
41
41
 
42
- ## Gemfile
42
+ ### Gemfile
43
43
 
44
44
  ```ruby
45
45
  gem "data-migration"
46
46
  ```
47
47
 
48
- ## Usage
49
-
50
- ### Run data migrations
48
+ ### Data migration tasks table
51
49
 
52
50
  ```sh
53
- bin/rails db:migrate:data 20241207120000_create_users
51
+ bin/rails g data_migration:install data_migration_tasks
54
52
  ```
55
53
 
54
+ ## Usage
55
+
56
56
  ### Generate data migration job
57
57
 
58
58
  ```sh
59
59
  bin/rails g data_migration create_users
60
60
  ```
61
61
 
62
+ ### Run data migrations
63
+
64
+ ```sh
65
+ bin/rails db:migrate:data 20241207120000_create_users
66
+ ```
67
+
62
68
  ## Configuration
63
69
 
64
70
  ### Set data migrations directory
@@ -3,7 +3,7 @@ require "data_migration/job"
3
3
  require "data_migration/task"
4
4
 
5
5
  module DataMigration
6
- VERSION = "1.1.0".freeze
6
+ VERSION = "1.3.0".freeze
7
7
 
8
8
  module_function
9
9
 
@@ -17,7 +17,7 @@ module DataMigration
17
17
 
18
18
  def notify(message, context: {})
19
19
  if Object.const_defined?(:ActionReporter)
20
- ActionReporter.notify(message, context:)
20
+ ActionReporter.notify(message, context: context.presence || {})
21
21
  elsif Object.const_defined?(:Rails)
22
22
  Rails.logger.info("#{message} #{context.inspect}")
23
23
  end
@@ -35,7 +35,7 @@ module DataMigration
35
35
 
36
36
  attr_writer :operator_resolver
37
37
  def operator_resolver(&block)
38
- if block_given?
38
+ if block.present?
39
39
  @operator_resolver = block
40
40
  else
41
41
  @operator_resolver ||= -> do
@@ -50,7 +50,7 @@ module DataMigration
50
50
 
51
51
  attr_writer :monitoring_context
52
52
  def monitoring_context(&block)
53
- if block_given?
53
+ if block.present?
54
54
  @monitoring_context = block
55
55
  else
56
56
  @monitoring_context ||= ->(migration) do
@@ -18,7 +18,7 @@ module DataMigration
18
18
  return
19
19
  end
20
20
 
21
- task.job_check_in!(job_id, job_args:, job_kwargs:)
21
+ task.job_check_in!(job_id, job_args: job_args, job_kwargs: job_kwargs)
22
22
 
23
23
  require migration_path
24
24
  klass_name = migration_name.gsub(/^[0-9_]+/, "").camelize
@@ -2,6 +2,7 @@ require "active_record"
2
2
 
3
3
  module DataMigration
4
4
  class JobConcurrencyLimitError < StandardError; end
5
+
5
6
  class JobConflictError < StandardError; end
6
7
 
7
8
  def self.tasks_table_name
@@ -18,16 +19,21 @@ module DataMigration
18
19
  self.jobs_limit ||= DataMigration.config.default_jobs_limit
19
20
  end
20
21
 
21
- enum :status, {
22
+ STATUS_OPTIONS = {
22
23
  started: "started",
23
24
  performing: "performing",
24
25
  paused: "paused",
25
26
  completed: "completed"
26
27
  }
28
+ if ActiveRecord::VERSION::MAJOR >= 7
29
+ enum :status, STATUS_OPTIONS
30
+ else
31
+ enum status: STATUS_OPTIONS
32
+ end
27
33
 
28
34
  validates :name, presence: true
29
- validates :pause_minutes, numericality: { greater_than_or_equal_to: 0, only_integer: true }, if: -> { pause_minutes.present? }
30
- validates :jobs_limit, numericality: { greater_than_or_equal_to: 0, only_integer: true }, if: -> { jobs_limit.present? }
35
+ validates :pause_minutes, numericality: {greater_than_or_equal_to: 0, only_integer: true}, if: -> { pause_minutes.present? }
36
+ validates :jobs_limit, numericality: {greater_than_or_equal_to: 0, only_integer: true}, if: -> { jobs_limit.present? }
31
37
  validate :file_should_exist
32
38
 
33
39
  after_save do
@@ -50,7 +56,7 @@ module DataMigration
50
56
  end
51
57
 
52
58
  def self.perform_now(name, **kwargs)
53
- create!(name:).perform_now(**kwargs)
59
+ create!(name: name).perform_now(**kwargs)
54
60
  end
55
61
 
56
62
  def perform_now(**perform_args)
@@ -59,7 +65,7 @@ module DataMigration
59
65
  end
60
66
 
61
67
  def self.perform_later(name, **kwargs)
62
- create!(name:).perform_later(**kwargs)
68
+ create!(name: name).perform_later(**kwargs)
63
69
  end
64
70
 
65
71
  def perform_later(**perform_args)
@@ -68,7 +74,7 @@ module DataMigration
68
74
  end
69
75
 
70
76
  def self.prepare(name, pause_minutes: nil, jobs_limit: nil)
71
- create!(name:, pause_minutes:, jobs_limit:)
77
+ create!(name: name, pause_minutes: pause_minutes, jobs_limit: jobs_limit)
72
78
  end
73
79
 
74
80
  def self.root_path
@@ -0,0 +1,28 @@
1
+ require "rails/generators"
2
+ require "rails/generators/active_record"
3
+ require "rails/generators/active_record/migration/migration_generator"
4
+
5
+ module DataMigration
6
+ module Generators
7
+ class InstallGenerator < ActiveRecord::Generators::MigrationGenerator
8
+ source_root File.expand_path("../templates", __FILE__)
9
+
10
+ attr_reader :table_exists, :table_columns
11
+ def create_migration_file
12
+ if ActiveRecord::Base.connection.table_exists?(name)
13
+ puts "\e[31mWARNING: Table `#{name}` already exists\e[0m"
14
+ @table_exists = true
15
+ @table_columns = ActiveRecord::Base.connection.columns(name)
16
+ end
17
+
18
+ set_local_assigns!
19
+ validate_file_name!
20
+ migration_template "install_#{name}.rb", "#{DataMigration.config.schema_migrations_path}/install_#{file_name}.rb"
21
+ end
22
+
23
+ def migration_parent
24
+ "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,4 +1,8 @@
1
1
  class <%= migration_class_name %> < <%= migration_parent %>
2
+ <% if table_exists %>
3
+ # Current columns: "<%= table_columns.map(&:name).join("\", \"") %>"
4
+ <% end %>
5
+
2
6
  def self.up
3
7
  create_table :<%= DataMigration.tasks_table_name %>, force: true do |t|
4
8
  t.string "name", null: false
@@ -4,6 +4,6 @@ class CreateBatchUsers
4
4
 
5
5
  User.find_or_create_by(email: "test_#{index}@example.com")
6
6
 
7
- enqueue(index: index + 1, background:)
7
+ enqueue(index: index + 1, background: background)
8
8
  end
9
9
  end
@@ -1,8 +1,8 @@
1
1
  require "spec_helper"
2
2
 
3
- require "generators/install_generator"
3
+ require "generators/data_migration/install_generator"
4
4
 
5
- describe InstallGenerator, type: :generator do
5
+ describe DataMigration::Generators::InstallGenerator, type: :generator do
6
6
  include FileUtils
7
7
 
8
8
  subject(:generator) { described_class.start params }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data-migration
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Makarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-09 00:00:00.000000000 Z
11
+ date: 2024-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -180,10 +180,10 @@ files:
180
180
  - lib/data_migration/config.rb
181
181
  - lib/data_migration/job.rb
182
182
  - lib/data_migration/task.rb
183
+ - lib/generators/data_migration/install_generator.rb
184
+ - lib/generators/data_migration/templates/install_data_migration_tasks.rb.tt
183
185
  - lib/generators/data_migration_generator.rb
184
- - lib/generators/install_generator.rb
185
186
  - lib/generators/templates/data_migration.rb.tt
186
- - lib/generators/templates/install_data_migration_tasks.rb.tt
187
187
  - spec/data_migration/config_spec.rb
188
188
  - spec/data_migration/job_spec.rb
189
189
  - spec/data_migration/task_spec.rb
@@ -1,17 +0,0 @@
1
- require "rails/generators"
2
- require "rails/generators/active_record"
3
- require "rails/generators/active_record/migration/migration_generator"
4
-
5
- class InstallGenerator < ActiveRecord::Generators::MigrationGenerator
6
- source_root File.expand_path("../templates", __FILE__)
7
-
8
- def create_migration_file
9
- set_local_assigns!
10
- validate_file_name!
11
- migration_template "install_#{name}.rb", "#{DataMigration.config.schema_migrations_path}/#{file_name}.rb"
12
- end
13
-
14
- def migration_parent
15
- "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
16
- end
17
- end