class Grocer::SSLServer

Attributes

port[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/grocer/ssl_server.rb, line 10
def initialize(options = {})
  options.extend Extensions::DeepSymbolizeKeys
  options = defaults.merge(options.deep_symbolize_keys)
  options.each { |k, v| send("#{k}=", v) }
end

Public Instance Methods

accept() { |socket| ... } click to toggle source
# File lib/grocer/ssl_server.rb, line 22
def accept
  while socket = ssl_socket.accept
    yield socket if block_given?
  end
end
close() click to toggle source
# File lib/grocer/ssl_server.rb, line 28
def close
  if @ssl_socket && !@ssl_socket.closed?
    begin
      @ssl_socket.shutdown
    rescue Errno::ENOTCONN
      # Some platforms raise this if the socket is not connected. Not sure
      # how to avoid it.
    end

    @ssl_socket.close
  end

  @ssl_socket = nil
  @socket = nil
end
defaults() click to toggle source
# File lib/grocer/ssl_server.rb, line 16
def defaults
  {
    port: 2195
  }
end

Private Instance Methods

context() click to toggle source
# File lib/grocer/ssl_server.rb, line 54
def context
  @context ||= OpenSSL::SSL::SSLContext.new.tap do |c|
    c.cert = OpenSSL::X509::Certificate.new(File.read(crt_path))
    c.key  = OpenSSL::PKey::RSA.new(File.read(key_path))
  end
end
crt_path() click to toggle source
# File lib/grocer/ssl_server.rb, line 61
def crt_path
  File.join(File.dirname(__FILE__), "test", "server.crt")
end
key_path() click to toggle source
# File lib/grocer/ssl_server.rb, line 65
def key_path
  File.join(File.dirname(__FILE__), "test", "server.key")
end
socket() click to toggle source
# File lib/grocer/ssl_server.rb, line 50
def socket
  @socket ||= TCPServer.new('127.0.0.1', port)
end
ssl_socket() click to toggle source
# File lib/grocer/ssl_server.rb, line 46
def ssl_socket
  @ssl_socket ||= OpenSSL::SSL::SSLServer.new(socket, context)
end