diff options
| author | mo <mo@mokhan.ca> | 2018-05-07 13:47:34 -0600 |
|---|---|---|
| committer | mo <mo@mokhan.ca> | 2018-05-07 13:47:34 -0600 |
| commit | 3a59fb953b50f88b73d14031a5cc3216c37164de (patch) | |
| tree | ae84c6454f27fe6370eee6bd710c4d26550aed0e /lib | |
| parent | f6dc5b1a302351f2fbdc7b24131ec5124b61f61e (diff) | |
add spec for get request.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/net/hippie.rb | 15 | ||||
| -rw-r--r-- | lib/net/hippie/client.rb | 82 |
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 |
