Class: Postgres

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

Overview

Postgres database API

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conf, user = nil) ⇒ Postgres

Returns a new instance of Postgres.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/postgres.rb', line 8

def initialize(conf, user = nil)
  @status = true
  @config = conf
  begin
    if user.nil?
      @connection = PG::Connection.new(dbname: @config.database, user: @config.username, password: @config.password,
                                       host: @config.host, port: @config.port)
    else
      # assuming user is postgres, dbname is also postgres
      @connection = PG::Connection.new(dbname: user, user: user,
                                       host: config.host, port: config.port)
    end
  rescue PG::Error => e
    trace e.message
    @connection = nil
    @status = false
  end
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



6
7
8
# File 'lib/postgres.rb', line 6

def config
  @config
end

#connectionObject (readonly)

Returns the value of attribute connection.



6
7
8
# File 'lib/postgres.rb', line 6

def connection
  @connection
end

#statusObject (readonly)

Returns the value of attribute status.



6
7
8
# File 'lib/postgres.rb', line 6

def status
  @status
end

Instance Method Details

#connected?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/postgres.rb', line 27

def connected?
  ! @connection.nil?
end

#execute(query) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/postgres.rb', line 44

def execute(query)
  begin
    trace query
    result = @connection.query(query)
  rescue PG::Error => e
    trace e.message
    # puts "ERROR: failed query [#{query}]" if @config.verbose
    @status = false
    result = nil
  end
  result
end

#finishObject



35
36
37
38
# File 'lib/postgres.rb', line 35

def finish
  @connection.finish unless @connection.nil?
  @status
end

#ok?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/postgres.rb', line 31

def ok?
  @status
end

#script(file) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/postgres.rb', line 69

def script(file)
  query = ''
  file.each_line do |line|
    trace line
    query = query + ' ' + line
    if query.end_with?(';')
      @connection.query(query)
      query = ''
    end
  end
end

#trace(message) ⇒ Object



40
41
42
# File 'lib/postgres.rb', line 40

def trace(message)
  puts message if @config.verbose
end

#update(file_name) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/postgres.rb', line 81

def update(file_name)
  puts "Executing #{file_name}" if @config.verbose
  ver = @config.version(file_name)
  begin
    trace 'BEGIN;'
    @connection.query('BEGIN;')
    file = File.open(file_name, 'r')
    script(file)
    file.close
    @connection.query("INSERT INTO migrations VALUES('#{ver}', now());")
    trace 'COMMIT;'
    @connection.query('COMMIT;')
  rescue SystemCallError => e
    trace e.message
    @connection.query('ROLLBACK;')
  rescue PG::Error => e
    trace e.message
    @connection.query('ROLLBACK;')
  end
end

#value(query) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/postgres.rb', line 57

def value(query)
  return '' unless @status
  begin
    result = @connection.query(query)
    return result.getvalue(0, 0).to_s
  rescue PG::Error => e
    trace e.message
    @status = false
    return ''
  end
end