class Pliny::DbSupport
Constants
- MIGRATION_DIR
Attributes
db[RW]
Public Class Methods
admin_url(database_url)
click to toggle source
# File lib/pliny/db_support.rb, line 8 def self.admin_url(database_url) uri = URI.parse(database_url) uri.path = "/postgres" uri.to_s end
new(url, sequel_logger)
click to toggle source
# File lib/pliny/db_support.rb, line 33 def initialize(url, sequel_logger) @db = Sequel.connect(url) if sequel_logger @db.loggers << sequel_logger end end
run(url, sequel_log_io=StringIO.new) { |instance| ... }
click to toggle source
# File lib/pliny/db_support.rb, line 23 def self.run(url, sequel_log_io=StringIO.new) logger = Logger.new(sequel_log_io) instance = new(url, logger) yield instance instance.disconnect Sequel::DATABASES.delete(instance) end
setup?(database_url)
click to toggle source
# File lib/pliny/db_support.rb, line 14 def self.setup?(database_url) @db = Sequel.connect(database_url) @db.test_connection @db.disconnect return true rescue Sequel::DatabaseConnectionError return false end
Public Instance Methods
create(name)
click to toggle source
# File lib/pliny/db_support.rb, line 45 def create(name) db.run(%{CREATE DATABASE "#{name}"}) end
disconnect()
click to toggle source
# File lib/pliny/db_support.rb, line 79 def disconnect @db.disconnect end
exists?(name)
click to toggle source
# File lib/pliny/db_support.rb, line 40 def exists?(name) res = db.fetch("SELECT 1 FROM pg_database WHERE datname = ?", name) return res.count > 0 end
migrate(target = nil)
click to toggle source
# File lib/pliny/db_support.rb, line 49 def migrate(target = nil) Sequel::Migrator.apply(db, MIGRATION_DIR, target) end
rollback()
click to toggle source
# File lib/pliny/db_support.rb, line 65 def rollback current_version = version return if current_version.zero? migrations = Dir["#{MIGRATION_DIR}/*.rb"].map { |f| File.basename(f).to_i }.sort target = 0 # by default, rollback everything index = migrations.index(current_version) if index > 0 target = migrations[index - 1] end Sequel::Migrator.apply(db, MIGRATION_DIR, target) end
version()
click to toggle source
# File lib/pliny/db_support.rb, line 53 def version return 0 unless db.table_exists?(:schema_migrations) current = db[:schema_migrations].order(Sequel.desc(:filename)).first return 0 unless current version = current[:filename].match(Sequel::Migrator::MIGRATION_FILE_PATTERN).captures.first version ||= 0 Integer(version) end