From 022db415c261e6f048e857ee878f4f7162d0e80e Mon Sep 17 00:00:00 2001 From: Amro Mousa Date: Tue, 6 Dec 2011 10:30:55 -0500 Subject: [PATCH] remove addressable since current version doesn't fix encoding issue. temporarily monkeypatch HTTParty until new Addressable is released. --- Gemfile | 1 - lib/gibbon.rb | 40 ++++++++++++++++++++++++++++++++++++---- test/test_gibbon.rb | 5 +---- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 3f15515..4cd71ae 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,6 @@ gem "json", "> 1.4.0" gem "httparty", "> 0.6.0" gem "activesupport", ">= 2.3.14" gem "rdoc" -gem "addressable" group :development, :test do gem "shoulda", ">= 0" diff --git a/lib/gibbon.rb b/lib/gibbon.rb index 51dd522..f8cfd31 100644 --- a/lib/gibbon.rb +++ b/lib/gibbon.rb @@ -2,7 +2,6 @@ require 'httparty' require 'json' require 'cgi' -require 'addressable/uri' class Gibbon include HTTParty @@ -84,9 +83,7 @@ def export_api_url def call(method, params = {}) api_url = export_api_url + method + "/" - uri = Addressable::URI.new - uri.query_values = @default_params.merge(params) - response = self.class.post(api_url, :body => uri.query, :timeout => @timeout) + response = self.class.post(api_url, :body => params, :timeout => @timeout) lines = response.body.lines if @throws_exceptions @@ -97,3 +94,38 @@ def call(method, params = {}) lines end end + +module HTTParty + module HashConversions + # @param key The key for the param. + # @param value The value for the param. + # + # @return This key value pair as a param + # + # @example normalize_param(:name, "Bob Jones") #=> "name=Bob%20Jones&" + def self.normalize_param(key, value) + param = '' + stack = [] + + if value.is_a?(Array) + param << Hash[*(0...value.length).to_a.zip(value).flatten].map {|i,element| normalize_param("#{key}[#{i}]", element)}.join + elsif value.is_a?(Hash) + stack << [key,value] + else + param << "#{key}=#{URI.encode(value.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}&" + end + + stack.each do |parent, hash| + hash.each do |key, value| + if value.is_a?(Hash) + stack << ["#{parent}[#{key}]", value] + else + param << normalize_param("#{parent}[#{key}]", value) + end + end + end + + param + end + end +end diff --git a/test/test_gibbon.rb b/test/test_gibbon.rb index 689824a..1bb634d 100644 --- a/test/test_gibbon.rb +++ b/test/test_gibbon.rb @@ -1,7 +1,6 @@ require 'helper' require 'cgi' require 'ruby-debug' -require 'addressable/uri' class TestGibbon < Test::Unit::TestCase @@ -161,9 +160,7 @@ class TestGibbon < Test::Unit::TestCase @api_key = "TESTKEY-us2" @gibbon = GibbonExport.new(@api_key) - uri = Addressable::URI.new - uri.query_values = @body - params = {:body => uri.query, :timeout => nil} + params = {:body => @body, :timeout => nil} url = @url.gsub('us1', 'us2') + "sayHello/" GibbonExport.expects(:post).with(url, params).returns(@returns)