Skip to content

Commit 59650ff

Browse files
committed
* Pull out pagination information from the 'Link' header.
* Shove the paginated url into the array as a singleton method (to be reworked...)
1 parent e683ebc commit 59650ff

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

lib/freeagent/client.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,29 @@ def access_token=(token)
5959
end
6060

6161
def get(path, params={})
62-
request(:get, "#{Client.site}#{path}", :params => params).parsed
62+
parse(request(:get, "#{Client.site}#{path}", :params => params))
6363
end
6464

6565
def post(path, data={})
66-
request(:post, "#{Client.site}#{path}", :data => data).parsed
66+
parse(request(:post, "#{Client.site}#{path}", :data => data))
6767
end
6868

6969
def put(path, data={})
70-
request(:put, "#{Client.site}#{path}", :data => data).parsed
70+
parse(request(:put, "#{Client.site}#{path}", :data => data))
7171
end
7272

7373
def delete(path, data={})
74-
request(:delete, "#{Client.site}#{path}", :data => data).parsed
74+
parse(request(:delete, "#{Client.site}#{path}", :data => data))
7575
end
7676

77+
def parse(request)
78+
request.parsed.tap do |hash|
79+
request.headers['Link'].scan(/<(https:.*?)>; rel='(prev|next|first|last)'/).each do |(url, rel)|
80+
hash[rel] = url
81+
end
82+
end
83+
end
84+
7785
private
7886

7987
def request(method, path, options = {})

lib/freeagent/resource.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,13 @@ def self.define_all
113113
def self.define_filter
114114
self.define_singleton_method(:filter) do |params|
115115
response = FreeAgent.client.get("#{endpoint[:plural]}/", params)
116-
response[endpoint[:plural]].collect{ |r| self.new(r) }
116+
array = response[endpoint[:plural]].collect{ |r| self.new(r) }
117+
response.slice('prev', 'next', 'first', 'last').each_pair do |key, value|
118+
array.define_singleton_method "#{key}_page" do
119+
value
120+
end
121+
end
122+
array
117123
end
118124
end
119125

0 commit comments

Comments
 (0)