ramaze 0.1.3 → 0.1.4

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.
Files changed (149) hide show
  1. data/bin/ramaze +58 -26
  2. data/doc/AUTHORS +2 -0
  3. data/doc/CHANGELOG +401 -0
  4. data/doc/README +14 -9
  5. data/doc/README.html +737 -0
  6. data/doc/TODO +14 -14
  7. data/doc/changes.txt +401 -0
  8. data/doc/changes.xml +401 -0
  9. data/doc/meta/announcement.txt +28 -15
  10. data/doc/meta/configuration.txt +3 -3
  11. data/doc/meta/internals.txt +2 -2
  12. data/doc/meta/users.kml +62 -0
  13. data/doc/readme_chunks/examples.txt +1 -1
  14. data/doc/readme_chunks/features.txt +13 -8
  15. data/doc/tutorial/todolist.html +2 -2
  16. data/doc/tutorial/todolist.mkd +2 -2
  17. data/examples/blog/README +3 -0
  18. data/examples/blog/spec/blog.rb +101 -0
  19. data/examples/blog/{main.rb → start.rb} +0 -0
  20. data/examples/caching.rb +16 -5
  21. data/examples/layout.rb +41 -0
  22. data/examples/templates/template_amrita2.rb +1 -1
  23. data/examples/templates/template_erubis.rb +1 -1
  24. data/examples/templates/template_ezamar.rb +1 -1
  25. data/examples/templates/template_haml.rb +1 -1
  26. data/examples/templates/template_liquid.rb +1 -1
  27. data/examples/templates/template_markaby.rb +1 -1
  28. data/examples/templates/template_remarkably.rb +1 -1
  29. data/examples/todolist/README +1 -0
  30. data/{spec/examples → examples/todolist/spec}/todolist.rb +3 -3
  31. data/examples/todolist/{main.rb → start.rb} +0 -0
  32. data/examples/whywiki/{main.rb → start.rb} +0 -0
  33. data/examples/wiktacular/README +2 -0
  34. data/examples/wiktacular/spec/wiktacular.rb +146 -0
  35. data/examples/wiktacular/src/controller.rb +11 -0
  36. data/examples/wiktacular/src/model.rb +5 -1
  37. data/examples/wiktacular/{main.rb → start.rb} +0 -1
  38. data/examples/wiktacular/template/edit.xhtml +1 -2
  39. data/examples/wiktacular/template/html_layout.xhtml +27 -0
  40. data/examples/wiktacular/template/index.xhtml +8 -10
  41. data/examples/wiktacular/template/new.xhtml +1 -2
  42. data/lib/proto/{main.rb → start.rb} +0 -0
  43. data/lib/proto/template/index.xhtml +1 -1
  44. data/lib/ramaze/action/render.rb +58 -4
  45. data/lib/ramaze/action.rb +20 -0
  46. data/lib/ramaze/adapter/cgi.rb +7 -4
  47. data/lib/ramaze/adapter/fcgi.rb +6 -4
  48. data/lib/ramaze/adapter/mongrel.rb +4 -0
  49. data/lib/ramaze/adapter/webrick.rb +20 -9
  50. data/lib/ramaze/adapter.rb +3 -1
  51. data/lib/ramaze/cache/memcached.rb +2 -26
  52. data/lib/ramaze/cache.rb +8 -4
  53. data/lib/ramaze/controller/resolve.rb +26 -8
  54. data/lib/ramaze/controller.rb +44 -7
  55. data/lib/ramaze/dispatcher/action.rb +5 -1
  56. data/lib/ramaze/dispatcher/directory.rb +115 -0
  57. data/lib/ramaze/dispatcher/error.rb +19 -5
  58. data/lib/ramaze/dispatcher/file.rb +2 -2
  59. data/lib/ramaze/dispatcher.rb +52 -39
  60. data/lib/ramaze/global/dsl.rb +3 -2
  61. data/lib/ramaze/global/globalstruct.rb +26 -4
  62. data/lib/ramaze/global.rb +20 -11
  63. data/lib/ramaze/helper/aspect.rb +29 -11
  64. data/lib/ramaze/helper/auth.rb +2 -2
  65. data/lib/ramaze/helper/cache.rb +2 -0
  66. data/lib/ramaze/helper/identity.rb +21 -6
  67. data/lib/ramaze/helper/link.rb +1 -1
  68. data/lib/ramaze/helper/pager.rb +158 -100
  69. data/lib/ramaze/helper/partial.rb +22 -0
  70. data/lib/ramaze/helper/redirect.rb +1 -2
  71. data/lib/ramaze/helper/stack.rb +1 -1
  72. data/lib/ramaze/inform/informer.rb +20 -0
  73. data/lib/ramaze/inform/syslog.rb +5 -0
  74. data/lib/ramaze/snippets/kernel/__dir__.rb +21 -0
  75. data/lib/ramaze/snippets/kernel/aquire.rb +22 -12
  76. data/lib/ramaze/snippets/numeric/human_readable_filesize_format.rb +33 -0
  77. data/lib/ramaze/snippets/ramaze/caller_lines.rb +1 -1
  78. data/lib/ramaze/snippets/struct/values_at.rb +11 -4
  79. data/lib/ramaze/sourcereload.rb +29 -1
  80. data/{spec → lib/ramaze/spec}/helper/context.rb +0 -0
  81. data/{spec → lib/ramaze/spec}/helper/layout.rb +1 -1
  82. data/{spec → lib/ramaze/spec}/helper/minimal.rb +0 -0
  83. data/{spec → lib/ramaze/spec}/helper/mock_http.rb +0 -0
  84. data/{spec → lib/ramaze/spec}/helper/requester.rb +0 -0
  85. data/{spec → lib/ramaze/spec}/helper/simple_http.rb +0 -0
  86. data/{spec → lib/ramaze/spec}/helper/wrap.rb +0 -0
  87. data/lib/ramaze/spec/helper.rb +60 -0
  88. data/lib/ramaze/store/default.rb +3 -0
  89. data/lib/ramaze/template/ezamar/render_partial.rb +3 -0
  90. data/lib/ramaze/template/sass.rb +45 -0
  91. data/lib/ramaze/template.rb +1 -1
  92. data/lib/ramaze/tool/create.rb +5 -5
  93. data/lib/ramaze/tool/localize.rb +26 -5
  94. data/lib/ramaze/tool/mime.rb +7 -0
  95. data/lib/ramaze/trinity/response.rb +15 -0
  96. data/lib/ramaze/trinity/session.rb +1 -1
  97. data/lib/ramaze/version.rb +1 -1
  98. data/lib/ramaze.rb +5 -0
  99. data/rake_tasks/conf.rake +4 -4
  100. data/rake_tasks/maintaince.rake +12 -7
  101. data/rake_tasks/spec.rake +7 -4
  102. data/spec/examples/caching.rb +6 -8
  103. data/spec/helper.rb +3 -60
  104. data/spec/ramaze/action/basics.rb +17 -0
  105. data/spec/ramaze/action/cache.rb +28 -0
  106. data/spec/ramaze/action/layout.rb +110 -0
  107. data/spec/ramaze/action/render.rb +14 -0
  108. data/spec/ramaze/action/template/bar.xhtml +1 -0
  109. data/spec/ramaze/action/template/other_wrapper.xhtml +1 -0
  110. data/spec/ramaze/action/template/single_wrapper.xhtml +1 -0
  111. data/spec/ramaze/controller/template/edit/content.xhtml +1 -0
  112. data/spec/ramaze/controller/template/edit.xhtml +1 -0
  113. data/spec/ramaze/controller/template_resolving.rb +2 -2
  114. data/spec/ramaze/dispatcher/directory.rb +53 -0
  115. data/spec/ramaze/dispatcher/file.rb +0 -3
  116. data/spec/ramaze/error.rb +17 -2
  117. data/spec/ramaze/helper/aspect.rb +14 -20
  118. data/spec/ramaze/helper/pager.rb +83 -1
  119. data/spec/ramaze/helper/partial.rb +1 -1
  120. data/spec/ramaze/helper/template/test_template.xhtml +1 -0
  121. data/spec/ramaze/inform/informer.rb +37 -5
  122. data/spec/ramaze/localize.rb +1 -1
  123. data/spec/ramaze/template/haml.rb +5 -5
  124. data/spec/ramaze/template/sass/file.css.sass +5 -0
  125. data/spec/ramaze/template/sass.rb +46 -0
  126. data/spec/ramaze/template.rb +1 -1
  127. data/spec/ramaze/trinity/session.rb +27 -0
  128. data/spec/snippets/kernel/__dir__.rb +8 -0
  129. data/spec/snippets/kernel/aquire.rb +71 -0
  130. data/spec/snippets/kernel/constant.rb +27 -0
  131. data/spec/snippets/numeric/human_readable_filesize_format.rb +11 -0
  132. data/spec/snippets/ramaze/caller_info.rb +39 -0
  133. data/spec/snippets/ramaze/caller_lines.rb +27 -0
  134. data/spec/snippets/string/DIVIDE.rb +18 -0
  135. data/spec/snippets/string/camel_case.rb +25 -0
  136. data/spec/snippets/string/color.rb +11 -0
  137. data/spec/snippets/string/snake_case.rb +17 -0
  138. data/spec/snippets/struct/fill.rb +27 -0
  139. data/spec/snippets/struct/values_at.rb +39 -0
  140. metadata +71 -31
  141. data/examples/todolist/todolist.db +0 -5
  142. data/examples/wiktacular/src/page.rb +0 -66
  143. data/lib/ramaze/helper/feed.rb +0 -135
  144. data/lib/ramaze/helper/form.rb +0 -204
  145. data/lib/ramaze/snippets/openstruct/temp.rb +0 -13
  146. data/lib/ramaze/store/yaml.rb +0 -170
  147. data/spec/ramaze/helper/feed.rb +0 -127
  148. data/spec/ramaze/helper/form.rb +0 -146
  149. data/spec/ramaze/store/yaml.rb +0 -76
