Class: DataMigrate::DatabaseTasks

Inherits:
Object
  • Object
show all
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

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)
    message = +%{#{filename} doesn't exist yet. Run `rake data:migrate` to create it, then try again.}
    Kernel.abort message
  end
end

.data_migrations_pathObject



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_migrationsObject



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_migrationsObject



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_migrationsObject



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_locationObject



40
41
42
# File 'lib/data_migrate/database_tasks.rb', line 40

def schema_location
  db_dir
end

.schema_migrations_pathObject



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