Class: Hanami::Model::Migrator::Adapter Private

Inherits:
Object
  • Object
show all
Defined in:
lib/hanami/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



50
51
52
# File 'lib/hanami/model/migrator/adapter.rb', line 50

def initialize(connection)
  @connection = connection
end

Class Method Details

.for(configuration) ⇒ 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
43
44
# File 'lib/hanami/model/migrator/adapter.rb', line 28

def self.for(configuration) # rubocop:disable Metrics/MethodLength
  connection = Connection.new(configuration)

  case connection.database_type
  when :sqlite
    require 'hanami/model/migrator/sqlite_adapter'
    SQLiteAdapter
  when :postgres
    require 'hanami/model/migrator/postgres_adapter'
    PostgresAdapter
  when :mysql
    require 'hanami/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



61
62
63
# File 'lib/hanami/model/migrator/adapter.rb', line 61

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



72
73
74
# File 'lib/hanami/model/migrator/adapter.rb', line 72

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



93
94
95
# File 'lib/hanami/model/migrator/adapter.rb', line 93

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

#migrate(migrations, version) ⇒ 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.

Since:

  • 0.4.0



78
79
80
81
82
83
84
# File 'lib/hanami/model/migrator/adapter.rb', line 78

def migrate(migrations, version)
  version = Integer(version) unless version.nil?

  Sequel::Migrator.run(connection.raw, migrations, target: version, allow_missing_migration_files: true)
rescue Sequel::Migrator::Error => e
  raise MigrationError.new(e.message)
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



101
102
103
104
105
106
107
108
# File 'lib/hanami/model/migrator/adapter.rb', line 101

def version
  table = connection.table(MIGRATIONS_TABLE)
  return if table.nil?

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