@@ -8,7 +8,7 @@ module Ramaze
8
8
  # A really, really, totally stupid way to do authentication. It has no
9
9
  # roles and only a single password without usernames.
10
10
  #
11
- # It is intended to be a simple way to protect various partions of a page
11
+ # It is intended to be a simple way to protect various portions of a page
12
12
  # when you start working on it. Also it is a nice way to see how you could
13
13
  # implement your own authentication.
14
14
 
@@ -100,7 +100,7 @@ module Ramaze
100
100
  #
101
101
  # # The method to be called.
102
102
  # trait :auth_table => :auth_table
103
- # trait :auth_tagle => 'auth_table'
103
+ # trait :auth_table => 'auth_table'
104
104
  #
105
105
  # # Lambda that will be called upon demand
106
106
  # trait :auth_table => lambda{ {'manveru' => Digest::SHA1.hexdigest 'password'} }
@@ -7,6 +7,8 @@ module Ramaze
7
7
  # smaller amounts of data.
8
8
 
9
9
  module CacheHelper
10
+
11
+ # Create the Cache.value_cache on inclusion if it doesn't exist yet.
10
12
  def self.included(klass)
11
13
  Cache.add(:value_cache) unless Cache::CACHES.has_key?(:value_cache)
12
14
  end
@@ -7,27 +7,34 @@ require 'openid'
7
7
  module Ramaze
