grape-pagination 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/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