Class: Pliny::DbSupport

Inherits:
Object
  • Object
show all
Defined in:
lib/pliny/db_support.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, sequel_logger) ⇒ DbSupport

Returns a new instance of DbSupport.



31
32
33
34
35
36
# File 'lib/pliny/db_support.rb', line 31

def initialize(url, sequel_logger)
  @db = Sequel.connect(url)
  if sequel_logger
    @db.loggers << sequel_logger
  end
end

Instance Attribute Details

#dbObject

Returns the value of attribute db.



29
30
31
# File 'lib/pliny/db_support.rb', line 29

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

Yields:

  • (instance)


22
23
24
25
26
27
# 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
end

.setup?(database_url) ⇒ Boolean

Returns:

  • (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



43
44
45
# File 'lib/pliny/db_support.rb', line 43

def create(name)
  db.run(%{CREATE DATABASE "#{name}"})
end

#disconnectObject



64
65
66
# File 'lib/pliny/db_support.rb', line 64

def disconnect
  @db.disconnect
end

#exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
# File 'lib/pliny/db_support.rb', line 38

def exists?(name)
  res = db.fetch("SELECT 1 FROM pg_database WHERE datname = ?", name)
  return res.count > 0
end

#migrate(target = nil) ⇒ Object



47
48
49
# File 'lib/pliny/db_support.rb', line 47

def migrate(target=nil)
  Sequel::Migrator.apply(db, "./db/migrate", target)
end

#rollbackObject



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/pliny/db_support.rb', line 51

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