Module: ZeroDowntimeMigrations::Migration

Extended by:
DSL
Defined in:
lib/zero_downtime_migrations/migration.rb

Instance Attribute Summary

Attributes included from DSL

#current, #data, #ddl, #index, #safe

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DSL

data?, ddl?, index?, migrating?, mixed?, safe?, unsafe?

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object (private)



79
80
81
82
83
84
# File 'lib/zero_downtime_migrations/migration.rb', line 79

def method_missing(method, *args)
  Migration.ddl = true if ddl_method?(method)
  Migration.index = true if index_method?(method)
  validate(method, *args)
  super
end

Class Method Details

.prepended(mod) ⇒ Object



5
6
7
# File 'lib/zero_downtime_migrations/migration.rb', line 5

def self.prepended(mod)
  mod.singleton_class.prepend(DSL)
end

Instance Method Details

#ddl_disabled?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/zero_downtime_migrations/migration.rb', line 15

def ddl_disabled?
  !!disable_ddl_transaction
end

#defineObject



19
20
21
22
23
# File 'lib/zero_downtime_migrations/migration.rb', line 19

def define(*)
  Migration.current = self
  Migration.safe = true
  super.tap { Migration.current = nil }
end

#initializeObject



9
10
11
12
13
# File 'lib/zero_downtime_migrations/migration.rb', line 9

def initialize(*)
  ActiveRecord::Base.send(:prepend, Data)
  ActiveRecord::Relation.send(:prepend, Relation)
  super
end

#migrate(direction) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/zero_downtime_migrations/migration.rb', line 25

def migrate(direction)
  @direction = direction

  Migration.current = self
  Migration.data = false
  Migration.ddl = false
  Migration.index = false
  Migration.safe ||= reverse_migration? || rollup_migration?

  super.tap do
    validate(:ddl_migration)
    validate(:mixed_migration)
    Migration.current = nil
    Migration.safe = false
  end
end