Sha256: c88ab01116ddf8397de2b3654d2dc8b55b011d77f51a139e2992b23c15fb972a

Contents?: true

Size: 1.18 KB

Versions: 5

Compression:

Stored size: 1.18 KB

Contents

require 'net/http'

module CurseClient
  class HTTP

    def self.get(uri, options = {}, &block)
      uri = create_uri(uri)
      request = Net::HTTP::Get.new(uri.request_uri)
      request.initialize_http_header(options[:headers]) if options[:headers]
      send_request(uri, request, &block)
    end

    def self.post(uri, body, options = {}, &block)
      uri = create_uri(uri)
      request = Net::HTTP::Post.new(uri.request_uri)
      request.initialize_http_header(options[:headers]) if options[:headers]
      request.body = parse_request_body(body, options[:format] || :json)
      send_request(uri, request, &block)
    end

    private

    def self.create_uri(uri)
      return uri if uri.is_a?(URI)
      URI.parse(uri)
    end

    def self.parse_request_body(body, format)
      case format
      when :json
        JSON.generate(body)
      else
        raise NotImplementedError, "Format #{format} is not implemented"
      end
    end

    def self.send_request(uri, request)
      Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
        return http.request(request) do |response|
          yield response if block_given?
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
curse_client-0.1.4 lib/curse_client/http.rb
curse_client-0.1.3 lib/curse_client/http.rb
curse_client-0.1.2 lib/curse_client/http.rb
curse_client-0.1.1 lib/curse_client/http.rb
curse_client-0.1.0 lib/curse_client/http.rb