8
8
 
9
9
  openid_store_file = File.join(Dir.tmpdir, 'openid-store')
10
+
11
+ # Constant for storing meta-information persistent
10
12
  OpenIDStore = OpenID::FilesystemStore.new(openid_store_file)
11
13
 
12
14
  # This is called Identity to avoid collisions with the original openid.rb
15
+ # It provides a nice and simple way to provide and control access over the
16
+ # OpenID authentication model.
13
17
 
14
18
  module IdentityHelper
15
- def self.included(klass)
16
- klass.send(:helper, :flash)
17
- end
18
19
 
20
+ # Simple form for use or overwriting.
21
+ # Has to provide the same functionality when overwritten or directly
22
+ # embedded into a page.
19
23
  def openid_login_form
20
24
  %{
21
- <form method="GET" action="#{R(self, :openid_begin)}">
25
+ <form method="GET" action="#{Rs(:openid_begin)}">
22
26
  Identity URL: <input type="text" name="url" />
23
27
  <input type="submit" />
24
28
  </form>
25
29
  }
26
30
  end
27
31
 
32
+ # We land here from the openid_login_form and if we can find a matching
33
+ # OpenID server we redirect the user to it, the browser will return to
34
+ # openid_complete when the authentication is complete.
28
35
  def openid_begin
29
36
  url = request['url']
30
- redirect_referrer if url.nil? or url.empty?
37
+ redirect_referrer if url.to_s.empty?
31
38
  session[:openid_entry] = request.referrer
32
39
 
33
40
  openid_request = openid_consumer.begin(url)
@@ -38,13 +45,20 @@ module Ramaze
38
45
  redirect_referrer
39
46
  when OpenID::SUCCESS
