class Sequel::MigrationReverser
Handles the reversing of reversible migrations. Basically records supported methods calls, translates them to reversed calls, and returns them in reverse order.
:nocov:
Public Class Methods
new()
click to toggle source
# File lib/sequel/extensions/migration.rb 166 def initialize 167 @actions = [] 168 end
Public Instance Methods
reverse(&block)
click to toggle source
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.
# File lib/sequel/extensions/migration.rb 173 def reverse(&block) 174 begin 175 instance_exec(&block) 176 rescue 177 just_raise = true 178 end 179 if just_raise 180 Proc.new{raise Sequel::Error, "irreversible migration method used in #{block.source_location.first}, you may need to write your own down method"} 181 else 182 actions = @actions.reverse 183 Proc.new do 184 actions.each do |a| 185 pr = a.last.is_a?(Proc) ? a.pop : nil 186 # Allow calling private methods as the reversing methods are private 187 send(*a, &pr) 188 end 189 end 190 end 191 end
Private Instance Methods
add_column(*args)
click to toggle source
# File lib/sequel/extensions/migration.rb 195 def add_column(*args) 196 @actions << [:drop_column, args[0], args[1]] 197 end
add_index(*args)
click to toggle source
# File lib/sequel/extensions/migration.rb 199 def add_index(*args) 200 @actions << [:drop_index, *args] 201 end
alter_table(table, &block)
click to toggle source
# File lib/sequel/extensions/migration.rb 203 def alter_table(table, &block) 204 @actions << [:alter_table, table, MigrationAlterTableReverser.new.reverse(&block)] 205 end
create_enum(name, _)
click to toggle source
# File lib/sequel/extensions/pg_enum.rb 189 def create_enum(name, _) 190 @actions << [:drop_enum, name] 191 end
create_join_table(*args)
click to toggle source
# File lib/sequel/extensions/migration.rb 207 def create_join_table(*args) 208 @actions << [:drop_join_table, *args] 209 end
create_table(name, opts=OPTS)
click to toggle source
# File lib/sequel/extensions/migration.rb 211 def create_table(name, opts=OPTS) 212 @actions << [:drop_table, name, opts] 213 end
create_view(name, _, opts=OPTS)
click to toggle source
# File lib/sequel/extensions/migration.rb 215 def create_view(name, _, opts=OPTS) 216 @actions << [:drop_view, name, opts] 217 end
rename_column(table, name, new_name)
click to toggle source
# File lib/sequel/extensions/migration.rb 219 def rename_column(table, name, new_name) 220 @actions << [:rename_column, table, new_name, name] 221 end
rename_enum(old_name, new_name)
click to toggle source
# File lib/sequel/extensions/pg_enum.rb 193 def rename_enum(old_name, new_name) 194 @actions << [:rename_enum, new_name, old_name] 195 end
rename_table(table, new_name)
click to toggle source
# File lib/sequel/extensions/migration.rb 223 def rename_table(table, new_name) 224 @actions << [:rename_table, new_name, table] 225 end