racknga 0.9.3 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -12
  3. data/README.md +44 -0
  4. data/Rakefile +19 -272
  5. data/doc/text/{news.textile → news.md} +24 -7
  6. data/lib/racknga/access_log_parser.rb +1 -1
  7. data/lib/racknga/api-keys.rb +39 -0
  8. data/lib/racknga/cache_database.rb +2 -2
  9. data/lib/racknga/exception_mail_notifier.rb +18 -17
  10. data/lib/racknga/log_database.rb +1 -1
  11. data/lib/racknga/log_entry.rb +1 -1
  12. data/lib/racknga/middleware/auth/api-key.rb +95 -0
  13. data/lib/racknga/middleware/cache.rb +23 -11
  14. data/lib/racknga/middleware/deflater.rb +1 -1
  15. data/lib/racknga/middleware/exception_notifier.rb +1 -1
  16. data/lib/racknga/middleware/instance_name.rb +65 -12
  17. data/lib/racknga/middleware/jsonp.rb +26 -9
  18. data/lib/racknga/middleware/log.rb +1 -1
  19. data/lib/racknga/middleware/nginx_raw_uri.rb +1 -1
  20. data/lib/racknga/middleware/range.rb +4 -6
  21. data/lib/racknga/reverse_line_reader.rb +1 -1
  22. data/lib/racknga/utils.rb +1 -1
  23. data/lib/racknga/version.rb +3 -5
  24. data/lib/racknga.rb +2 -1
  25. data/munin/plugins/passenger_application_ +61 -47
  26. data/munin/plugins/passenger_status +64 -33
  27. data/test/racknga-test-utils.rb +2 -6
  28. data/test/run-test.rb +2 -5
  29. data/test/test-access-log-parser.rb +1 -1
  30. data/test/test-api-keys.rb +80 -0
  31. data/test/test-middleware-auth-api-key.rb +144 -0
  32. data/test/test-middleware-cache.rb +1 -1
  33. data/test/test-middleware-instance-name.rb +32 -10
  34. data/test/test-middleware-jsonp.rb +14 -2
  35. data/test/test-middleware-nginx-raw-uri.rb +1 -1
  36. data/test/test-middleware-range.rb +1 -1
  37. metadata +182 -157
  38. data/README.textile +0 -52
  39. data/lib/racknga/will_paginate.rb +0 -48
@@ -12,17 +12,31 @@
12
12
  #
13
13
  # You should have received a copy of the GNU Lesser General Public
14
14
  # License along with this library; if not, write to the Free Software
15
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
  class InstanceNameTest < Test::Unit::TestCase
18
18
  include RackngaTestUtils
19
19
 
20
+ DEFAULT_HEADER_NAME = "X-Responsed-By"
21
+
20
22
  def test_no_option
21
23
  footer_variables = extract_from_default_instance_name
22
24
 
23
25
  instance_name_options({}) do
24
26
  request
25
- assert_header("Proc #{default_footer(*footer_variables)}")
27
+ assert_equal("Proc #{default_footer(*footer_variables)}",
28
+ response_header(DEFAULT_HEADER_NAME))
29
+ end
30
+ end
31
+
32
+ def test_header_name
33
+ header_name = "X-header-name"
34
+ footer_variables = extract_from_default_instance_name
35
+
36
+ instance_name_options(:header_name => header_name) do
37
+ request
38
+ assert_equal("Proc #{default_footer(*footer_variables)}",
39
+ response_header(header_name))
26
40
  end
27
41
  end
28
42
 
@@ -32,8 +46,9 @@ class InstanceNameTest < Test::Unit::TestCase
32
46
 
33
47
  instance_name_options(:application_name => application_name) do
34
48
  request
35
- assert_header("#{application_name} " +
36
- "#{default_footer(*footer_variables)}")
49
+ assert_equal("#{application_name} " +
50
+ "#{default_footer(*footer_variables)}",
51
+ response_header(DEFAULT_HEADER_NAME))
37
52
  end
38
53
  end
39
54
 
