File: page_result.rb

package info (click to toggle)
ruby-aws-sdk 1.67.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster
  • size: 6,840 kB
  • sloc: ruby: 28,436; makefile: 7
file content (75 lines) | stat: -rw-r--r-- 2,781 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

module AWS
  module Core
    class PageResult < Array

      # @return [Collection] Returns the collection that was used to
      #   populated this page of results.
      attr_reader :collection

      # @return [Integer] Returns the maximum number of results per page.
      #   The final page in a collection may return fewer than `:per_page`
      #   items (e.g. `:per_page` is 10 and there are only 7 items).
      attr_reader :per_page

      # @return [String] An opaque token that can be passed the #page method
      #   of the collection that returned this page of results.  This next
      #   token behaves as a pseudo offset.  If `next_token` is `nil` then
      #   there are no more results for the collection.
      attr_reader :next_token

      # @param [Collection] collection The collection that was used to
      #   request this page of results.  The collection should respond to
      #   #page and accept a :next_token option.
      #
      # @param [Array] items An array of result items that represent a
      #   page of results.
      #
      # @param [Integer] per_page The number of requested items for this
      #   page of results.  If the count of items is smaller than `per_page`
      #   then this is the last page of results.
      #
      # @param [String] next_token (nil) A token that can be passed to the
      #
      def initialize collection, items, per_page, next_token
        @collection = collection
        @per_page = per_page
        @next_token = next_token
        super(items)
      end

      # @return [PageResult]
      # @raise [RuntimeError] Raises a runtime error when called against
      #   a collection that has no more results (i.e. #last_page? == true).
      def next_page
        if last_page?
          raise 'unable to get the next page, already at the last page'
        end
        collection.page(:per_page => per_page, :next_token => next_token)
      end

      # @return [Boolean] Returns `true` if this is the last page of results.
      def last_page?
        next_token.nil?
      end

      # @return [Boolean] Returns `true` if there are more pages of results.
      def more?
        !!next_token
      end

    end
  end
end