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