grape-pagination 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -31,6 +31,7 @@ Which would result in a paginated collection and the following headers set:
31
31
 
32
32
  ```
33
33
  X-Total: 150
34
+ Link: <http://localhost:5000/api/v1/tweets?page=2&per_page=30>; rel="next"
34
35
  ```
35
36
 
36
37
  ## Contributing
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_dependency 'grape', '~> 0.3'
22
+ spec.add_dependency 'addressable'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.3'
24
25
  spec.add_development_dependency 'rspec'
@@ -1,4 +1,5 @@
1
1
  require 'grape'
2
+
2
3
  require 'grape/pagination/version'
3
4
 
4
5
  module Grape
@@ -7,6 +8,7 @@ module Grape
7
8
  autoload :Extensions, 'grape/pagination/extensions'
8
9
  autoload :Helpers, 'grape/pagination/helpers'
9
10
  autoload :Paginator, 'grape/pagination/paginator'
11
+ autoload :Link, 'grape/pagination/link'
10
12
 
11
13
  def self.configuration
12
14
  @configuration ||= Configuration.new
@@ -0,0 +1,29 @@
1
+ require 'addressable/uri'
2
+
3
+ module Grape::Pagination
4
+ class Link
5
+ attr_reader :url
6
+
7
+ def initialize(url)
8
+ @url = url
9
+ end
10
+
11
+ def next
12
+ uri.dup.tap { |uri| uri.query_values = uri.query_values.merge('page' => uri.query_values['page'].to_i + 1) }
13
+ end
14
+
15
+ def to_rfc5988
16
+ %w[next].map { |link| [__send__(link), link] }
17
+ .compact
18
+ .map { |(link, rel)| %(<#{link}>; rel="#{rel}") }
19
+ .join(', ')
20
+ end
21
+
22
+ private
23
+
24
+ def uri
25
+ @uri ||= Addressable::URI.parse(url)
26
+ end
27
+
28
+ end
29
+ end
@@ -21,6 +21,7 @@ module Grape::Pagination
21
21
 
22
22
  def paginate
23
23
  header TOTAL_HEADER, total
24
+ header LINK_HEADER, Link.new(request.url).to_rfc5988
24
25
  collection.paginate(page_params)
25
26
  end
26
27
 
@@ -28,14 +29,6 @@ module Grape::Pagination
28
29
 
29
30
  def_delegators :endpoint, :header, :params, :request
30
31
 
31
- def query_hash
32
- @query_hash ||= Rack::Utils.parse_nested_query(uri.query)
33
- end
34
-
35
- def uri
36
- @uri ||= URI.parse(request.url)
37
- end
38
-
39
32
  def page_params
40
33
  @page_params ||= params.slice(:page, :per_page).to_h.symbolize_keys
41
34
  end
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module Pagination
3
- VERSION = "0.0.1"
3
+ VERSION = '0.0.2'
4
4
  end
5
5
  end
@@ -7,8 +7,9 @@ describe Grape::Pagination::Paginator do
7
7
  subject(:paginator) { described_class.new endpoint, collection }
8
8
 
9
9
  describe '.paginate' do
10
- it 'sets the X-Total header' do
10
+ it 'sets the headers' do
11
11
  endpoint.should_receive(:header).with('X-Total', 4)
12
+ endpoint.should_receive(:header).with('Link', '<https://localhost:5000/api/v1/tweets?page=2&per_page=30>; rel="next"')
12
13
  paginator.paginate
13
14
  end
14
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-pagination
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: addressable
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: bundler
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +110,7 @@ files:
94
110
  - lib/grape/pagination/configuration.rb
95
111
  - lib/grape/pagination/extensions.rb
96
112
  - lib/grape/pagination/helpers.rb
113
+ - lib/grape/pagination/link.rb
97
114
  - lib/grape/pagination/paginator.rb
98
115
  - lib/grape/pagination/version.rb
99
116
  - spec/grape/pagination/paginator_spec.rb
@@ -113,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
130
  version: '0'
114
131
  segments:
115
132
  - 0
116
- hash: -2291269891516805911
133
+ hash: -2464773533401309584
117
134
  required_rubygems_version: !ruby/object:Gem::Requirement
118
135
  none: false
119
136
  requirements:
@@ -122,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
139
  version: '0'
123
140
  segments:
124
141
  - 0
125
- hash: -2291269891516805911
142
+ hash: -2464773533401309584
126
143
  requirements: []
127
144
  rubyforge_project:
128
145
  rubygems_version: 1.8.23