Class: Pliny::DbSupport
- Inherits:
-
Object
- Object
- Pliny::DbSupport
- Defined in:
- lib/pliny/db_support.rb
Instance Attribute Summary collapse
-
#db ⇒ Object
Returns the value of attribute db.
Class Method Summary collapse
- .admin_url(database_url) ⇒ Object
- .run(url, sequel_log_io = StringIO.new) {|instance| ... } ⇒ Object
- .setup?(database_url) ⇒ Boolean
Instance Method Summary collapse
- #create(name) ⇒ Object
- #disconnect ⇒ Object
- #exists?(name) ⇒ Boolean
-
#initialize(url, sequel_logger) ⇒ DbSupport
constructor
A new instance of DbSupport.
- #migrate(target = nil) ⇒ Object
- #rollback ⇒ Object
Constructor Details
#initialize(url, sequel_logger) ⇒ DbSupport
Returns a new instance of DbSupport.
32 33 34 35 36 37 |
# File 'lib/pliny/db_support.rb', line 32 def initialize(url, sequel_logger) @db = Sequel.connect(url) if sequel_logger @db.loggers << sequel_logger end end |
Instance Attribute Details
#db ⇒ Object
Returns the value of attribute db.
30 31 32 |
# File 'lib/pliny/db_support.rb', line 30 def db @db end |
Class Method Details
.admin_url(database_url) ⇒ Object
7 8 9 10 11 |
# File 'lib/pliny/db_support.rb', line 7 def self.admin_url(database_url) uri = URI.parse(database_url) uri.path = "/postgres" uri.to_s end |
.run(url, sequel_log_io = StringIO.new) {|instance| ... } ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/pliny/db_support.rb', line 22 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) ⇒ Boolean
13 14 15 16 17 18 19 20 |
# File 'lib/pliny/db_support.rb', line 13 def self.setup?(database_url) @db = Sequel.connect(database_url) @db.test_connection @db.disconnect return true rescue Sequel::DatabaseConnectionError return false end |
Instance Method Details
#create(name) ⇒ Object
44 45 46 |
# File 'lib/pliny/db_support.rb', line 44 def create(name) db.run(%{CREATE DATABASE "#{name}"}) end |
#disconnect ⇒ Object
65 66 67 |
# File 'lib/pliny/db_support.rb', line 65 def disconnect @db.disconnect end |
#exists?(name) ⇒ Boolean
39 40 41 42 |
# File 'lib/pliny/db_support.rb', line 39 def exists?(name) res = db.fetch("SELECT 1 FROM pg_database WHERE datname = ?", name) return res.count > 0 end |
#migrate(target = nil) ⇒ Object
48 49 50 |
# File 'lib/pliny/db_support.rb', line 48 def migrate(target=nil) Sequel::Migrator.apply(db, "./db/migrate", target) end |
#rollback ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/pliny/db_support.rb', line 52 def rollback return unless db.tables.include?(:schema_migrations) return unless current = db[:schema_migrations].order(Sequel.desc(:filename)).first migrations = Dir["./db/migrate/*.rb"].map { |f| File.basename(f).to_i }.sort target = 0 # by default, rollback everything index = migrations.index(current[:filename].to_i) if index > 0 target = migrations[index - 1] end Sequel::Migrator.apply(db, "./db/migrate", target) end |