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
data/grape-pagination.gemspec
CHANGED
data/lib/grape/pagination.rb
CHANGED
@@ -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
|
@@ -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
|
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.
|
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: -
|
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: -
|
142
|
+
hash: -2464773533401309584
|
126
143
|
requirements: []
|
127
144
|
rubyforge_project:
|
128
145
|
rubygems_version: 1.8.23
|