class TicketSharing::Request

Constants

CA_PATH
MAX_REDIRECTS

Public Class Methods

new(connection = TicketSharing.connection) click to toggle source
# File lib/ticket_sharing/request.rb, line 10
def initialize(connection = TicketSharing.connection)
  @connection = connection
end

Public Instance Methods

request(method, url, options = {}) click to toggle source
# File lib/ticket_sharing/request.rb, line 14
def request(method, url, options = {})
  raise ArgumentError, "Unsupported method: #{method.inspect}" unless %i(get post put delete).include?(method)

  response = send_request(method, url, options)
  follow_redirects!(method, response, options)
end

Private Instance Methods

configure_request(request, url, options) click to toggle source
# File lib/ticket_sharing/request.rb, line 47
def configure_request(request, url, options)
  uri = URI.parse(url)

  request.url url
  {
    'Accept'       => 'application/json',
    'Content-Type' => 'application/json'
  }.merge(options[:headers] || {}).each do |h, v|
    request.headers[h] = v
  end

  request.body = options[:body]
end
follow_redirects!(method, response, options) click to toggle source
# File lib/ticket_sharing/request.rb, line 61
def follow_redirects!(method, response, options)
  redirects = 0
  while (300..399).include?(response.status)
    if redirects >= MAX_REDIRECTS
      raise TicketSharing::TooManyRedirects
    else
      redirects += 1
    end
    response = send_request(method, response['Location'], options)
  end
  response
end
send_request(method, url, options) click to toggle source
# File lib/ticket_sharing/request.rb, line 23
def send_request(method, url, options)
  response = nil

  with_ssl_connection(options) do
    response = @connection.send(method) do |request|
      configure_request(request, url, options)
    end
  end

  response
end
with_ssl_connection(options) { || ... } click to toggle source
# File lib/ticket_sharing/request.rb, line 35
def with_ssl_connection(options)
  ssl_config = {}
  ssl_config[:ca_path] = CA_PATH if File.exist?(CA_PATH)
  ssl_config[:verify]  = false   if options[:ssl] && options[:ssl][:verify] == false

  old_configuration = @connection.instance_variable_get(:@ssl)
  @connection.instance_variable_set(:@ssl, ssl_config) unless ssl_config.empty?
  yield
ensure
  @connection.instance_variable_set(:@ssl, old_configuration)
end