From 3a59fb953b50f88b73d14031a5cc3216c37164de Mon Sep 17 00:00:00 2001 From: mo Date: Mon, 7 May 2018 13:47:34 -0600 Subject: add spec for get request. --- lib/net/hippie.rb | 15 ++++++++- lib/net/hippie/client.rb | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 lib/net/hippie/client.rb (limited to 'lib') diff --git a/lib/net/hippie.rb b/lib/net/hippie.rb index 18767f7..b2aeee0 100644 --- a/lib/net/hippie.rb +++ b/lib/net/hippie.rb @@ -1,7 +1,20 @@ +require "json" +require "logger" +require "net/http" +require "openssl" + require "net/hippie/version" +require "net/hippie/client" + module Net module Hippie - # Your code goes here... + def self.logger + @logger ||= Logger.new(STDOUT) + end + + def self.logger=(logger) + @logger = logger + end end end diff --git a/lib/net/hippie/client.rb b/lib/net/hippie/client.rb new file mode 100644 index 0000000..015e3ec --- /dev/null +++ b/lib/net/hippie/client.rb @@ -0,0 +1,82 @@ +module Net + module Hippie + class Client + DEFAULT_HEADERS = { + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + 'User-Agent' => "net/hippie #{Net::Hippie::VERSION}", + } + + def initialize(headers: DEFAULT_HEADERS, certificate: nil, key: nil) + @certificate = certificate + @default_headers = headers + @key = key + end + + def get(uri, headers: {}, body: {}) + request = get_for(uri, headers: headers, body: body) + response = http_for(uri).request(request) + if block_given? + yield request, response + else + response + end + end + + def post(uri, headers: {}, body: {}) + request = post_for(uri, headers: headers, body: body) + response = http_for(uri).request(request) + if block_given? + yield request, response + else + response + end + end + + def put(uri, headers: {}, body: {}) + request = put_for(uri, headers: headers, body: body) + response = http_for(uri).request(request) + if block_given? + yield request, response + else + response + end + end + + private + + attr_reader :default_headers, :certificate, :key + + def http_for(uri) + http = Net::HTTP.new(uri.host, uri.port) + http.read_timeout = 30 + http.use_ssl = true + http.set_debug_output(Net::Hippie.logger) + http.cert = OpenSSL::X509::Certificate.new(certificate) if certificate + http.key = OpenSSL::PKey::RSA.new(key) if key + http + end + + def post_for(uri, headers: {}, body: {}) + headers = default_headers.merge(headers) + Net::HTTP::Post.new(uri, headers).tap do |post| + post.body = JSON.generate(body) + end + end + + def put_for(uri, headers: {}, body: {}) + headers = default_headers.merge(headers) + Net::HTTP::Put.new(uri, headers).tap do |put| + put.body = JSON.generate(body) + end + end + + def get_for(uri, headers: {}, body: {}) + headers = default_headers.merge(headers) + Net::HTTP::Get.new(uri, headers).tap do |get| + get.body = JSON.generate(body) unless body.empty? + end + end + end + end +end -- cgit v1.2.3