httparty 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of httparty might be problematic. Click here for more details.

data/History CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.3.1 2009-02-10
2
+ * 1 minor fix, 1 minor enhancement
3
+ * Fixed unescaping umlauts (siebertm)
4
+ * Added yaml response parsing (Miha Filej)
5
+
1
6
  == 0.3.0 2009-01-31
2
7
  * 1 major enhancement, 1 bug fix
3
8
  * JSON gem no longer a requirement. It was conflicting with rails json stuff so I just stole ActiveSupport's json decoding and bundled it with HTTParty.
data/Manifest CHANGED
@@ -35,7 +35,6 @@ MIT-LICENSE
35
35
  Rakefile
36
36
  README
37
37
  setup.rb
38
- spec/core_extensions_spec.rb
39
38
  spec/fixtures/delicious.xml
40
39
  spec/fixtures/empty.xml
41
40
  spec/fixtures/google.html
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{httparty}
5
- s.version = "0.3.0"
5
+ s.version = "0.3.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["John Nunemaker"]
9
- s.date = %q{2009-01-31}
9
+ s.date = %q{2009-02-10}
10
10
  s.default_executable = %q{httparty}
11
11
  s.description = %q{Makes http fun! Also, makes consuming restful web services dead easy.}
12
12
  s.email = %q{nunemaker@gmail.com}
13
13
  s.executables = ["httparty"]
14
14
  s.extra_rdoc_files = ["bin/httparty", "lib/core_extensions.rb", "lib/httparty/cookie_hash.rb", "lib/httparty/exceptions.rb", "lib/httparty/module_inheritable_attributes.rb", "lib/httparty/parsers/json.rb", "lib/httparty/parsers/xml.rb", "lib/httparty/parsers.rb", "lib/httparty/request.rb", "lib/httparty/response.rb", "lib/httparty/version.rb", "lib/httparty.rb", "README"]
15
- s.files = ["bin/httparty", "cucumber.yml", "examples/aaws.rb", "examples/basic.rb", "examples/delicious.rb", "examples/google.rb", "examples/rubyurl.rb", "examples/twitter.rb", "examples/whoismyrep.rb", "features/basic_authentication.feature", "features/command_line.feature", "features/deals_with_http_error_codes.feature", "features/handles_multiple_formats.feature", "features/steps/env.rb", "features/steps/httparty_response_steps.rb", "features/steps/httparty_steps.rb", "features/steps/mongrel_helper.rb", "features/steps/remote_service_steps.rb", "features/supports_redirection.feature", "History", "httparty.gemspec", "lib/core_extensions.rb", "lib/httparty/cookie_hash.rb", "lib/httparty/exceptions.rb", "lib/httparty/module_inheritable_attributes.rb", "lib/httparty/parsers/json.rb", "lib/httparty/parsers/xml.rb", "lib/httparty/parsers.rb", "lib/httparty/request.rb", "lib/httparty/response.rb", "lib/httparty/version.rb", "lib/httparty.rb", "Manifest", "MIT-LICENSE", "Rakefile", "README", "setup.rb", "spec/core_extensions_spec.rb", "spec/fixtures/delicious.xml", "spec/fixtures/empty.xml", "spec/fixtures/google.html", "spec/fixtures/twitter.json", "spec/fixtures/twitter.xml", "spec/fixtures/undefined_method_add_node_for_nil.xml", "spec/hash_spec.rb", "spec/httparty/cookie_hash_spec.rb", "spec/httparty/parsers/json_spec.rb", "spec/httparty/parsers/xml_spec.rb", "spec/httparty/request_spec.rb", "spec/httparty/response_spec.rb", "spec/httparty_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/string_spec.rb", "website/css/common.css", "website/index.html"]
15
+ s.files = ["bin/httparty", "cucumber.yml", "examples/aaws.rb", "examples/basic.rb", "examples/delicious.rb", "examples/google.rb", "examples/rubyurl.rb", "examples/twitter.rb", "examples/whoismyrep.rb", "features/basic_authentication.feature", "features/command_line.feature", "features/deals_with_http_error_codes.feature", "features/handles_multiple_formats.feature", "features/steps/env.rb", "features/steps/httparty_response_steps.rb", "features/steps/httparty_steps.rb", "features/steps/mongrel_helper.rb", "features/steps/remote_service_steps.rb", "features/supports_redirection.feature", "History", "httparty.gemspec", "lib/core_extensions.rb", "lib/httparty/cookie_hash.rb", "lib/httparty/exceptions.rb", "lib/httparty/module_inheritable_attributes.rb", "lib/httparty/parsers/json.rb", "lib/httparty/parsers/xml.rb", "lib/httparty/parsers.rb", "lib/httparty/request.rb", "lib/httparty/response.rb", "lib/httparty/version.rb", "lib/httparty.rb", "Manifest", "MIT-LICENSE", "Rakefile", "README", "setup.rb", "spec/fixtures/delicious.xml", "spec/fixtures/empty.xml", "spec/fixtures/google.html", "spec/fixtures/twitter.json", "spec/fixtures/twitter.xml", "spec/fixtures/undefined_method_add_node_for_nil.xml", "spec/hash_spec.rb", "spec/httparty/cookie_hash_spec.rb", "spec/httparty/parsers/json_spec.rb", "spec/httparty/parsers/xml_spec.rb", "spec/httparty/request_spec.rb", "spec/httparty/response_spec.rb", "spec/httparty_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/string_spec.rb", "website/css/common.css", "website/index.html"]
16
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://httparty.rubyforge.org}
18
18
  s.post_install_message = %q{When you HTTParty, you must party hard!}
