addressable-rest 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/addressable/rest.rb +12 -0
- data/lib/addressable/rest/to_query.rb +83 -0
- data/lib/addressable/rest/version.rb +1 -1
- data/test/addressable/rest_test.rb +15 -3
- data/test/teststrap.rb +2 -0
- metadata +13 -12
data/lib/addressable/rest.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "addressable/rest/version"
|
2
|
+
require "addressable/rest/to_query" unless {}.respond_to?(:to_query)
|
2
3
|
require "addressable/uri"
|
3
4
|
require "net/http"
|
4
5
|
require "multi_json"
|
@@ -15,6 +16,17 @@ module Addressable
|
|
15
16
|
decode_options[:symbolize_keys] = true if options[:symbolize_keys]
|
16
17
|
MultiJson.decode(response.body, decode_options)
|
17
18
|
end
|
19
|
+
|
20
|
+
def post(data, options = {})
|
21
|
+
url = dup.normalize
|
22
|
+
response = Net::HTTP.start(url.host, url.port) do |request|
|
23
|
+
request.post(url.request_uri, data.to_query)
|
24
|
+
end
|
25
|
+
|
26
|
+
decode_options = {}
|
27
|
+
decode_options[:symbolize_keys] = true if options[:symbolize_keys]
|
28
|
+
MultiJson.decode(response.body, decode_options)
|
29
|
+
end
|
18
30
|
end
|
19
31
|
end
|
20
32
|
|
@@ -0,0 +1,83 @@
|
|
1
|
+
unless {}.respond_to?(:to_query)
|
2
|
+
class Object
|
3
|
+
# Alias of <tt>to_s</tt>.
|
4
|
+
def to_param
|
5
|
+
to_s
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class NilClass
|
10
|
+
def to_param
|
11
|
+
self
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class TrueClass
|
16
|
+
def to_param
|
17
|
+
self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class FalseClass
|
22
|
+
def to_param
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Array
|
28
|
+
# Calls <tt>to_param</tt> on all its elements and joins the result with
|
29
|
+
# slashes. This is used by <tt>url_for</tt> in Action Pack.
|
30
|
+
def to_param
|
31
|
+
collect { |e| e.to_param }.join '/'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Hash
|
36
|
+
# Returns a string representation of the receiver suitable for use as a URL
|
37
|
+
# query string:
|
38
|
+
#
|
39
|
+
# {:name => 'David', :nationality => 'Danish'}.to_param
|
40
|
+
# # => "name=David&nationality=Danish"
|
41
|
+
#
|
42
|
+
# An optional namespace can be passed to enclose the param names:
|
43
|
+
#
|
44
|
+
# {:name => 'David', :nationality => 'Danish'}.to_param('user')
|
45
|
+
# # => "user[name]=David&user[nationality]=Danish"
|
46
|
+
#
|
47
|
+
# The string pairs "key=value" that conform the query string
|
48
|
+
# are sorted lexicographically in ascending order.
|
49
|
+
#
|
50
|
+
# This method is also aliased as +to_query+.
|
51
|
+
def to_param(namespace = nil)
|
52
|
+
collect do |key, value|
|
53
|
+
value.to_query(namespace ? "#{namespace}[#{key}]" : key)
|
54
|
+
end.sort * '&'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class Object
|
59
|
+
# Converts an object into a string suitable for use as a URL query string, using the given <tt>key</tt> as the
|
60
|
+
# param name.
|
61
|
+
#
|
62
|
+
# Note: This method is defined as a default implementation for all Objects for Hash#to_query to work.
|
63
|
+
def to_query(key)
|
64
|
+
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
65
|
+
"#{CGI.escape(key.to_s)}=#{CGI.escape(to_param.to_s)}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Array
|
70
|
+
# Converts an array into a string suitable for use as a URL query string,
|
71
|
+
# using the given +key+ as the param name.
|
72
|
+
#
|
73
|
+
# ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
|
74
|
+
def to_query(key)
|
75
|
+
prefix = "#{key}[]"
|
76
|
+
collect { |value| value.to_query(prefix) }.join '&'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class Hash
|
81
|
+
alias_method :to_query, :to_param
|
82
|
+
end
|
83
|
+
end
|
@@ -1,18 +1,30 @@
|
|
1
1
|
require "teststrap"
|
2
2
|
|
3
3
|
context Addressable::Rest do
|
4
|
-
helper(:uri) { Addressable::URI.parse("http://example.com
|
4
|
+
helper(:uri) { Addressable::URI.parse("http://example.com") }
|
5
5
|
|
6
6
|
setup { uri }
|
7
7
|
asserts_topic.respond_to(:get)
|
8
|
+
asserts_topic.respond_to(:post)
|
8
9
|
|
9
10
|
context "#get" do
|
10
|
-
setup { uri.get }
|
11
|
+
setup { uri.join("/test_get").get }
|
11
12
|
asserts_topic.kind_of(Hash)
|
12
13
|
asserts("success key") { topic["success"] }.equals(true)
|
13
14
|
|
14
15
|
context "with :symbolize_keys as true" do
|
15
|
-
setup { uri.get(:symbolize_keys => true) }
|
16
|
+
setup { uri.join("/test_get").get(:symbolize_keys => true) }
|
17
|
+
asserts("success key") { topic[:success] }.equals(true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "#post" do
|
22
|
+
setup { uri.join("/test_post").post(:param => 1) }
|
23
|
+
asserts_topic.kind_of(Hash)
|
24
|
+
asserts("success key") { topic["success"] }.equals(true)
|
25
|
+
|
26
|
+
context "with :symbolize_keys as true" do
|
27
|
+
setup { uri.join("/test_post").post({ :param => 1 }, :symbolize_keys => true) }
|
16
28
|
asserts("success key") { topic[:success] }.equals(true)
|
17
29
|
end
|
18
30
|
end
|
data/test/teststrap.rb
CHANGED
@@ -4,4 +4,6 @@ require "yajl"
|
|
4
4
|
require "fakeweb"
|
5
5
|
require "riot"
|
6
6
|
|
7
|
+
FakeWeb.allow_net_connect = false
|
7
8
|
FakeWeb.register_uri(:get, "http://example.com/test_get", :body => "{\"success\":true}")
|
9
|
+
FakeWeb.register_uri(:post, "http://example.com/test_post", :body => "{\"success\":true}")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: addressable-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
16
|
-
requirement: &
|
16
|
+
requirement: &70315087611840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.2.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70315087611840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70315087609460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70315087609460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yajl-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &70315087608200 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.8.3
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70315087608200
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fakeweb
|
49
|
-
requirement: &
|
49
|
+
requirement: &70315087606200 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.3.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70315087606200
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: riot
|
60
|
-
requirement: &
|
60
|
+
requirement: &70315087619880 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 0.12.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70315087619880
|
69
69
|
description: A really simple HTTP client on top of Addressable::URI
|
70
70
|
email:
|
71
71
|
- me@rafaelss.com
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- Rakefile
|
80
80
|
- addressable-rest.gemspec
|
81
81
|
- lib/addressable/rest.rb
|
82
|
+
- lib/addressable/rest/to_query.rb
|
82
83
|
- lib/addressable/rest/version.rb
|
83
84
|
- test/addressable/rest_test.rb
|
84
85
|
- test/teststrap.rb
|