sawyer 0.0.1 → 0.0.2
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/sawyer/agent.rb +7 -1
- data/lib/sawyer/relation.rb +10 -5
- data/lib/sawyer.rb +1 -1
- data/sawyer.gemspec +1 -1
- data/test/relation_test.rb +5 -0
- metadata +1 -1
data/lib/sawyer/agent.rb
CHANGED
@@ -42,7 +42,7 @@ module Sawyer
|
|
42
42
|
end
|
43
43
|
|
44
44
|
options ||= {}
|
45
|
-
url =
|
45
|
+
url = expand_url(url, options[:uri])
|
46
46
|
res = @conn.send method, url do |req|
|
47
47
|
req.body = encode_body(data) if data
|
48
48
|
if params = options[:query]
|
@@ -74,6 +74,12 @@ module Sawyer
|
|
74
74
|
Yajl.load str, :symbolize_keys => true
|
75
75
|
end
|
76
76
|
|
77
|
+
def expand_url(url, options = nil)
|
78
|
+
tpl = url.respond_to?(:expand) ? url : URITemplate.new(url.to_s)
|
79
|
+
expand = tpl.method(:expand)
|
80
|
+
options ? expand.call(options) : expand.call
|
81
|
+
end
|
82
|
+
|
77
83
|
def inspect
|
78
84
|
%(<#{self.class} #{@endpoint}>)
|
79
85
|
end
|
data/lib/sawyer/relation.rb
CHANGED
@@ -46,7 +46,7 @@ module Sawyer
|
|
46
46
|
|
47
47
|
attr_reader :agent,
|
48
48
|
:name,
|
49
|
-
:
|
49
|
+
:href_template,
|
50
50
|
:method,
|
51
51
|
:available_methods
|
52
52
|
|
@@ -93,8 +93,8 @@ module Sawyer
|
|
93
93
|
# method - The Symbol HTTP method. Default: :get
|
94
94
|
def initialize(agent, name, href, method = nil)
|
95
95
|
@agent = agent
|
96
|
-
@name
|
97
|
-
@
|
96
|
+
@name = name.to_sym
|
97
|
+
@href_template = URITemplate.new(href.to_s)
|
98
98
|
|
99
99
|
methods = nil
|
100
100
|
|
@@ -224,6 +224,11 @@ module Sawyer
|
|
224
224
|
call data, opt
|
225
225
|
end
|
226
226
|
|
227
|
+
def href(options = nil)
|
228
|
+
method = @href_template.method(:expand)
|
229
|
+
options ? method.call(options) : method.call
|
230
|
+
end
|
231
|
+
|
227
232
|
# Public: Makes an API request with the curent Relation.
|
228
233
|
#
|
229
234
|
# data - The Optional Hash or Resource body to be sent. :get or :head
|
@@ -242,11 +247,11 @@ module Sawyer
|
|
242
247
|
raise ArgumentError, "method #{m.inspect} is not available: #{@available_methods.to_a.inspect}"
|
243
248
|
end
|
244
249
|
|
245
|
-
@agent.call m || @method, @
|
250
|
+
@agent.call m || @method, @href_template, data, options
|
246
251
|
end
|
247
252
|
|
248
253
|
def inspect
|
249
|
-
%(#<#{self.class}: #{@name}: #{@method} #{@
|
254
|
+
%(#<#{self.class}: #{@name}: #{@method} #{@href_template}>)
|
250
255
|
end
|
251
256
|
end
|
252
257
|
end
|
data/lib/sawyer.rb
CHANGED
data/sawyer.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'sawyer'
|
16
|
-
s.version = '0.0.
|
16
|
+
s.version = '0.0.2'
|
17
17
|
s.date = '2012-09-25'
|
18
18
|
s.rubyforge_project = 'sawyer'
|
19
19
|
|
data/test/relation_test.rb
CHANGED
@@ -25,6 +25,7 @@ module Sawyer
|
|
25
25
|
assert_equal '/comments', rel.href
|
26
26
|
assert_equal :get, rel.method
|
27
27
|
assert_equal [:get, :post], rel.available_methods.to_a
|
28
|
+
assert_kind_of URITemplate, rel.href_template
|
28
29
|
end
|
29
30
|
|
30
31
|
def test_builds_rels_from_hash_index
|
@@ -41,6 +42,7 @@ module Sawyer
|
|
41
42
|
assert_equal '/users/1', rel.href
|
42
43
|
assert_equal :get, rel.method
|
43
44
|
assert_equal [:get], rel.available_methods.to_a
|
45
|
+
assert_kind_of URITemplate, rel.href_template
|
44
46
|
end
|
45
47
|
|
46
48
|
def test_builds_rels_from_nil
|
@@ -101,6 +103,9 @@ module Sawyer
|
|
101
103
|
|
102
104
|
rel = Sawyer::Relation.new agent, :repo, "{/user,repo}{?a,b}"
|
103
105
|
|
106
|
+
assert_equal '', rel.href
|
107
|
+
assert_equal '/octocat', rel.href(:user => :octocat)
|
108
|
+
|
104
109
|
assert_equal 404, rel.get.status
|
105
110
|
assert_equal 200, rel.get(:uri => {'user' => 'octocat', 'repo' => 'hello', 'a' => 1, 'b' => 2}).status
|
106
111
|
end
|