40
47
  root = "http://#{request.http_host}/"
41
- return_to = root[0..-2] + R(self, :openid_complete)
48
+ return_to = root[0..-2] + Rs(:openid_complete)
42
49
  redirect_url = openid_request.redirect_url(root, return_to)
43
50
 
44
51
  redirect(redirect_url)
45
52
  end
46
53
  end
47
54
 
55
+ # After having authenticated at the OpenID server browsers are redirected
56
+ # back here and on success we set the session[:openid_identity] and a little
57
+ # default flash message. Then we redirect to wherever session[:openid_entry]
58
+ # points us to, which was set on openid_begin to the referrer
59
+ #
60
+ # TODO:
61
+ # - maybe using StackHelper, but this is a really minimal overlap?
48
62
  def openid_complete
49
63
  openid_response = openid_consumer.complete(request.params)
50
64
 
@@ -63,6 +77,7 @@ module Ramaze
63
77
 
64
78
  private
65
79
 
80
+ # Fetch/Create a OpenID::Consumer for current session.
66
81
  def openid_consumer
67
82
  OpenID::Consumer.new(session, Ramaze::OpenIDStore)
68
83
  end
@@ -4,7 +4,7 @@
4
4
  module Ramaze
5
5
  # LinkHelper is included into the Controller by default
6
6
  #
7
- # Usage is pretty much shown in test/tc_helper and the rdocs below.
7
+ # Usage is shown in spec/ramaze/helper/link.rb and the rdocs below.
8
8
 
9
9
  module LinkHelper
10
10
 
@@ -1,3 +1,5 @@
1
+ module Ramaze
2
+
1
3
  # The BSD License
2
4
  #
3
5
  # Copyright (c) 2004-2007, George K. Moschovitis. (http://www.gmosx.com)
@@ -31,17 +33,53 @@
31
33
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
34
  #
33
35
 
34
- module Ramaze
35
-
36
36
  # Displays a collection of entitities in multiple pages.
37
37
  #
38
38
  # === Design
39
39
  #
40
- # This pager is carefully designed for scaleability. It stores
41
- # only the items for one page. The key parameter is needed,
42
- # multiple pagers can coexist in a single page. The pager
43
- # leverages the SQL LIMIT option to optimize database
40
+ # This pager is carefully designed for scaleability. It stores only the items
41
+ # for one page. The key parameter is needed, multiple pagers can coexist in a
42
+ # single page. The pager leverages the SQL LIMIT option to optimize database
44
43
  # interaction.
44
+ #
45
+ #
46
+ # === Example
47
+ #
48
+ # class MyController
49
+ # def index
50
+ # objs = (0..200).to_a
51
+ # @entries, @pager = paginate(objs, :limit => 20)
52
+ # end
53
+ # end
54
+ #
55
+ #
56
+ # <html>
57
+ # <head><title>Pager</title></head>
58
+ # <body>
59
+ # <?r if pager.navigation? ?>
60
+ # <div class="pager">#{@pager.navigation}</div>
61
+ # <?r end ?>
62
+ # <ul>
63
+ # <?r @entries.each do |entry| ?>
64
+ # <li>#{entry}</li>
65
+ # <?r end ?>
66
+ # </ul>
67
+ # </body>
68
+ # </html>
69
+ #
70
+ # === Styling
71
+ #
72
+ # The following classes can be used for styling with CSS (provided you put the
73
+ # pager in a element with class 'pager' like shown above):
74
+ #
75
+ # .pager {}
76
+ # .pager .first {}
77
+ # .pager .previous {}
78
+ # .pager .next {}
79
+ # .pager .last {}
80
+ # .pager ul {}
81
+ # .pager li {}
82
+ # .pager li.active {}
45
83
 
46
84
  class Pager
47
85
  include Ramaze::LinkHelper
@@ -56,19 +94,29 @@ class Pager
56
94
 
57
95
  # The current page.
58
96
 
59
- attr_accessor :page
97
+ attr_reader :page
60
98
 
61
99
  # Items per page.
62
100
 
63
- attr_accessor :limit
101
+ attr_reader :limit
64
102
 
65
103
  # The total number of pages.
66
104
 
67
- attr_accessor :page_count
105
+ attr_reader :page_count
68
106
 
69
107
  # Total count of items.
70
108
 
