ramaze 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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