summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormo <mo@mokhan.ca>2018-05-07 13:47:34 -0600
committermo <mo@mokhan.ca>2018-05-07 13:47:34 -0600
commit3a59fb953b50f88b73d14031a5cc3216c37164de (patch)
treeae84c6454f27fe6370eee6bd710c4d26550aed0e /lib
parentf6dc5b1a302351f2fbdc7b24131ec5124b61f61e (diff)
add spec for get request.
Diffstat (limited to 'lib')
-rw-r--r--lib/net/hippie.rb15
-rw-r--r--lib/net/hippie/client.rb82
2 files changed, 96 insertions, 1 deletions
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