Sha256: f12c7628fd37729ebb906f7dc4410c944bc83fde5e13dde87af737ace996ae28

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

# encoding: UTF-8
require 'uri'
require 'net/http'
require 'ease_http/utils'

module EaseHTTP
  class Connection
    def initialize(endpoint, options={})
      @endpoint = endpoint
      uri = URI(endpoint)
      # timeout = options.delete(:timeout) || 0.2

      @http = Net::HTTP.new(uri.host, uri.port)
      @http.use_ssl = uri.scheme == 'https'
      # @http.read_timeout = timeout
    end

    # path - path to request
    # options
    #   :headers
    #   :query
    def get(path, options={}, &block)
      uri = URI.join(@endpoint, path)
      headers = options.delete(:headers)
      query = options.delete(:query)

      if query
        uri.query = URI.encode_www_form(query)
      end

      request = Net::HTTP::Get.new uri.request_uri, headers
      @http.request request, &block
    end

    # path - path to request
    # options
    #   :headers
    #   :data
    def post(path, options={}, &block)
      headers = options.delete :headers
      data = options.delete :data
      content_type = (headers && headers['Content-Type']) || content_type(data)

      request = Net::HTTP::Post.new path, headers

      # convert hash data to array data
      data = data.inject([]) do |memo, (key, value)|
        if value.is_a?(File)
          memo << [key.to_s, value, { content_type: Utils.mime_type(value.path) }]
        else
          memo << [key.to_s, value]
        end
      end

      request.set_form data, content_type

      @http.request request, &block
    end

    private
      def content_type(data)
        data.any? { |key, value| value.is_a?(File) } ?
          'multipart/form-data' :
          'application/x-www-form-urlencoded'
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ease_http-0.2.0 lib/ease_http/connection.rb