Class: ROM::SQL::Migration::Migrator Private

Inherits:
Object
  • Object
show all
Extended by:
Initializer
Defined in:
lib/rom/sql/migration/migrator.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.

API:

  • private

Constant Summary collapse

DEFAULT_PATH =

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.

API:

  • private

'db/migrate'
VERSION_FORMAT =

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.

API:

  • private

'%Y%m%d%H%M%S'
DEFAULT_INFERRER =

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.

API:

  • private

Schema::Inferrer.new.suppress_errors.freeze

Instance Method Summary collapse

Instance Method Details

#auto_migrate!(gateway, schemas, options = EMPTY_HASH) ⇒ 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.

API:

  • private



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/rom/sql/migration/migrator.rb', line 70

def auto_migrate!(gateway, schemas, options = EMPTY_HASH)
  diff_finder = SchemaDiff.new(gateway.database_type)

  changes = schemas.map { |target|
    empty = SQL::Schema.define(target.name)
    current = target.with(**inferrer.(empty, gateway))

    diff_finder.(current, target)
  }.reject(&:empty?)

  runner = migration_runner(options)
  runner.(changes)
end

#create_file(name, version = generate_version, **options) ⇒ 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.

API:

  • private



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rom/sql/migration/migrator.rb', line 45

def create_file(name, version = generate_version, **options)
  sequence = options[:sequence] ? '%03d' % options[:sequence] : nil
  filename = "#{version}#{sequence}_#{name}.rb"
  content = options[:content] || migration_file_content
  path = options[:path] || self.path
  dirname = Pathname(path)
  fullpath = dirname.join(filename)

  FileUtils.mkdir_p(dirname)
  File.write(fullpath, content)

  fullpath
end

#generate_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.

API:

  • private



60
61
62
# File 'lib/rom/sql/migration/migrator.rb', line 60

def generate_version
  Time.now.utc.strftime(VERSION_FORMAT)
end

#migrationObject

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.

API:

  • private



40
41
42
# File 'lib/rom/sql/migration/migrator.rb', line 40

def migration(&)
  Sequel.migration(&)
end

#migration_file_contentObject

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.

API:

  • private



65
66
67
# File 'lib/rom/sql/migration/migrator.rb', line 65

def migration_file_content
  File.read(Pathname(__FILE__).dirname.join('template.rb').realpath)
end

#migration_runner(options) ⇒ 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.

API:

  • private



85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rom/sql/migration/migrator.rb', line 85

def migration_runner(options)
  if options[:inline]
    Runner.new(InlineRunner.new(connection))
  else
    counter = 0
    writer = Writer.new do |name, content|
      create_file(name, **options, content: content, sequence: counter)
      counter += 1
    end

    Runner.new(writer)
  end
end

#pending?Boolean

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.

Returns:

API:

  • private



35
36
37
# File 'lib/rom/sql/migration/migrator.rb', line 35

def pending?
  !Sequel::Migrator.is_current?(connection, path.to_s)
end

#run(options = {}) ⇒ 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.

API:

  • private



30
31
32
# File 'lib/rom/sql/migration/migrator.rb', line 30

def run(options = {})
  Sequel::Migrator.run(connection, path.to_s, options)
end