Skip to content

Instantly share code, notes, and snippets.

@deepfryed
Created July 14, 2010 00:37
Show Gist options
  • Save deepfryed/474819 to your computer and use it in GitHub Desktop.
Save deepfryed/474819 to your computer and use it in GitHub Desktop.
module Swift
class Migrations
def initialize adapter
@adapter = adapter.kind_of?(Adapter) ? adapter : Swift.db(adapter)
end
def typemap
{ Integer => 'integer', String => 'varchar(255)', Float => 'float', Time => 'timestamp' }
end
def migrate_up! model
fields = model.properties.map {|p| "#{p.field} #{typemap[p.type]}" }.join(',')
@adapter.execute "create table #{model.resource} (#{fields})"
end
def migrate_down! model
@adapter.execute "drop table if exists #{model.resource}"
end
def migrate! model
migrate_down! model
migrate_up! model
end
class MySQL < self
def typemap
super.merge({Time => 'datetime'})
end
end
class PostgreSQL < self; end
end
def self.auto_migrate! scope=:default
adapter = Swift.db(scope)
case adapter.driver.to_sym
when :mysql
migrator = Swift::Migrations::MySQL.new(adapter)
Swift::Model.models.each {|m| migrator.migrate!(m) }
when :postgresql
migrator = Swift::Migrations::PostgreSQL.new(adapter)
Swift::Model.models.each {|m| migrator.migrate!(m) }
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment