summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Hobson2013-12-26 11:57:57 -0800
committerZack Hobson2013-12-26 11:57:57 -0800
commit31dab9e4e892fa3f12e3659cd4b8fa42b52c999d (patch)
tree73864167ee88c785ad8b3e891e833cd7230a88a5
parentedce556e090c2ef2d6459d88d724ce4a05ce8725 (diff)
downloadhcl-31dab9e4e892fa3f12e3659cd4b8fa42b52c999d.tar.bz2
use yajl, test html unescape
-rw-r--r--hcl.gemspec2
-rw-r--r--lib/hcl/harvest_middleware.rb12
-rw-r--r--test/net_test.rb12
3 files changed, 19 insertions, 7 deletions
diff --git a/hcl.gemspec b/hcl.gemspec
index 29214ae..3f41b2f 100644
--- a/hcl.gemspec
+++ b/hcl.gemspec
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
s.add_runtime_dependency 'highline'
s.add_runtime_dependency 'faraday'
s.add_runtime_dependency 'faraday_middleware'
- s.add_runtime_dependency 'multi_json'
+ s.add_runtime_dependency 'yajl-ruby'
s.add_runtime_dependency 'escape_utils'
s.add_development_dependency 'rake'
s.add_development_dependency 'rubygems-tasks'
diff --git a/lib/hcl/harvest_middleware.rb b/lib/hcl/harvest_middleware.rb
index db9d50f..3e96a99 100644
--- a/lib/hcl/harvest_middleware.rb
+++ b/lib/hcl/harvest_middleware.rb
@@ -1,5 +1,5 @@
require 'faraday_middleware/response_middleware'
-require 'multi_json'
+require 'yajl'
require 'escape_utils'
class HCl::HarvestMiddleware < FaradayMiddleware::ResponseMiddleware
@@ -18,8 +18,8 @@ class HCl::HarvestMiddleware < FaradayMiddleware::ResponseMiddleware
case env[:status]
when 200..299
begin
- env[:body] = unescape(MultiJson.load(env[:body], symbolize_keys:true))
- rescue MultiJson::LoadError
+ env[:body] = deep_html_unescape(Yajl::Parser.parse(env[:body], symbolize_keys:true))
+ rescue Yajl::ParseError
env[:body]
end
when 300..399
@@ -34,11 +34,11 @@ class HCl::HarvestMiddleware < FaradayMiddleware::ResponseMiddleware
end
end
- def unescape obj
+ def deep_html_unescape obj
if obj.kind_of? Hash
- obj.inject({}){|o,(k,v)| o[k] = unescape(v);o}
+ obj.inject({}){|o,(k,v)| o.update(k => deep_html_unescape(v)) }
elsif obj.kind_of? Array
- obj.inject([]){|o,v| o << unescape(v);o}
+ obj.inject([]){|o,v| o << deep_html_unescape(v) }
else
EscapeUtils.unescape_html(obj.to_s)
end
diff --git a/test/net_test.rb b/test/net_test.rb
index c4e39e1..3eec454 100644
--- a/test/net_test.rb
+++ b/test/net_test.rb
@@ -18,6 +18,18 @@ class NetTest < HCl::TestCase
assert_equal true, HCl::Net.ssl
end
+ def test_http_deep_unescape
+ FakeWeb.register_uri(:get, "https://bob:secret@bobclock.harvestapp.com/foo",
+ :body => Yajl::Encoder.encode({
+ status:'gotten &amp; got!',
+ comparisons:['burrito &gt; taco', 'rain &lt; sun']
+ }))
+ body = HCl::Net.get 'foo'
+ assert_equal 'gotten & got!', body[:status]
+ assert_equal 'burrito > taco', body[:comparisons][0]
+ assert_equal 'rain < sun', body[:comparisons][1]
+ end
+
def test_http_get
FakeWeb.register_uri(:get, "https://bob:secret@bobclock.harvestapp.com/foo",
:body => 'gotten!'.inspect)