Class: Sequel::MigrationReverser

Inherits:
BasicObject
Defined in:
lib/sequel/extensions/migration.rb

Overview

Handles the reversing of reversible migrations. Basically records supported methods calls, translates them to reversed calls, and returns them in reverse order.

Constant Summary

Constants inherited from BasicObject

BasicObject::KEEP_METHODS

Instance Method Summary collapse

Methods inherited from BasicObject

const_missing, remove_methods!

Constructor Details

#initializeMigrationReverser

Returns a new instance of MigrationReverser.



125
126
127
# File 'lib/sequel/extensions/migration.rb', line 125

def initialize
  @actions = []
end

Instance Method Details

#reverse(&block) ⇒ Object

Reverse the actions for the given block. Takes the block given and returns a new block that reverses the actions taken by the given block.



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/sequel/extensions/migration.rb', line 132

def reverse(&block)
  begin
    instance_eval(&block)
  rescue
    just_raise = true
  end
  if just_raise
    Proc.new{raise Sequel::Error, 'irreversible migration method used, you may need to write your own down method'}
  else
    actions = @actions.reverse
    Proc.new do
      actions.each do |a|
        if a.last.is_a?(Proc)
          pr = a.pop
          send(*a, &pr)
        else
          send(*a)
        end
      end
    end
  end
end