@@ -45,8 +60,9 @@ class InstanceNameTest < Test::Unit::TestCase
45
60
  instance_name_options(:application_name => application_name,
46
61
  :version => version) do
47
62
  request
48
- assert_header("#{application_name} v#{version} " +
49
- "#{default_footer(*footer_variables)}")
63
+ assert_equal("#{application_name} v#{version} " +
64
+ "#{default_footer(*footer_variables)}",
65
+ response_header(DEFAULT_HEADER_NAME))
50
66
  end
51
67
  end
52
68
 
@@ -83,7 +99,10 @@ class InstanceNameTest < Test::Unit::TestCase
83
99
  end
84
100
 
85
101
  def default_footer(server, user, revision, branch, ruby)
86
- "(at #{revision} (#{branch})) on #{server} by #{user} with #{ruby}"
102
+ footer = ""
103
+ footer << "(at #{revision} (#{branch})) " if format_is_possible?(revision)
104
+ footer << "on #{server} by #{user} with #{ruby}"
105
+ footer
87
106
  end
88
107
 
89
108
  def create_minimal_application
@@ -103,8 +122,11 @@ class InstanceNameTest < Test::Unit::TestCase
103
122
  yield
104
123
  end
105
124
 
106
- def assert_header(expected_header)
107
- actual_header = page.response_headers["X-Responsed-By"]
108
- assert_equal(expected_header, actual_header)
125
+ def response_header(name)
126
+ page.response_headers[name]
127
+ end
128
+
129
+ def format_is_possible?(data)
130
+ data and (data.respond_to?(:to_s) and not data.to_s.empty?)
109
131
  end
110
132
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2010 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2010-2012 Kouhei Sutou <kou@clear-code.com>
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # You should have received a copy of the GNU Lesser General Public
14
14
  # License along with this library; if not, write to the Free Software
15
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
  class MiddlewareJSONPTest < Test::Unit::TestCase
18
18
  include RackngaTestUtils
@@ -76,6 +76,18 @@ class MiddlewareJSONPTest < Test::Unit::TestCase
76
76
  @environment[@cache_key_key])
77
77
  end
78
78
 
79
+ def test_jsonp_content_length
80
+ @update_environment = Proc.new do |environment|
81
+ environment["Content-Length"] = @body.bytesize
82
+ environment
83
+ end
84
+ visit("/?callback=jsonp_callback")
85
+ expected_response = "jsonp_callback(#{@body});"
86
+ assert_jsonp_response(expected_response)
87
+ assert_equal(expected_response.bytesize.to_s,
88
+ page.response_headers["Content-Length"])
89
+ end
90
+
79
91
  private
80
92
  def assert_jsonp_response(body)
