Class: EventSource::Postgres::Session

Inherits:
Object
  • Object
show all
Includes:
Log::Dependency
Defined in:
lib/event_source/postgres/session.rb

Defined Under Namespace

Modules: LogText

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#connectionObject

Returns the value of attribute connection.



14
15
16
# File 'lib/event_source/postgres/session.rb', line 14

def connection
  @connection
end

Class Method Details

.build(settings: nil) ⇒ Object



16
17
18
19
20
21
# File 'lib/event_source/postgres/session.rb', line 16

def self.build(settings: nil)
  new.tap do |instance|
    settings ||= Settings.instance
    settings.set(instance)
  end
end

.build_connection(instance) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/event_source/postgres/session.rb', line 48

def self.build_connection(instance)
  settings = instance.settings
  logger.trace { "Building new connection to database (Settings: #{LogText.settings(settings).inspect})" }

  connection = PG::Connection.open(settings)
  connection.type_map_for_results = PG::BasicTypeMapForResults.new(connection)

  logger.trace { "Built new connection to database (Settings: #{LogText.settings(settings).inspect})" }

  connection
end

.configure(receiver, session: nil, attr_name: nil) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/event_source/postgres/session.rb', line 23

def self.configure(receiver, session: nil, attr_name: nil)
  attr_name ||= :session

  instance = session || build
  receiver.public_send "#{attr_name}=", instance
  instance
end

.loggerObject



111
112
113
# File 'lib/event_source/postgres/session.rb', line 111

def self.logger
  @logger ||= Log.get self
end

.settingsObject



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

def self.settings
  Settings.names
end

Instance Method Details

#closeObject



65
66
67
68
# File 'lib/event_source/postgres/session.rb', line 65

def close
  connection.close
  connection = nil
end

#connectObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/event_source/postgres/session.rb', line 31

def connect
  logger.trace { "Connecting to database" }

  if connected?
    logger.debug { "Already connected. A new connection will not be built." }
    return
  end

  logger.debug { "Not connected. A new connection will be built." }
  connection = self.class.build_connection(self)
  self.connection = connection

  logger.debug { "Connected to database" }

  connection
end

#connected?Boolean Also known as: open?

Returns:

  • (Boolean)


60
61
62
# File 'lib/event_source/postgres/session.rb', line 60

def connected?
  !connection.nil? && connection.status == PG::CONNECTION_OK
end

#execute(statement, params = nil) ⇒ Object



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

def execute(statement, params=nil)
  logger.trace { "Executing statement" }
  logger.trace(tag: :data) { statement }
  logger.trace(tag: :data) { params.pretty_inspect }

  unless connected?
    connect
  end

  if params.nil?
    connection.exec(statement).tap do
      logger.debug { "Executed statement" }
    end
  else
    connection.exec_params(statement, params).tap do
      logger.debug { "Executed statement with params" }
    end
  end
end

#resetObject



70
71
72
# File 'lib/event_source/postgres/session.rb', line 70

def reset
  connection.reset
end

#settingsObject



74
75
76
77
78
79
80
81
# File 'lib/event_source/postgres/session.rb', line 74

def settings
  settings = {}
  self.class.settings.each do |s|
    val = public_send(s)
    settings[s] = val unless val.nil?
  end
  settings
end

#transaction(&blk) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/event_source/postgres/session.rb', line 103

def transaction(&blk)
  unless connected?
    connect
  end

  connection.transaction(&blk)
end