@@ -14,7 +14,9 @@ module HTTParty
14
14
  'text/json' => :json,
15
15
  'application/javascript' => :json,
16
16
  'text/javascript' => :json,
17
- 'text/html' => :html
17
+ 'text/html' => :html,
18
+ 'application/x-yaml' => :yaml,
19
+ 'text/yaml' => :yaml
18
20
  } unless defined?(AllowedFormats)
19
21
 
20
22
  def self.included(base)
@@ -13,12 +13,19 @@ module HTTParty
13
13
  end
14
14
 
15
15
  def self.decode(json)
16
- YAML.load(convert_json_to_yaml(json))
16
+ YAML.load(unescape(convert_json_to_yaml(json)))
17
17
  rescue ArgumentError => e
18
18
  raise ParseError, "Invalid JSON string"
19
19
  end
20
20
 
21
21
  protected
22
+
23
+ def self.unescape(str)
24
+ str.gsub(/\\u([0-9a-f]{4})/) {
25
+ [$1.hex].pack("U")
26
+ }
27
+ end
28
+
22
29
  # matches YAML-formatted dates
23
30
  DATE_REGEX = /^\d{4}-\d{2}-\d{2}|\d{4}-\d{1,2}-\d{1,2}[ \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?)?$/
24
31
 
@@ -110,6 +110,8 @@ module HTTParty
110
110
  HTTParty::Parsers::XML.parse(body)
111
111
  when :json
112
112
  HTTParty::Parsers::JSON.decode(body)
113
+ when :yaml
114
+ YAML::load(body)
113
115
  else
114
116
  body
115
117
  end
@@ -1,3 +1,3 @@
1
1
  module HTTParty #:nodoc:
2
- Version = '0.3.0'
2
+ Version = '0.3.1'
3
3
  end
@@ -41,4 +41,9 @@ describe Hash, 'to_params' do
41
41
  it 'should not leave a trailing &' do
42
42
  { :name => 'Bob', :address => { :street => '111 Ruby Ave.', :city => 'Ruby Central', :phones => ['111-111-1111', '222-222-2222'] } }.to_params.should_not match(/&$/)
43
43
  end
44
+
45
+ it 'should URL encode unsafe characters' do
46
+ {:q => "?&\" +"}.to_params.should == "q=%3F%26%22%20%2B"
47
+ end
48
+
44
49
  end
@@ -2,18 +2,19 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
2
 
3
3
  describe HTTParty::Parsers::JSON do
