summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormokha <mokha@cisco.com>2018-05-14 15:16:56 -0600
committermokha <mokha@cisco.com>2018-05-14 15:16:56 -0600
commita417b0f2a34582618c93740fd74ca1c620a39e54 (patch)
tree04b4922bf963a483a860b81052fbbdc3b450629a
parent64f0138cff42932a4374c178d1c23d0e7de97fcc (diff)
attempt to map body using content type header.
-rw-r--r--lib/net/hippie.rb2
-rw-r--r--lib/net/hippie/client.rb7
-rw-r--r--lib/net/hippie/content_type_mapper.rb12
-rw-r--r--lib/net/hippie/json_mapper.rb10
-rw-r--r--test/net/content_type_mapper_test.rb27
5 files changed, 44 insertions, 14 deletions
diff --git a/lib/net/hippie.rb b/lib/net/hippie.rb
index a02dbb4..6117512 100644
--- a/lib/net/hippie.rb
+++ b/lib/net/hippie.rb
@@ -4,7 +4,7 @@ require 'net/http'
require 'openssl'
require 'net/hippie/version'
-require 'net/hippie/json_mapper'
+require 'net/hippie/content_type_mapper'
require 'net/hippie/client'
require 'net/hippie/api'
diff --git a/lib/net/hippie/client.rb b/lib/net/hippie/client.rb
index b32c0f8..53f80d7 100644
--- a/lib/net/hippie/client.rb
+++ b/lib/net/hippie/client.rb
@@ -20,7 +20,7 @@ module Net
@certificate = certificate
@default_headers = headers
@key = key
- @mapper = JsonMapper.new
+ @mapper = ContentTypeMapper.new
@passphrase = passphrase
@verify_mode = verify_mode
end
@@ -70,8 +70,9 @@ module Net
end
def request_for(type, uri, headers: {}, body: {})
- type.new(uri, default_headers.merge(headers)).tap do |x|
- x.body = mapper.map_from(body) unless body.empty?
+ final_headers = default_headers.merge(headers)
+ type.new(uri, final_headers).tap do |x|
+ x.body = mapper.map_from(final_headers, body) unless body.empty?
end
end
diff --git a/lib/net/hippie/content_type_mapper.rb b/lib/net/hippie/content_type_mapper.rb
new file mode 100644
index 0000000..132ee27
--- /dev/null
+++ b/lib/net/hippie/content_type_mapper.rb
@@ -0,0 +1,12 @@
+module Net
+ module Hippie
+ # Converts a ruby hash into a JSON string
+ class ContentTypeMapper
+ def map_from(headers, body)
+ content_type = headers['Content-Type'] || ''
+ return JSON.generate(body) if content_type.include?("json")
+ body
+ end
+ end
+ end
+end
diff --git a/lib/net/hippie/json_mapper.rb b/lib/net/hippie/json_mapper.rb
deleted file mode 100644
index e04a545..0000000
--- a/lib/net/hippie/json_mapper.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module Net
- module Hippie
- # Converts a ruby hash into a JSON string
- class JsonMapper
- def map_from(hash)
- JSON.generate(hash)
- end
- end
- end
-end
diff --git a/test/net/content_type_mapper_test.rb b/test/net/content_type_mapper_test.rb
new file mode 100644
index 0000000..9599202
--- /dev/null
+++ b/test/net/content_type_mapper_test.rb
@@ -0,0 +1,27 @@
+require 'test_helper'
+
+class ContentTypeMapperTest < Minitest::Test
+ def test_returns_json
+ subject = Net::Hippie::ContentTypeMapper.new
+ headers = { 'Content-Type' => 'application/json' }
+ body = { message: 'something witty' }
+ result = subject.map_from(headers, body)
+ assert_equal JSON.generate(body), result
+ end
+
+ def test_returns_json_with_charset
+ subject = Net::Hippie::ContentTypeMapper.new
+ headers = { 'Content-Type' => 'application/json; charset=utf-8' }
+ body = { message: 'something witty' }
+ result = subject.map_from(headers, body)
+ assert_equal JSON.generate(body), result
+ end
+
+ def test_return_html
+ subject = Net::Hippie::ContentTypeMapper.new
+ headers = { 'Content-Type' => 'text/html' }
+ body = "<html></html>"
+ result = subject.map_from(headers, body)
+ assert_equal body, result
+ end
+end