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 +5 -0
- data/Manifest +0 -1
- data/httparty.gemspec +3 -3
- data/lib/httparty.rb +3 -1
- data/lib/httparty/parsers/json.rb +8 -1
- data/lib/httparty/request.rb +2 -0
- data/lib/httparty/version.rb +1 -1
- data/spec/hash_spec.rb +5 -0
- data/spec/httparty/parsers/json_spec.rb +10 -9
- data/spec/httparty/request_spec.rb +6 -0
- data/spec/httparty_spec.rb +5 -0
- metadata +2 -3
- data/spec/core_extensions_spec.rb +0 -30
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
data/httparty.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{httparty}
|
5
|
-
s.version = "0.3.
|
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-
|
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/
|
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!}
|
data/lib/httparty.rb
CHANGED
@@ -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
|
|
data/lib/httparty/request.rb
CHANGED
data/lib/httparty/version.rb
CHANGED
data/spec/hash_spec.rb
CHANGED
@@ -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}})
|
9
|
-
%({"returnTo":[1,"a"]})
|
10
|
-
%({"returnTo":[1,"\\"a\\",", "b"]})
|
11
|
-
%({a: "'", "b": "5,000"})
|
12
|
-
%({a: "a's, b's and c's", "b": "5,000"})
|
13
|
-
%({a: "2007-01-01"})
|
14
|
-
%({a: "2007-01-01 01:12:34 Z"})
|
15
|
-
# no time zone
|
16
|
-
%({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"
|
data/spec/httparty_spec.rb
CHANGED
@@ -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.
|
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-
|
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
|