81
93
  assert_equal({
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # You should have received a copy of the GNU Lesser General Public
14
14
  # License along with this library; if not, write to the Free Software
15
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
  class NginxRawURITest < Test::Unit::TestCase
18
18
  include RackngaTestUtils
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # You should have received a copy of the GNU Lesser General Public
14
14
  # License along with this library; if not, write to the Free Software
15
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
  module MiddlewareRangeTests
18
18
  include RackngaTestUtils
metadata CHANGED
@@ -1,155 +1,189 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: racknga
3
- version: !ruby/object:Gem::Version
4
- hash: 61
5
- prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 3
10
- version: 0.9.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.5
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Kouhei Sutou
14
- autorequire:
15
8
  bindir: bin
16
9
  cert_chain: []
17
-
18
- date: 2011-11-12 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
30
- name: rroonga
10
+ date: 2024-04-08 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
31
20
  prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: csv
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: net-smtp
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
32
47
  type: :runtime
33
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
- none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- hash: 3
41
- segments:
42
- - 0
43
- version: "0"
44
- name: rack
45
48
  prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rack
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
46
61
  type: :runtime
47
- requirement: *id002
48
- - !ruby/object:Gem::Dependency
49
- version_requirements: &id003 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
- version: "0"
58
- name: test-unit
59
62
  prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: bundler
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
60
75
  type: :development
61
- requirement: *id003
62
- - !ruby/object:Gem::Dependency
63
- version_requirements: &id004 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
72
- name: test-unit-notify
73
76
  prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: kramdown
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
74
89
  type: :development
75
- requirement: *id004
76
- - !ruby/object:Gem::Dependency
77
- version_requirements: &id005 !ruby/object:Gem::Requirement
78
- none: false
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- hash: 3
83
- segments:
84
- - 0
85
- version: "0"
86
- name: test-unit-capybara
87
90
  prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: packnga
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
88
103
  type: :development
89
- requirement: *id005
90
- - !ruby/object:Gem::Dependency
91
- version_requirements: &id006 !ruby/object:Gem::Requirement
92
- none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 3
97
- segments:
98
- - 0
99
- version: "0"
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
100
111
  name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
101
118
  prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rroonga
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
102
131
  type: :development
103
- requirement: *id006
104
- - !ruby/object:Gem::Dependency
105
- version_requirements: &id007 !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
112
- - 0
113
- version: "0"
114
- name: jeweler
115
132
  prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: test-unit
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
116
145
  type: :development
117
- requirement: *id007
118
- - !ruby/object:Gem::Dependency
119
- version_requirements: &id008 !ruby/object:Gem::Requirement
120
- none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
126
- - 0
127
- version: "0"
128
- name: yard
129
146
  prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: test-unit-capybara
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
130
159
  type: :development
131
- requirement: *id008
132
- description: Racknga is a Rack middlewares that uses rroonga features.
133
- email:
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ description: Racknga is a Rack middlewares that uses Rroonga features.
167
+ email:
134
168
  - kou@clear-code.com
135
169
  executables: []
136
-
137
170
  extensions: []
138
-
139
- extra_rdoc_files:
140
- - README.textile
141
- files:
171
+ extra_rdoc_files:
172
+ - README.md
173
+ files:
142
174
  - AUTHORS
143
175
  - Gemfile
144
- - README.textile
176
+ - README.md
145
177
  - Rakefile
146
- - doc/text//news.textile
178
+ - doc/text//news.md
147
179
  - lib/racknga.rb
148
180
  - lib/racknga/access_log_parser.rb
181
+ - lib/racknga/api-keys.rb
149
182
  - lib/racknga/cache_database.rb
150
183
  - lib/racknga/exception_mail_notifier.rb
151
184
  - lib/racknga/log_database.rb
152
185
  - lib/racknga/log_entry.rb
186
+ - lib/racknga/middleware/auth/api-key.rb
153
187
  - lib/racknga/middleware/cache.rb
154
188
  - lib/racknga/middleware/deflater.rb
155
189
  - lib/racknga/middleware/exception_notifier.rb
@@ -161,57 +195,48 @@ files:
161
195
  - lib/racknga/reverse_line_reader.rb
162
196
  - lib/racknga/utils.rb
163
197
  - lib/racknga/version.rb
164
- - lib/racknga/will_paginate.rb
165
198
  - license/lgpl-2.1.txt
166
199
  - munin/plugins/passenger_application_
167
200
  - munin/plugins/passenger_status
168
- - test/test-middleware-jsonp.rb
169
201
  - test/racknga-test-utils.rb
170
- - test/test-middleware-range.rb
171
- - test/test-middleware-nginx-raw-uri.rb
172
202
  - test/run-test.rb
173
- - test/test-middleware-instance-name.rb
174
- - test/test-middleware-cache.rb
175
203
  - test/test-access-log-parser.rb
176
- homepage: http://groonga.rubyforge.org/
177
- licenses:
204
+ - test/test-api-keys.rb
205
+ - test/test-middleware-auth-api-key.rb
206
+ - test/test-middleware-cache.rb
207
+ - test/test-middleware-instance-name.rb
208
+ - test/test-middleware-jsonp.rb
209
+ - test/test-middleware-nginx-raw-uri.rb
210
+ - test/test-middleware-range.rb
211
+ homepage: http://ranguba.org/
212
+ licenses:
178
213
  - LGPLv2.1 or later
179
- post_install_message:
214
+ metadata: {}
180
215
  rdoc_options: []
181
-
182
- require_paths:
216
+ require_paths:
183
217
  - lib
184
- required_ruby_version: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
218
+ required_ruby_version: !ruby/object:Gem::Requirement
219
+ requirements:
187
220
  - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
191
- - 0
192
- version: "0"
193
- required_rubygems_version: !ruby/object:Gem::Requirement
194
- none: false
195
- requirements:
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ required_rubygems_version: !ruby/object:Gem::Requirement
224
+ requirements:
196
225
  - - ">="
197
- - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
- version: "0"
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
202
228
  requirements: []
203
-
204
- rubyforge_project: groonga
205
- rubygems_version: 1.8.10
206
- signing_key:
207
- specification_version: 3
208
- summary: A Rack middleware collection for rroonga features.
209
- test_files:
210
- - test/test-middleware-jsonp.rb
229
+ rubygems_version: 3.6.0.dev
230
+ specification_version: 4
231
+ summary: A Rack middleware collection for Rroonga features.
232
+ test_files:
211
233
  - test/racknga-test-utils.rb
212
- - test/test-middleware-range.rb
213
- - test/test-middleware-nginx-raw-uri.rb
214
234
  - test/run-test.rb
215
- - test/test-middleware-instance-name.rb
216
- - test/test-middleware-cache.rb
217
235
  - test/test-access-log-parser.rb
236
+ - test/test-api-keys.rb
237
+ - test/test-middleware-auth-api-key.rb
238
+ - test/test-middleware-cache.rb
239
+ - test/test-middleware-instance-name.rb
240
+ - test/test-middleware-jsonp.rb
241
+ - test/test-middleware-nginx-raw-uri.rb
242
+ - test/test-middleware-range.rb
data/README.textile DELETED
@@ -1,52 +0,0 @@
1
- h1. README
2
-
3
- h2. Name
4
-
5
- racknga
6
-
7
- h2. Description
8
-
9
- Rack middlewares that use rroonga features and
10
- middlewares/utilities that don't use rroonga features.
11
-
12
- * "rroonga":http://groonga.rubyforge.org/
13
- * "Rack":http://rack.rubyforge.org/
14
-
15
- h2. Authors
16
-
17
- * Kouhei Sutou <kou@clear-code.com>
18
-
19
- h2. License
20
-
21
- LGPL 2.1 or later. See license/lgpl-2.1.txt for details.
22
-
23
- (Kouhei Sutou has a right to change the license
24
- including contributed patches.)
25
-
26
- h2. Dependencies
27
-
28
- * Ruby >= 1.9.1
29
- * rroonga
30
- * Rack
31
-
32
- h2. Suggested libraries
33
-
34
- * jpmobile
35
-
36
- h2. Install
37
-
38
- <pre>
39
- % sudo gem install racknga
40
- </pre>
41
-
42
- h2. Documents
43
-
44
- http://groonga.rubyforge.org/racknga/en/
45
-
46
- h2. Mailing list
47
-
48
- http://rubyforge.org/mailman/listinfo/groonga-users-en
49
-
50
- h2. Thanks
51
-
52
- * ...
@@ -1,48 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2010 SHIMODA Hiroshi <shimoda@clear-code.com>
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
-
19
- require "groonga"
20
-
21
- module Groonga
22
- # @deprecated since 0.9.2. Use Kaminari instead of will_paginate.
23
- module WillPaginateAPI
24
- def total_pages
25
- n_pages
26
- end
27
-
28
- def per_page
29
- n_records_in_page
30
- end
31
-
32
- def total_entries
33
- n_records
34
- end
35
-
36
- def out_of_bounds?
37
- current_page > total_pages
38
- end
39
-
40
- def offset
41
- (start_offset || 0) - 1
42
- end
43
- end
44
-
45
- module Pagination
46
- include WillPaginateAPI
47
- end
48
- end