Sha256: de9f88dacade799a68d07e3b71c1fde91ddca7d77f9e70596cd6aa3d16ed45c7

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

require 'net/https'
require 'uri'

module Apitizer
  module Connection
    module Adaptor
      class Standard
        def process(method, address, parameters = {}, headers = {})
          uri = URI(address)

          request = build_request(method, address, parameters)
          headers.each { |k, v| request[k] = v }

          http = Net::HTTP.new(uri.host, uri.port)
          http.use_ssl = true if address =~ /^https:/

          response = http.request(request)
          [ response.code.to_i, response.to_hash, Array(response.body) ]
        rescue NoMethodError
          raise
        rescue NameError
          raise Error, 'Invalid method'
        rescue SocketError
          raise Error, 'Connection failed'
        end

        private

        def build_request(method, address, parameters)
          klass = Net::HTTP.const_get(method.to_s.capitalize)

          return klass.new(address) if parameters.empty?

          parameters = Helper.build_query(parameters)

          if klass == Net::HTTP::Get
            request = klass.new([ address, parameters ].join('?'))
          else
            request = klass.new(address)
            request.body = parameters
            request['Content-Type'] = [
              'application/x-www-form-urlencoded',
              "charset=#{ parameters.encoding.to_s }"
            ].join('; ')
          end

          request
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apitizer-0.0.3 lib/apitizer/connection/adaptor/standard.rb