4
4
  TESTS = {
5
+ %q({"data": "G\u00fcnter"}) => {"data" => "Günter"},
5
6
  %q({"returnTo":{"\/categories":"\/"}}) => {"returnTo" => {"/categories" => "/"}},
6
7
  %q({returnTo:{"\/categories":"\/"}}) => {"returnTo" => {"/categories" => "/"}},
7
8
  %q({"return\\"To\\":":{"\/categories":"\/"}}) => {"return\"To\":" => {"/categories" => "/"}},
8
- %q({"returnTo":{"\/categories":1}}) => {"returnTo" => {"/categories" => 1}},
9
- %({"returnTo":[1,"a"]}) => {"returnTo" => [1, "a"]},
10
- %({"returnTo":[1,"\\"a\\",", "b"]}) => {"returnTo" => [1, "\"a\",", "b"]},
11
- %({a: "'", "b": "5,000"}) => {"a" => "'", "b" => "5,000"},
12
- %({a: "a's, b's and c's", "b": "5,000"}) => {"a" => "a's, b's and c's", "b" => "5,000"},
13
- %({a: "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
14
- %({a: "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
15
- # no time zone
16
- %({a: "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
9
+ %q({"returnTo":{"\/categories":1}}) => {"returnTo" => {"/categories" => 1}},
10
+ %({"returnTo":[1,"a"]}) => {"returnTo" => [1, "a"]},
11
+ %({"returnTo":[1,"\\"a\\",", "b"]}) => {"returnTo" => [1, "\"a\",", "b"]},
12
+ %({a: "'", "b": "5,000"}) => {"a" => "'", "b" => "5,000"},
13
+ %({a: "a's, b's and c's", "b": "5,000"}) => {"a" => "a's, b's and c's", "b" => "5,000"},
14
+ %({a: "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
15
+ %({a: "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
16
+ # no time zone
17
+ %({a: "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
17
18
  %([]) => [],
18
19
  %({}) => {},
19
20
  %(1) => 1,
@@ -94,6 +94,12 @@ describe HTTParty::Request do
94
94
  @request.send(:parse_response, json).should == {'books' => {'book' => {'id' => '1234', 'name' => 'Foo Bar!'}}}
95
95
  end
96
96
 
97
+ it 'should handle yaml automatically' do
98
+ yaml = "books: \n book: \n name: Foo Bar!\n id: \"1234\"\n"
99
+ @request.options[:format] = :yaml
100
+ @request.send(:parse_response, yaml).should == {'books' => {'book' => {'id' => '1234', 'name' => 'Foo Bar!'}}}
101
+ end
102
+
97
103
  it "should include any HTTP headers in the returned response" do
98
104
  @request.options[:format] = :html
99
105
  response = stub_response "Content"
@@ -144,6 +144,11 @@ describe HTTParty do
144
144
  @klass.default_options[:format].should == :json
145
145
  end
146
146
 
147
+ it "should allow yaml" do
148
+ @klass.format :yaml
149
+ @klass.default_options[:format].should == :yaml
150
+ end
151
+
147
152
  it 'should not allow funky format' do
148
153
  lambda do
149
154
  @klass.format :foobar
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-31 00:00:00 -05:00
12
+ date: 2009-02-10 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -80,7 +80,6 @@ files:
80
80
  - Rakefile
81
81
  - README
82
82
  - setup.rb
83
- - spec/core_extensions_spec.rb
84
83
  - spec/fixtures/delicious.xml
85
84
  - spec/fixtures/empty.xml
86
85
  - spec/fixtures/google.html
@@ -1,30 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- describe "Core Extensions" do
4
- describe Hash do
5
- describe "#to_params" do
6
- def should_be_same_params(query_string, expected)
7
- query_string.split(/&/).sort.should == expected.split(/&/).sort
8
- end
9
-
10
- it "should encode characters in URL parameters" do
11
- {:q => "?&\" +"}.to_params.should == "q=%3F%26%22%20%2B"
12
- end
13
-
14
- it "should handle multiple parameters" do
15
- should_be_same_params({:q1 => "p1", :q2 => "p2"}.to_params, "q1=p1&q2=p2")
16
- end
17
-
18
- it "should handle nested hashes like rails does" do
19
- should_be_same_params({
20
- :name => "Bob",
21
- :address => {
22
- :street => '111 Ruby Ave.',
23
- :city => 'Ruby Central',
24
- :phones => ['111-111-1111', '222-222-2222']
25
- }
26
- }.to_params, "name=Bob&address[city]=Ruby%20Central&address[phones][]=111-111-1111&address[phones][]=222-222-2222&address[street]=111%20Ruby%20Ave.")
27
- end
28
- end
29
- end
30
- end