Class: Databasium::Migration
- Inherits:
-
Object
- Object
- Databasium::Migration
- Defined in:
- app/services/databasium/migration.rb
Constant Summary collapse
- MIGRATIONS_PATHS =
[ "db/migrate" ]
- MIGRATIONS_TEMPLATE_PATH =
Databasium::Engine.root.join("lib/databasium/templates/migration.rb.tt")
- CREATE_TABLE_MIGRATIONS_TEMPLATE_PATH =
Databasium::Engine.root.join("lib/databasium/templates/create_table_migration.rb.tt")
Instance Attribute Summary collapse
-
#migration_context ⇒ Object
readonly
Returns the value of attribute migration_context.
-
#migrations ⇒ Object
readonly
Returns the value of attribute migrations.
-
#pending_migrations ⇒ Object
readonly
Returns the value of attribute pending_migrations.
Instance Method Summary collapse
- #find_migration!(version) ⇒ Object
- #generate_migration(params) ⇒ Object
- #get_migrations(search) ⇒ Object
-
#initialize ⇒ Migration
constructor
A new instance of Migration.
- #rollback_migration(version, rollback_steps, till_this_migration) ⇒ Object
- #run_migration(version) ⇒ Object
- #run_pending_migrations ⇒ Object
- #save_migration(params) ⇒ Object
Constructor Details
#initialize ⇒ Migration
Returns a new instance of Migration.
9 10 11 12 13 |
# File 'app/services/databasium/migration.rb', line 9 def initialize @migration_context = ActiveRecord::MigrationContext.new(MIGRATIONS_PATHS) @migrations = @migration_context.migrations @pending_migrations = @migration_context.pending_migration_versions end |
Instance Attribute Details
#migration_context ⇒ Object (readonly)
Returns the value of attribute migration_context.
2 3 4 |
# File 'app/services/databasium/migration.rb', line 2 def migration_context @migration_context end |
#migrations ⇒ Object (readonly)
Returns the value of attribute migrations.
2 3 4 |
# File 'app/services/databasium/migration.rb', line 2 def migrations @migrations end |
#pending_migrations ⇒ Object (readonly)
Returns the value of attribute pending_migrations.
2 3 4 |
# File 'app/services/databasium/migration.rb', line 2 def pending_migrations @pending_migrations end |
Instance Method Details
#find_migration!(version) ⇒ Object
20 21 22 23 24 25 26 |
# File 'app/services/databasium/migration.rb', line 20 def find_migration!(version) migration = migration_context.migrations.find { |m| m.version.to_s == version.to_s } unless migration && File.file?(migration.filename) raise ActiveRecord::RecordNotFound, "Migration #{version} not found" end migration end |
#generate_migration(params) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/services/databasium/migration.rb', line 74 def generate_migration(params) unless params[:table_name_from].present? || params[:table_name_to].present? || params[:table_name].present? raise "Please provide a table name to generate a migration" end require "rails/generators/active_record/migration/migration_generator" require "rails/generators" Rails.application.load_generators args = build_generator_args(params) gen = ActiveRecord::Generators::MigrationGenerator.new( args, {}, behavior: :invoke, destination_root: Rails.root.to_s ) gen.send(:set_local_assigns!) gen.set_migration_assigns!(gen.file_name) if params[:migration_action] == "create" source = CREATE_TABLE_MIGRATIONS_TEMPLATE_PATH else source = MIGRATIONS_TEMPLATE_PATH end ERB.new(File.read(source), trim_mode: "-", eoutvar: "@output_buffer").result( gen.instance_eval("binding") ) end |
#get_migrations(search) ⇒ Object
15 16 17 18 |
# File 'app/services/databasium/migration.rb', line 15 def get_migrations(search) return @migrations unless search.present? @migrations.select { |m| m.name =~ /#{Regexp.escape(search)}/i } if search end |
#rollback_migration(version, rollback_steps, till_this_migration) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'app/services/databasium/migration.rb', line 38 def rollback_migration(version, rollback_steps, till_this_migration) begin if rollback_steps.present? migration_context.rollback(rollback_steps.to_i) elsif till_this_migration == "true" migration_context.down(version.to_i) else migration_context.run(:down, version.to_i) end rescue => e raise "There was an error rolling back the #{version} migration: #{e.}" end end |
#run_migration(version) ⇒ Object
52 53 54 55 56 57 58 |
# File 'app/services/databasium/migration.rb', line 52 def run_migration(version) begin migration_context.run(:up, version.to_i) rescue => e raise "There was an error running the #{version} migration: #{e.}" end end |
#run_pending_migrations ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'app/services/databasium/migration.rb', line 28 def run_pending_migrations versions = migration_context.pending_migration_versions begin versions.each { |version| migration_context.run(:up, version) } rescue => e raise "There was an error running the pending migrations: #{e.}" end versions end |
#save_migration(params) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/services/databasium/migration.rb', line 60 def save_migration(params) require "rails/generators/active_record/migration/migration_generator" require "rails/generators" Rails.application.load_generators args = build_generator_args(params) if params[:add_migration] == "Save" && params[:add_model] == "1" generator = "model" else generator = "migration" end Rails::Generators.invoke(generator, args, behavior: :invoke, destination_root: Rails.root.to_s) true end |