71
- attr_accessor :total_count
109
+ attr_reader :total_count
110
+
111
+ # Create a new Pager object.
112
+ #
113
+ # request:: Ramaze::Request object providing access to GET parameters
114
+ # limit:: how many elements go to one page
115
+ # total_count:: total element count
116
+ # key:: key used for getting the current page from GET paramaters
117
+ #
118
+ # Note: You never have to create this class yourself, use the `paginate()`
119
+ # convenience method from the PagerHelper.
72
120
 
73
121
  def initialize(request, limit, total_count, key = trait[:key])
74
122
  raise 'limit should be > 0' unless limit > 0
@@ -80,11 +128,6 @@ class Pager
80
128
  @start_idx = (@page - 1) * limit
81
129
  end
82
130
 
83
- def set_count(total_count)
84
- @total_count = total_count
85
- @page_count = (@total_count.to_f / @limit).ceil
86
- end
87
-
88
131
  # Return the first page index.
89
132
 
90
133
  def first_page
@@ -121,12 +164,7 @@ class Pager
121
164
  [@page + 1, @page_count].min
122
165
  end
123
166
 
124
- def link_first_page; target_uri(first_page); end
125
- def link_last_page; target_uri(last_page); end
126
- def link_prev_page; target_uri(prev_page); end
127
- def link_next_page; target_uri(next_page); end
128
-
129
- # Iterator
167
+ # Returns each element for the current page
130
168
 
131
169
  def each(&block)
132
170
  @page_items.each(&block)
@@ -135,60 +173,27 @@ class Pager
135
173
  # Iterator
136
174
  # Returns 1-based index.
137
175
 
138
- def each_with_index
139
- idx = @start_idx
140
- for item in @page_items
141
- yield(idx + 1, item)
142
- idx += 1
143
- end
176
+ def each_with_index(&block)
177
+ @page_items.each_with_index(&block)
144
178
  end
145
179
 
146
180
  # Is the pager empty, ie has one page only?
147
181
 
148
182
  def empty?
149
- @page_count < 1
183
+ @page_count < 2
150
184
  end
151
185
 
152
- # The items count.
186
+ # Returns true if a navigation is necessary (meaning there is more than one
187
+ # page)
153
188
 
154
- def size
155
- @total_count
156
- end
157
-
158
- # Returns the range of the current page.
159
-
160
- def page_range
161
- s = @idx
162
- e = [@idx + @items_limit - 1, all_total_count].min
163
-
164
- return [s, e]
165
- end
166
-
167
- # Override if needed.
168
-
169
- def nav_range
170
- # effective range = 10 pages.
171
- s = [@page - 5, 1].max
172
- e = [@page + 9, @page_count].min
173
-
174
- d = 9 - (e - s)
175
- e += d if d < 0
176
-
177
- return (s..e)
189
+ def navigation?
190
+ !empty?
178
191
  end
179
192
 
180
- # To be used with Og queries.
181
-
182
- def limit
183
- if @start_idx > 0
184
- { :limit => @limit, :offset => @start_idx }
185
- else
186
- { :limit => @limit }
187
- end
188
- end
193
+ # Returns the amount of all elements in all pages.
189
194
 
190
- def offset
191
- @start_idx
195
+ def size
196
+ @total_count
192
197
  end
193
198
 
194
199
  # Override this method in your application if needed.
@@ -217,13 +222,9 @@ class Pager
217
222
 
218
223
  for i in nav_range()
219
224
  if i == @page
