Class: DataMigrate::DatabaseTasks
- Inherits:
-
Object
- Object
- DataMigrate::DatabaseTasks
- Extended by:
- ActiveRecord::Tasks::DatabaseTasks
- Defined in:
- lib/data_migrate/database_tasks.rb
Overview
This class extends DatabaseTasks to add a schema_file method.
Class Method Summary collapse
- .check_schema_file(filename) ⇒ Object
- .data_migrations_path ⇒ Object
- .dump_filename(namespace, format = ActiveRecord::Base.schema_format) ⇒ Object
- .forward(step = 1) ⇒ Object
- .past_migrations(sort = nil) ⇒ Object
- .pending_data_migrations ⇒ Object
- .pending_migrations ⇒ Object
- .pending_schema_migrations ⇒ Object
- .run_migration(migration, direction) ⇒ Object
- .schema_dump_path(db_config, format = ActiveRecord.schema_format) ⇒ Object
-
.schema_file(_format = nil) ⇒ Object
This overrides ActiveRecord::Tasks::DatabaseTasks.
- .schema_file_type(_format = nil) ⇒ Object
- .schema_location ⇒ Object
- .schema_migrations_path ⇒ Object
- .sort_migrations(set1, set2 = nil) ⇒ Object
- .sort_string(migration) ⇒ Object
Class Method Details
.check_schema_file(filename) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/data_migrate/database_tasks.rb', line 44 def check_schema_file(filename) unless File.exist?(filename) = +%{#{filename} doesn't exist yet. Run `rake data:migrate` to create it, then try again.} Kernel.abort end end |
.data_migrations_path ⇒ Object
67 68 69 |
# File 'lib/data_migrate/database_tasks.rb', line 67 def data_migrations_path ::DataMigrate.config.data_migrations_path end |
.dump_filename(namespace, format = ActiveRecord::Base.schema_format) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/data_migrate/database_tasks.rb', line 16 def dump_filename(namespace, format = ActiveRecord::Base.schema_format) filename = if namespace == "primary" schema_file_type(format) else "#{namespace}_#{schema_file_type(format)}" end ENV["DATA_SCHEMA"] || File.join(schema_location, filename) end |
.forward(step = 1) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/data_migrate/database_tasks.rb', line 91 def self.forward(step = 1) DataMigrate::DataMigrator.assure_data_schema_table migrations = pending_migrations.reverse.pop(step).reverse migrations.each do | pending_migration | if pending_migration[:kind] == :data ActiveRecord::Migration.write("== %s %s" % ["Data", "=" * 71]) DataMigrate::DataMigrator.run(:up, data_migrations_path, pending_migration[:version]) elsif pending_migration[:kind] == :schema ActiveRecord::Migration.write("== %s %s" % ["Schema", "=" * 69]) DataMigrate::SchemaMigration.run(:up, schema_migrations_path, pending_migration[:version]) end end end |
.past_migrations(sort = nil) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/data_migrate/database_tasks.rb', line 136 def self.past_migrations(sort = nil) sort = sort.downcase if sort db_list_data = if DataMigrate::DataSchemaMigration.table_exists? DataMigrate::DataSchemaMigration.normalized_versions.sort else [] end db_list_schema = ActiveRecord::SchemaMigration.normalized_versions.sort.sort migrations = db_list_data.map do |d| { version: d.to_i, kind: :data } end + db_list_schema.map do |d| { version: d.to_i, kind: :schema } end sort == "asc" ? sort_migrations(migrations) : sort_migrations(migrations).reverse end |
.pending_data_migrations ⇒ Object
117 118 119 120 121 |
# File 'lib/data_migrate/database_tasks.rb', line 117 def self.pending_data_migrations data_migrations = DataMigrate::DataMigrator.migrations(data_migrations_path) sort_migrations(DataMigrate::DataMigrator.new(:up, data_migrations ). pending_migrations.map {|m| { version: m.version, name: m.name, kind: :data }}) end |
.pending_migrations ⇒ Object
51 52 53 54 55 56 |
# File 'lib/data_migrate/database_tasks.rb', line 51 def pending_migrations sort_migrations( pending_schema_migrations, pending_data_migrations ) end |
.pending_schema_migrations ⇒ Object
123 124 125 |
# File 'lib/data_migrate/database_tasks.rb', line 123 def self.pending_schema_migrations ::DataMigrate::SchemaMigration.pending_schema_migrations end |
.run_migration(migration, direction) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/data_migrate/database_tasks.rb', line 71 def run_migration(migration, direction) if migration[:kind] == :data ::ActiveRecord::Migration.write("== %s %s" % ['Data', "=" * 71]) ::DataMigrate::DataMigrator.run(direction, data_migrations_path, migration[:version]) else ::ActiveRecord::Migration.write("== %s %s" % ['Schema', "=" * 69]) ::DataMigrate::SchemaMigration.run( direction, ::DataMigrate::SchemaMigration.migrations_paths, migration[:version] ) end end |
.schema_dump_path(db_config, format = ActiveRecord.schema_format) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/data_migrate/database_tasks.rb', line 26 def schema_dump_path(db_config, format = ActiveRecord.schema_format) return ENV["DATA_SCHEMA"] if ENV["DATA_SCHEMA"] filename = if db_config.primary? schema_file_type(format) else [db_config.name, schema_file_type(format)].join("_") end return unless filename File.dirname(filename) == schema_location ? filename : File.join(schema_location, filename) end |
.schema_file(_format = nil) ⇒ Object
This overrides ActiveRecord::Tasks::DatabaseTasks
87 88 89 |
# File 'lib/data_migrate/database_tasks.rb', line 87 def self.schema_file(_format = nil) File.join(db_dir, "data_schema.rb") end |
.schema_file_type(_format = nil) ⇒ Object
12 13 14 |
# File 'lib/data_migrate/database_tasks.rb', line 12 def schema_file_type(_format = nil) "data_schema.rb" end |
.schema_location ⇒ Object
40 41 42 |
# File 'lib/data_migrate/database_tasks.rb', line 40 def schema_location db_dir end |
.schema_migrations_path ⇒ Object
109 110 111 |
# File 'lib/data_migrate/database_tasks.rb', line 109 def self.schema_migrations_path "db/migrate/" end |
.sort_migrations(set1, set2 = nil) ⇒ Object
58 59 60 61 |
# File 'lib/data_migrate/database_tasks.rb', line 58 def sort_migrations set_1, set_2=nil migrations = set_1 + (set_2 || []) migrations.sort{|a,b| sort_string(a) <=> sort_string(b)} end |
.sort_string(migration) ⇒ Object
63 64 65 |
# File 'lib/data_migrate/database_tasks.rb', line 63 def sort_string migration "#{migration[:version]}_#{migration[:kind] == :data ? 1 : 0}" end |