class Grocer::Connection

Attributes

certificate[R]
gateway[R]
passphrase[R]
port[R]
retries[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/grocer/connection.rb, line 8
def initialize(options = {})
  @certificate = options.fetch(:certificate) { nil }
  @passphrase = options.fetch(:passphrase) { nil }
  @gateway = options.fetch(:gateway) { fail NoGatewayError }
  @port = options.fetch(:port) { fail NoPortError }
  @retries = options.fetch(:retries) { 3 }
end

Public Instance Methods

connect() click to toggle source
# File lib/grocer/connection.rb, line 28
def connect
  ssl.connect unless ssl.connected?
end
read(size = nil, buf = nil) click to toggle source
# File lib/grocer/connection.rb, line 16
def read(size = nil, buf = nil)
  with_connection do
    ssl.read(size, buf)
  end
end
write(content) click to toggle source
# File lib/grocer/connection.rb, line 22
def write(content)
  with_connection do
    ssl.write(content)
  end
end

Private Instance Methods

build_connection() click to toggle source
# File lib/grocer/connection.rb, line 38
def build_connection
  Grocer::SSLConnection.new(certificate: certificate,
                            passphrase: passphrase,
                            gateway: gateway,
                            port: port)
end
destroy_connection() click to toggle source
# File lib/grocer/connection.rb, line 45
def destroy_connection
  return unless @ssl_connection

  @ssl_connection.disconnect rescue nil
  @ssl_connection = nil
end
ssl() click to toggle source
# File lib/grocer/connection.rb, line 34
def ssl
  @ssl_connection ||= build_connection
end
with_connection() { || ... } click to toggle source
# File lib/grocer/connection.rb, line 52
def with_connection
  attempts = 1
  begin
    connect
    yield
  rescue => e
    if e.class == OpenSSL::SSL::SSLError && e.message =~ /certificate expired/i
      e.extend(CertificateExpiredError)
      raise
    end

    raise unless attempts < retries

    destroy_connection
    attempts += 1
    retry
  end
end