220
- nav << %{
221
- <li class="active">#{i}</li>
222
- }
225
+ nav << %{<li class="active">#{i}</li>}
223
226
  else
224
- nav << %{
225
- <li><a href="#{target_uri(i)}">#{i}</a></li>
226
- }
227
+ nav << %{<li><a href="#{target_uri(i)}">#{i}</a></li>}
227
228
  end
228
229
  end
229
230
 
@@ -232,8 +233,20 @@ class Pager
232
233
  return nav
233
234
  end
234
235
 
235
- def navigation?
236
- @page_count > 1
236
+ # To be used with Og queries.
237
+
238
+ def limit
239
+ if @start_idx > 0
240
+ { :limit => @limit, :offset => @start_idx }
241
+ else
242
+ { :limit => @limit }
243
+ end
244
+ end
245
+
246
+ # Returns the index of the first element to go into the current page
247
+
248
+ def offset
249
+ @start_idx
237
250
  end
238
251
 
239
252
  private
@@ -241,10 +254,57 @@ private
241
254
  # Generate the target URI.
242
255
 
243
256
  def target_uri(page)
244
- params = Request.current.params.dup.update(@key => page)
257
+ params = @request.params.merge(@key => page)
245
258
  Rs(Action.current.method, params)
246
259
  end
247
260
 
261
+ # Generate link for the first page.
262
+
263
+ def link_first_page; target_uri(first_page); end
264
+
265
+ # Generate link for the last page.
266
+
267
+ def link_last_page; target_uri(last_page); end
268
+
269
+ # Generate link for the previous page.
270
+
271
+ def link_prev_page; target_uri(prev_page); end
272
+
273
+ # Generate link for the next page.
274
+
275
+ def link_next_page; target_uri(next_page); end
276
+
277
+
278
+ # Returns the range of the current page.
279
+
280
+ def page_range
281
+ s = @idx
282
+ e = [@idx + @items_limit - 1, all_total_count].min
283
+
284
+ return [s, e]
285
+ end
286
+
287
+ # Returns the range of
288
+ # Override if needed.
289
+
290
+ def nav_range
291
+ # effective range = 10 pages.
292
+ s = [@page - 5, 1].max
293
+ e = [@page + 9, @page_count].min
294
+
295
+ d = 9 - (e - s)
296
+ e += d if d < 0
297
+
298
+ return (s..e)
299
+ end
300
+
301
+ # generates total and page count of the pager.
302
+
303
+ def set_count(total_count)
304
+ @total_count = total_count
305
+ @page_count = (@total_count.to_f / @limit).ceil
306
+ end
307
+
248
308
  end
249
309
 
250
310
  # Pager related helper methods.
@@ -258,50 +318,48 @@ private
258
318
  #
259
319
  # === Example
260
320
  #
261
- # entries, pager = paginate(Article, :where => 'title LIKE..', :limit => 10)
262
- #
263
- # or
264
- #
265
321
  # items = [ 'item1', 'item2', ... ]
266
322
  # entries, pager = paginate(items, :limit => 10)
267
323
  #
268
- # or
269
- #
270
- # entries, pager = paginate(article.comments, :limit => 10)
271
- #
272
324
  # <ul>
273
325
  # <?r for entry in entries ?>
274
326
  # <li>#{entry.to_link}</li>
275
327
  # <?r end ?>
276
328
  # </ul>
277
329
  # #{pager.navigation}
330
+ #
331
+ # === Og Example
332
+ #
333
+ # entries, pager = paginate(Article, :where => 'title LIKE..', :limit => 10)
334
+ #
335
+ # or
336
+ #
337
+ # entries, pager = paginate(article.comments, :limit => 10)
278
338
 
279
339
  def paginate(items, options = {})
280
- limit = options.delete(:limit) || options[:limit] || Pager.trait[:limit]
340
+ limit = options.delete(:limit) || Pager.trait[:limit]
281
341
  pager_key = options.delete(:pager_key) || Pager.trait[:key]
282
342
 
283
343
  case items
284
- when Array
285
- pager = Pager.new(request, limit, items.size, pager_key)
286
- items = items.slice(pager.offset, pager.limit[:limit])
287
- return items, pager
344
+ when Array
345
+ pager = Pager.new(request, limit, items.size, pager_key)
346
+ items = items.slice(pager.offset, pager.limit[:limit])
347
+ return items, pager
288
348
  end
289
349
 
290
- if defined?(Og)
291
- case items
292
- when Og::Collection
293
- pager = Pager.new(request, limit, items.count, pager_key)
294
- options.update(pager.limit)
295
- items = items.reload(options)
296
- return items, pager
297
-
298
- when Og::Mixin
299
- pager = Pager.new(request, limit, items.count(options), pager_key)
300
- options.update(pager.limit)
301
- items = items.all(options)
302
- return items, pager
303
- end
350
+ if defined?(Og) && items.is_a?(Og::Collection)
351
+ pager = Pager.new(request, limit, items.count, pager_key)
352
+ options.update(pager.limit)
353
+ items = items.reload(options)
354
+ return items, pager
355
+ elsif defined?(Og) && items.is_a?(Og::Mixin)
356
+ pager = Pager.new(request, limit, items.count(options), pager_key)
357
+ options.update(pager.limit)
358
+ items = items.all(options)
359
+ return items, pager
304
360
  end
361
+
362
+ raise "No suitable pagination method for #{items.inspect}"
305
363
  end
306
364
 
307
365
  end