api_pagination_headers 1.1.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ea795c955eb559b1674f3e3512dde05644be6b4
4
- data.tar.gz: e858bfccf5f408d91364daf0c09863ee6d6e0426
3
+ metadata.gz: 18140f8cc85e119d447bed481450005ae984883a
4
+ data.tar.gz: df38764d04880176f3b71e21b388725d0a2587da
5
5
  SHA512:
6
- metadata.gz: 8be7d78b0599c5d67a1bb821916e8aeec24ef75cc3879848a6019773ab0c43e35620b4685d5aca40c3d3102a0b42032834eac3cb02463dccdc4d258f85425918
7
- data.tar.gz: 32bcd099e63d6d79fd378c0040f3a57b74ef83db8a513e907f8b0fb8cb5fe5fe1b9b170bf6cdaa936999ca7dc254eae0e204b82124e497cf9176818c517915b0
6
+ metadata.gz: 207a5bbda68f0525df3a006f728285317b40b4a23a4d8a6cf18a179b5245131a646791532fc2e0d3da643aa7e4512ac9533401a8b18ae07458e638278c9c8db7
7
+ data.tar.gz: bcec9e9f6a401184c3b4b2d8d48fcdd8f8ddfc10137257b4f5fd04a272bed91a5bdc0c8ca8ea66e29d2ad0363b512e13ae45ef0f809251a1027d0299c0394bc6
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ language:
2
2
  - ruby
3
3
  install:
4
4
  - 'bundle install'
5
- - 'cd spec/dummy;rake db:test:prepare;cd ../../'
5
+ - 'cd spec/dummy;rake db:drop;rake db:create;rake db:schema:load;rake db:test:prepare;cd ../../'
6
6
  rvm:
7
7
  - 1.9.3
8
8
  - 2.0.0
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- api_pagination_headers (1.1.2)
4
+ api_pagination_headers (2.0.0)
5
5
  rails (~> 4.0)
6
- will_paginate (~> 3.0.5)
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -43,13 +42,16 @@ GEM
43
42
  railties (>= 3.0.0)
44
43
  hike (1.2.3)
45
44
  i18n (0.6.9)
45
+ kaminari (0.16.1)
46
+ actionpack (>= 3.0.0)
47
+ activesupport (>= 3.0.0)
46
48
  mail (2.5.4)
47
49
  mime-types (~> 1.16)
48
50
  treetop (~> 1.4.8)
49
51
  mime-types (1.25.1)
50
52
  minitest (4.7.5)
51
53
  multi_json (1.9.2)
52
- polyglot (0.3.4)
54
+ polyglot (0.3.5)
53
55
  rack (1.5.2)
54
56
  rack-test (0.6.2)
55
57
  rack (>= 1.0)
@@ -79,7 +81,7 @@ GEM
79
81
  rspec-core (~> 2.14.0)
80
82
  rspec-expectations (~> 2.14.0)
81
83
  rspec-mocks (~> 2.14.0)
82
- sprockets (2.12.0)
84
+ sprockets (2.12.2)
83
85
  hike (~> 1.2)
84
86
  multi_json (~> 1.0)
85
87
  rack (~> 1.0)
@@ -104,5 +106,7 @@ PLATFORMS
104
106
  DEPENDENCIES
105
107
  api_pagination_headers!
106
108
  factory_girl_rails
109
+ kaminari
107
110
  rspec-rails
108
111
  sqlite3
112
+ will_paginate
data/README.md CHANGED
@@ -1,29 +1,39 @@
1
1
  #api_pagination_headers [![Build Status](https://travis-ci.org/richardkall/api_pagination_headers.svg)](http://travis-ci.org/richardkall/api_pagination_headers) [![Dependency Status](https://gemnasium.com/richardkall/api_pagination_headers.png)](https://gemnasium.com/richardkall/api_pagination_headers)
2
2
 
