### Install Dekiru::DataMigration Gem Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Instructions for installing the Dekiru::DataMigration gem using Bundler or gem install. ```ruby gem 'dekiru-data_migration' ``` ```bash $ bundle install ``` ```bash $ gem install dekiru-data_migration ``` -------------------------------- ### Dekiru Data Migration Runtime Options Example Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Shows how to execute a Dekiru::DataMigration::Operator with specific runtime options. This includes options for controlling side effect warnings, transaction usage, logging, and output destination. ```ruby Dekiru::DataMigration::Operator.execute('Title', options) do # Processing content end ``` -------------------------------- ### Test Data Migration Class (RSpec - Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Example of unit testing a data migration class using RSpec. It covers testing the `migration_targets` and `migrate_record` methods. ```ruby # spec/migrations/demo_migration_spec.rb RSpec.describe DemoMigration do let(:migration) { described_class.new } describe '#migration_targets' do it 'returns correct migration targets' do create_list(:user, 3, email: 'test@sonicgarden.jp', admin: false) create_list(:user, 2, email: 'other@example.com', admin: false) targets = migration.migration_targets expect(targets.count).to eq(3) expect(targets.all? { |u| u.email.include?('sonicgarden') }).to be true end end describe '#migrate_record' do it 'updates user to admin' do user = create(:user, admin: false) expect { migration.migrate_record(user) } .to change { user.reload.admin }.from(false).to(true) end end end ``` -------------------------------- ### Dekiru Data Migration Basic Configuration Options Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Lists and explains basic configuration options for Dekiru::DataMigration, including setting the maintenance script directory and custom transaction providers. ```ruby # config/initializers/dekiru.rb Dekiru::DataMigration.configure do |config| # Output directory for maintenance scripts (default: "scripts") config.maintenance_script_directory = 'scripts/maintenance' # Custom transaction provider (default: Dekiru::DataMigration::TransactionProvider.new) config.transaction_provider = MyTransactionProvider.new end ``` -------------------------------- ### Legacy Block-based Data Migration (Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Demonstrates the legacy block-based approach for data migration using `Dekiru::DataMigration::Operator.execute`. ```ruby # scripts/legacy_demo.rb Dekiru::DataMigration::Operator.execute('demo_migration') do # write here end ``` -------------------------------- ### Execute Data Migration with Operator Script (Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Demonstrates how to use Dekiru::DataMigration::Operator.execute to perform data migrations using a block-based approach. This method includes progress display and logging. ```ruby # scripts/demo.rb Dekiru::DataMigration::Operator.execute('Grant admin privileges to users') do targets = User.where("email LIKE '%sonicgarden%'") log "Target user count: #{targets.count}" find_each_with_progress(targets) do |user| user.update!(admin: true) end log "Updated user count: #{User.where("email LIKE '%sonicgarden%'").where(admin: true).count}" end ``` -------------------------------- ### Define Data Migration with Class (Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Shows how to define data migration logic as a class, inheriting from Dekiru::DataMigration::Migration. This approach is recommended for easier testing and better organization. ```ruby # scripts/20230118_demo_migration.rb class DemoMigration < Dekiru::DataMigration::Migration def migration_targets User.where("email LIKE '%sonicgarden%'").where(admin: false) end def migrate_record(user) user.update!(admin: true) end def migrate super log "Updated user count: #{User.where(admin: true).count}" end end DemoMigration.run ``` -------------------------------- ### Configure Output Directory for Dekiru Data Migration Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Sets the output directory for maintenance scripts in Dekiru Data Migration. This configuration is applied within the application's initializers. ```ruby # config/initializers/dekiru.rb Dekiru::DataMigration.configure do |config| config.maintenance_script_directory = 'scripts/maintenance' end ``` -------------------------------- ### Custom Transaction Management for Multi-Database Applications Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Demonstrates how to implement custom transaction handling for Dekiru::DataMigration::Operator when dealing with multiple databases. It involves defining a custom TransactionProvider that utilizes application-specific transaction methods. ```ruby # app/models/legacy_record.rb class LegacyRecord < ApplicationRecord connects_to database: { writing: :legacy, reading: :legacy } end # app/models/application_record.rb class ApplicationRecord < ActiveRecord::Base connects_to database: { writing: :primary, reading: :primary } def self.with_legacy_transaction ActiveRecord::Base.transaction do LegacyRecord.transaction do yield end end end end ``` ```ruby # config/initializers/dekiru.rb class MyTransactionProvider < Dekiru::DataMigration::TransactionProvider def within_transaction(&) ApplicationRecord.with_legacy_transaction(&) end end Dekiru::DataMigration.configure do |config| config.transaction_provider = MyTransactionProvider.new end ``` -------------------------------- ### Generated Maintenance Script Template (Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md A template for a generated maintenance script file, outlining the structure for defining migration targets and record migration logic. ```ruby # scripts/20230118_demo_migration.rb # frozen_string_literal: true class DemoMigration < Dekiru::DataMigration::Migration def migration_targets # 移行対象を返すActiveRecord::Relationを定義 # 例: User.where(some_condition: true) raise NotImplementedError, 'migration_targets method must be implemented' end def migrate_record(record) # 個別レコードの更新処理を定義 # 例: record.update!(some_attribute: new_value) raise NotImplementedError, 'migrate_record method must be implemented' end end DemoMigration.run ``` -------------------------------- ### Monitor Side Effects During Data Migration (Ruby) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Enables monitoring of side effects such as database writes, job enqueuing, and email sending during data migration by passing `warning_side_effects: true` to the `execute` method. ```ruby Dekiru::DataMigration::Operator.execute('Grant admin privileges to users', warning_side_effects: true) do # Processing content... end ``` -------------------------------- ### Generate Maintenance Script (Bash) Source: https://github.com/sonicgarden/dekiru-data_migration/blob/main/README.md Command to generate a new maintenance script file using the Rails generator. The filename will be prefixed with the current date. ```bash $ bin/rails g maintenance_script demo_migration ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.