Class: Lotus::Model::Migrator::Adapter Private

Inherits:
Object
  • Object
show all
Defined in:
lib/lotus/model/migrator/adapter.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Migrator base adapter

Since:

  • 0.4.0

Direct Known Subclasses

MySQLAdapter, PostgresAdapter, SQLiteAdapter

Constant Summary collapse

MIGRATIONS_TABLE =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Migrations table to store migrations metadata.

Since:

  • 0.4.0

:schema_migrations
MIGRATIONS_TABLE_VERSION_COLUMN =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Migrations table version column

Since:

  • 0.4.0

:filename

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Adapter

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize an adapter

Since:

  • 0.4.0



48
49
50
# File 'lib/lotus/model/migrator/adapter.rb', line 48

def initialize(connection)
  @connection = connection
end

Class Method Details

.for(connection) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Loads and returns a specific adapter for the given connection.

Since:

  • 0.4.0



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/lotus/model/migrator/adapter.rb', line 28

def self.for(connection)
  case connection.database_type
  when :sqlite
    require 'lotus/model/migrator/sqlite_adapter'
    SQLiteAdapter
  when :postgres
    require 'lotus/model/migrator/postgres_adapter'
    PostgresAdapter
  when :mysql
    require 'lotus/model/migrator/mysql_adapter'
    MySQLAdapter
  else
    self
  end.new(connection)
end

Instance Method Details

#createObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Create database. It must be implemented by subclasses.

Raises:

See Also:

Since:

  • 0.4.0



59
60
61
# File 'lib/lotus/model/migrator/adapter.rb', line 59

def create
  raise MigrationError.new("Current adapter (#{ @connection.database_type }) doesn't support create.")
end

#dropObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Drop database. It must be implemented by subclasses.

Raises:

See Also:

Since:

  • 0.4.0



70
71
72
# File 'lib/lotus/model/migrator/adapter.rb', line 70

def drop
  raise MigrationError.new("Current adapter (#{ @connection.database_type }) doesn't support drop.")
end

#loadObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Load database schema. It must be implemented by subclasses.

Raises:

See Also:

Since:

  • 0.4.0



81
82
83
# File 'lib/lotus/model/migrator/adapter.rb', line 81

def load
  raise MigrationError.new("Current adapter (#{ @connection.database_type }) doesn't support load.")
end

#versionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Database version.

Since:

  • 0.4.0



89
90
91
92
93
94
95
# File 'lib/lotus/model/migrator/adapter.rb', line 89

def version
  return unless @connection.tables.include?(MIGRATIONS_TABLE)

  if record = @connection[MIGRATIONS_TABLE].order(MIGRATIONS_TABLE_VERSION_COLUMN).last
    record.fetch(MIGRATIONS_TABLE_VERSION_COLUMN).scan(/\A[\d]{14}/).first.to_s
  end
end