3
- api_pagination_headers is a gem that adds pagination info to a `Link` response header. This is considered to be the [best practice](http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#pagination) for REST APIs and is currently used by [GitHub](http://developer.github.com/v3/#pagination). It also adds the total number of records into a `X-Total-Count` header.
3
+ api_pagination_headers is a gem that adds pagination info to a `Link` response header. This is considered to be the [best practice](http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#pagination) for REST APIs and is currently used by [GitHub](http://developer.github.com/v3/#pagination). It also adds the total number of records into a `Total-Count` header.
4
4
 
5
5
  Example:
6
6
 
7
7
  ```
8
8
  Link: <http://example.com/posts?page=2&per_page=10>; rel="next", <http://example.com/posts?page=2&per_page=10>; rel="last"
9
- X-Total-Count: 11
9
+ Total-Count: 11
10
10
  ```
11
11
 
12
12
  ##Installation
13
13
 
14
14
  Include in your Gemfile:
15
15
 
16
- ```
16
+ * Rails 4
17
+
18
+ ```ruby
17
19
  gem 'api_pagination_headers'
18
20
  ```
19
21
 
20
- Depending on [will_paginate](https://github.com/mislav/will_paginate) at the moment. Support for [rails-api](https://github.com/rails-api/rails-api) is built in.
22
+ * Rails 3.2
23
+
24
+ ```ruby
25
+ gem 'api_pagination_headers', branch: 'rails-3-2'
26
+ ```
27
+
28
+ Depending on [Kaminari](https://github.com/amatsuda/kaminari) or [will_paginate](https://github.com/mislav/will_paginate) at the moment. Support for [rails-api](https://github.com/rails-api/rails-api) is built in.
21
29
 
22
30
  ##Usage
23
31
 
24
32
  In the controller:
25
33
 
26
- ```
34
+ * Rails 4
35
+
36
+ ```ruby
27
37
  class PostsController < ApplicationController
28
38
  after_action only: [:index] { set_pagination_headers(:posts) }
29
39
 
@@ -34,5 +44,28 @@ class PostsController < ApplicationController
34
44
  end
35
45
  ```
36
46
 
47
+ * Rails 3.2
48
+
49
+ ```ruby
50
+ class PostsController < ApplicationController
51
+ after_filter only: [:index] { set_pagination_headers(:posts) }
52
+
53
+ def index
54
+ @posts = Post.paginate(per_page: params[:per_page], page: params[:page])
55
+ respond_with @posts
56
+ end
57
+ end
58
+ ```
59
+
60
+ ##Configuration
61
+
62
+ You can change the `Total-Count` header title by configuring the gem.
63
+
64
+ ```ruby
65
+ ApiPaginationHeaders.configure do |config|
66
+ config.total_count_header = 'X-Total-Count'
67
+ end
68
+ ```
69
+
37
70
  ##License
38
71
  Copyright © 2014 [Richard Käll](http://richardkall.se). Licensed under the MIT license.
@@ -16,9 +16,10 @@ Gem::Specification.new do |s|
16
16
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
17
17
 
18
18
  s.add_dependency 'rails', '~> 4.0'
19
- s.add_dependency 'will_paginate', '~> 3.0.5'
20
19
 
21
20
  s.add_development_dependency 'factory_girl_rails'
22
21
  s.add_development_dependency 'sqlite3'
23
22
  s.add_development_dependency 'rspec-rails'
23
+ s.add_development_dependency 'kaminari'
24
+ s.add_development_dependency 'will_paginate'
24
25
  end
@@ -1,3 +1,8 @@
1
+ require 'active_support/configurable'
2
+
3
+ require 'api_pagination_headers/version'
4
+ require 'api_pagination_headers/config'
5
+
1
6
  module ApiPaginationHeaders
2
7
  protected
3
8
 
@@ -7,14 +12,20 @@ module ApiPaginationHeaders
7
12
  links = create_links(pages, scope)
8
13
 
9
14
  headers['Link'] = links.join(', ') unless links.empty?
10
- headers['X-Total-Count'] = "#{scope.total_entries}"
15
+ headers[ApiPaginationHeaders.config.total_count_header] = defined?(Kaminari) ? "#{scope.total_count}" : "#{scope.total_entries}"
11
16
  end
12
17
 
13
18
  private
14
19
 
15
20
  def create_links(pages, scope)
16
21
  url_without_params = request.url.split('?').first
17
- per_page = params[:per_page] ? params[:per_page].to_i : scope.per_page
22
+
23
+ if params[:per_page]
24
+ per_page = params[:per_page].to_i
25
+ else
26
+ per_page = defined?(Kaminari) ? scope.default_per_page : scope.per_page
27
+ end
28
+
18
29
  links = []
19
30
  pages.each do |key, value|
20
31
  new_params = request.query_parameters.merge({ page: value, per_page: per_page })
@@ -0,0 +1,24 @@
1
+ require 'active_support/configurable'
2
+
3
+ module ApiPaginationHeaders
4
+ # Configures global settings for ApiPaginationHeaders
5
+ # ApiPaginationHeaders.configure do |config|
6
+ # config.total_count_header = 'X-Total-Count'
7
+ # end
8
+ def self.configure(&block)
9
+ yield @config ||= ApiPaginationHeaders::Configuration.new
10
+ end
11
+
12
+ # Global settings for ApiPaginationHeaders
13
+ def self.config
14
+ @config ||= ApiPaginationHeaders::Configuration.new
15
+ end
16
+
17
+ class Configuration #:nodoc:
18
+ include ActiveSupport::Configurable
19
+
20
+ TOTAL_COUNT_HEADER = 'Total-Count'
21
+
22
+ config_accessor(:total_count_header) { TOTAL_COUNT_HEADER }
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module ApiPaginationHeaders
2
- VERSION = '1.1.2'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -9,9 +9,9 @@ describe PostsController, '#index' do
9
9
  expect(response.headers).not_to include('Link')
10
10
  end
11
11
 
12
- it 'responds with X-Total-Count header' do
12
+ it 'responds with Total-Count header' do
13
13
  get :index, format: :json
14
- expect(response.headers['X-Total-Count']).to eq('1')
14
+ expect(response.headers['Total-Count']).to eq('1')
15
15
  end
16
16
  end
17
17
 
@@ -24,9 +24,9 @@ describe PostsController, '#index' do
24
24
  expect(response.headers['Link']).to eq("<#{posts_url(page: 2, per_page: 1, format: :json)}>; rel=\"next\", <#{posts_url(page: 2, per_page: 1, format: :json)}>; rel=\"last\"")
25
25
  end
26
26
 
27
- it 'responds with X-Total-Count header' do
27
+ it 'responds with Total-Count header' do
28
28
  get :index, format: :json
29
- expect(response.headers['X-Total-Count']).to eq('2')
29
+ expect(response.headers['Total-Count']).to eq('2')
30
30
  end
31
31
  end
32
32
 
@@ -36,9 +36,9 @@ describe PostsController, '#index' do
36
36
  expect(response.headers['Link']).to eq("<#{posts_url(page: 1, per_page: 1, format: :json)}>; rel=\"first\", <#{posts_url(page: 1, per_page: 1, format: :json)}>; rel=\"prev\"")
37
37
  end
38
38
 
39
- it 'responds with X-Total-Count header' do
39
+ it 'responds with Total-Count header' do
40
40
  get :index, format: :json
41
- expect(response.headers['X-Total-Count']).to eq('2')
41
+ expect(response.headers['Total-Count']).to eq('2')
42
42
  end
43
43
  end
44
44
  end
@@ -52,9 +52,9 @@ describe PostsController, '#index' do
52
52
  expect(response.headers['Link']).to eq("<#{posts_url(page: 2, per_page: 1, format: :json)}>; rel=\"next\", <#{posts_url(page: 3, per_page: 1, format: :json)}>; rel=\"last\"")
53
53
  end
54
54
 
55
- it 'responds with X-Total-Count header' do
55
+ it 'responds with Total-Count header' do
56
56
  get :index, format: :json
57
- expect(response.headers['X-Total-Count']).to eq('3')
57
+ expect(response.headers['Total-Count']).to eq('3')
58
58
  end
59
59
  end
60
60
 
@@ -64,9 +64,9 @@ describe PostsController, '#index' do
64
64
  expect(response.headers['Link']).to eq("<#{posts_url(page: 1, per_page: 1, format: :json)}>; rel=\"first\", <#{posts_url(page: 1, per_page: 1, format: :json)}>; rel=\"prev\", <#{posts_url(page: 3, per_page: 1, format: :json)}>; rel=\"next\", <#{posts_url(page: 3, per_page: 1, format: :json)}>; rel=\"last\"")
65
65
  end
66
66
 
67
- it 'responds with X-Total-Count header' do
67
+ it 'responds with Total-Count header' do
68
68
  get :index, format: :json
69
- expect(response.headers['X-Total-Count']).to eq('3')
69
+ expect(response.headers['Total-Count']).to eq('3')
70
70
  end
71
71
  end
72
72
 
@@ -76,9 +76,9 @@ describe PostsController, '#index' do
76
76
  expect(response.headers['Link']).to eq("<#{posts_url(page: 1, per_page: 1, format: :json)}>; rel=\"first\", <#{posts_url(page: 2, per_page: 1, format: :json)}>; rel=\"prev\"")
77
77
  end
78
78
 
79
- it 'responds with X-Total-Count header' do
79
+ it 'responds with Total-Count header' do
80
80
  get :index, format: :json
81
- expect(response.headers['X-Total-Count']).to eq('3')
81
+ expect(response.headers['Total-Count']).to eq('3')
82
82
  end
83
83
  end
84
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_pagination_headers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Käll
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-06 00:00:00.000000000 Z
11
+ date: 2014-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -25,21 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: will_paginate
28
+ name: factory_girl_rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.5
34
- type: :runtime
33
+ version: '0'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.5
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: factory_girl_rails
42
+ name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: sqlite3
56
+ name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec-rails
70
+ name: kaminari
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: will_paginate
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -96,6 +110,7 @@ files:
96
110
  - Rakefile
97
111
  - api_pagination_headers.gemspec
98
112
  - lib/api_pagination_headers.rb
113
+ - lib/api_pagination_headers/config.rb
99
114
  - lib/api_pagination_headers/version.rb
100
115
  - spec/controllers/comments_controller_spec.rb
101
116
  - spec/controllers/posts_controller_spec.rb
@@ -144,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
159
  version: '0'
145
160
  requirements: []
146
161
  rubyforge_project:
147
- rubygems_version: 2.2.2
162
+ rubygems_version: 2.4.2
148
163
  signing_key:
149
164
  specification_version: 4
150
165
  summary: Link header pagination for APIs