Class: DohDb::DatabaseMigrator

Inherits:
Object
  • Object
show all
Defined in:
lib/doh/mysql/migrate.rb

Instance Method Summary collapse

Constructor Details

#initialize(dest_db = nil, source_db = nil, directory = nil) ⇒ DatabaseMigrator

Returns a new instance of DatabaseMigrator.



7
8
9
10
11
12
# File 'lib/doh/mysql/migrate.rb', line 7

def initialize(dest_db = nil, source_db = nil, directory = nil)
  @dest_db = dest_db || DohApp::config['primary_database']
  @source_db = source_db || @dest_db
  @table = @dest_db + '.version'
  @directory = directory || File.join(DohApp::home, 'database', @source_db, 'migrate')
end

Instance Method Details

#down_filename(version) ⇒ Object



46
47
48
# File 'lib/doh/mysql/migrate.rb', line 46

def down_filename(version)
  filename_prefix(version) + '_down.sql'
end

#get_unlocked_migrationObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/doh/mysql/migrate.rb', line 50

def get_unlocked_migration
  latest_version = DohDb::latest_database_version(@dest_db)
  previous_version, previous_svn_revision = DohDb::locked_version_info(@dest_db)
  raise 'you need to lock the database before adding a migration (migrate.rb -l)' if !previous_svn_revision
  if latest_version == previous_version
    upfile = up_filename(latest_version + 1)
    downfile = down_filename(latest_version + 1)
    `touch #{upfile}`
    `touch #{downfile}`
    `svn add #{upfile}`
    `svn add #{downfile}`
  else
    upfile = up_filename(latest_version)
    downfile = down_filename(latest_version)
  end
  [true, "up:#{upfile} down:#{downfile}"]
end

#make_version(new_version) ⇒ Object

Migrates to a specific version. Returns nil if true if no migrations took place, or [original_version, new_version].



32
33
34
35
36
37
38
39
40
# File 'lib/doh/mysql/migrate.rb', line 32

def make_version(new_version)
  get_original_version
  if new_version > @original_version
    make_later_version(new_version)
  else
    make_earlier_version(new_version)
  end
  migrate_result
end

#rollbackObject

Rolls back one version. Returns nil if true if no migrations took place, or [original_version, new_version].



24
25
26
27
28
# File 'lib/doh/mysql/migrate.rb', line 24

def rollback
  get_original_version
  make_earlier_version(@original_version - 1)
  migrate_result
end

#up_filename(version) ⇒ Object



42
43
44
# File 'lib/doh/mysql/migrate.rb', line 42

def up_filename(version)
  filename_prefix(version) + '_up.sql'
end

#updateObject

Migrates to the latest version. Returns nil if true if no migrations took place, or [original_version, new_version].



16
17
18
19
20
# File 'lib/doh/mysql/migrate.rb', line 16

def update
  get_original_version
  make_latest_version
  migrate_result
end