diff options
| -rw-r--r-- | hcl.gemspec | 2 | ||||
| -rw-r--r-- | lib/hcl/harvest_middleware.rb | 12 | ||||
| -rw-r--r-- | test/net_test.rb | 12 |
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 & got!', + comparisons:['burrito > taco', 'rain < 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) |
