Comparing changes

v0.1.5 v0.1.6
5 commits 5 files changed

Commits

64f0138 bump version. mo 2018-05-09 16:40:47
6f2a4d0 add tests for Api. mokha 2018-05-08 19:02:50
2e2fe94 fix rubocop errors. mokha 2018-05-08 18:56:05
9181791 create Net::Hippie::Api. mokha 2018-05-08 18:44:11
Changed files (5)
lib/net/hippie/api.rb
@@ -0,0 +1,27 @@
+module Net
+  module Hippie
+    # A no nonsense class to perform HTTP requests.
+    class Api
+      attr_reader :uri, :verify_mode
+
+      def initialize(url, verify_none: false)
+        @uri = URI.parse(url)
+        @verify_mode = OpenSSL::SSL::VERIFY_NONE if verify_none
+      end
+
+      def get
+        client.get(uri).body
+      end
+
+      def execute(request)
+        client.execute(uri, request)
+      end
+
+      private
+
+      def client
+        @client ||= Client.new(headers: {}, verify_mode: verify_mode)
+      end
+    end
+  end
+end
lib/net/hippie/client.rb
@@ -8,27 +8,25 @@ module Net
         'User-Agent' => "net/hippie #{Net::Hippie::VERSION}"
       }.freeze
 
+      attr_accessor :mapper
+
       def initialize(
         certificate: nil,
         headers: DEFAULT_HEADERS,
         key: nil,
-        mapper: JsonMapper.new,
-        passphrase: nil
+        passphrase: nil,
+        verify_mode: nil
       )
         @certificate = certificate
         @default_headers = headers
         @key = key
-        @mapper = mapper
+        @mapper = JsonMapper.new
         @passphrase = passphrase
+        @verify_mode = verify_mode
       end
 
       def execute(uri, request)
-        http_for(uri).request(request)
-      end
-
-      def get(uri, headers: {}, body: {})
-        request = request_for(Net::HTTP::Get, uri, headers: headers, body: body)
-        response = execute(uri, request)
+        response = http_for(normalize_uri(uri)).request(request)
         if block_given?
           yield request, response
         else
@@ -36,38 +34,33 @@ module Net
         end
       end
 
-      def post(uri, headers: {}, body: {})
+      def get(uri, headers: {}, body: {}, &block)
+        request = request_for(Net::HTTP::Get, uri, headers: headers, body: body)
+        execute(uri, request, &block)
+      end
+
+      def post(uri, headers: {}, body: {}, &block)
         type = Net::HTTP::Post
         request = request_for(type, uri, headers: headers, body: body)
-        response = execute(uri, request)
-        if block_given?
-          yield request, response
-        else
-          response
-        end
+        execute(uri, request, &block)
       end
 
-      def put(uri, headers: {}, body: {})
+      def put(uri, headers: {}, body: {}, &block)
         request = request_for(Net::HTTP::Put, uri, headers: headers, body: body)
-        response = execute(uri, request)
-        if block_given?
-          yield request, response
-        else
-          response
-        end
+        execute(uri, request, &block)
       end
 
       private
 
       attr_reader :default_headers
+      attr_reader :verify_mode
       attr_reader :certificate, :key, :passphrase
-      attr_reader :mapper
 
       def http_for(uri)
-        uri = normalize_uri(uri)
         http = Net::HTTP.new(uri.host, uri.port)
         http.read_timeout = 30
         http.use_ssl = uri.is_a?(URI::HTTPS)
+        http.verify_mode = verify_mode
         http.set_debug_output(Net::Hippie.logger)
         if certificate && key
           http.cert = OpenSSL::X509::Certificate.new(certificate) if certificate
lib/net/hippie/version.rb
@@ -1,5 +1,5 @@
 module Net
   module Hippie
-    VERSION = '0.1.5'.freeze
+    VERSION = '0.1.6'.freeze
   end
 end
lib/net/hippie.rb
@@ -6,6 +6,7 @@ require 'openssl'
 require 'net/hippie/version'
 require 'net/hippie/json_mapper'
 require 'net/hippie/client'
+require 'net/hippie/api'
 
 module Net
   # net/http for hippies.
test/net/api_test.rb
@@ -0,0 +1,23 @@
+require 'test_helper'
+
+class ApiTest < Minitest::Test
+  def test_get
+    VCR.use_cassette('get_breaches') do
+      subject = Net::Hippie::Api.new('https://haveibeenpwned.com/api/breaches')
+      response = subject.get
+      refute_nil response
+      assert_equal(283, JSON.parse(response).count)
+    end
+  end
+
+  def test_execute
+    VCR.use_cassette('get_breaches') do
+      subject = Net::Hippie::Api.new('https://haveibeenpwned.com/api/breaches')
+      request = Net::HTTP::Get.new('https://haveibeenpwned.com/api/breaches')
+      request['Range'] = 'bytes=0-511'
+      response = subject.execute(request)
+      refute_nil response
+      assert_equal(283, JSON.parse(response.body).count)
+    end
+  end
+end