Class: Nimbu::Pagination::PageIterator
- Inherits:
-
Object
- Object
- Nimbu::Pagination::PageIterator
- Includes:
- PagedRequest, Utils::Constants, Utils::Url
- Defined in:
- lib/nimbu-api/pagination/page_iterator.rb
Constant Summary collapse
- ATTRIBUTES =
Setup attribute accesor for all the link types
[ META_FIRST, META_NEXT, META_PREV, META_LAST ]
Constants included from PagedRequest
Nimbu::Pagination::PagedRequest::FIRST_PAGE, Nimbu::Pagination::PagedRequest::NOT_FOUND, Nimbu::Pagination::PagedRequest::PER_PAGE
Constants included from Utils::Constants
Utils::Constants::ACCEPT, Utils::Constants::ACCEPTED_OAUTH_SCOPES, Utils::Constants::ACCEPT_CHARSET, Utils::Constants::CACHE_CONTROL, Utils::Constants::CONTENT_LENGTH, Utils::Constants::CONTENT_TYPE, Utils::Constants::DATE, Utils::Constants::ETAG, Utils::Constants::HEADER_LAST, Utils::Constants::HEADER_LINK, Utils::Constants::HEADER_NEXT, Utils::Constants::LOCATION, Utils::Constants::META_FIRST, Utils::Constants::META_LAST, Utils::Constants::META_NEXT, Utils::Constants::META_PREV, Utils::Constants::META_REL, Utils::Constants::NIMBU_SITE, Utils::Constants::OAUTH_SCOPES, Utils::Constants::PARAM_PAGE, Utils::Constants::PARAM_PER_PAGE, Utils::Constants::PARAM_START_PAGE, Utils::Constants::RATELIMIT_LIMIT, Utils::Constants::RATELIMIT_REMAINING, Utils::Constants::SERVER, Utils::Constants::USER_AGENT
Constants included from Utils::Url
Utils::Url::DEFAULT_QUERY_SEP, Utils::Url::KEY_VALUE_SEP
Instance Attribute Summary collapse
-
#current_api ⇒ Object
readonly
Returns the value of attribute current_api.
Instance Method Summary collapse
- #count ⇒ Object
-
#first ⇒ Object
Perform http get request for the first resource.
-
#get_page(page_number) ⇒ Object
Returns the result for a specific page.
- #has_next? ⇒ Boolean
-
#initialize(links, current_api) ⇒ PageIterator
constructor
A new instance of PageIterator.
-
#last ⇒ Object
Perform http get request for the last resource.
-
#next ⇒ Object
Perform http get request for the next resource.
-
#prev ⇒ Object
Perform http get request for the previous resource.
Methods included from PagedRequest
#default_page, #default_page_size, #page_request
Methods included from Utils::Url
#build_query, #escape, #parse_query, #parse_query_for_param, #unescape
Constructor Details
#initialize(links, current_api) ⇒ PageIterator
Returns a new instance of PageIterator.
22 23 24 25 26 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 22 def initialize(links, current_api) @links = links @current_api = current_api update_page_links @links end |
Instance Attribute Details
#current_api ⇒ Object (readonly)
Returns the value of attribute current_api.
20 21 22 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 20 def current_api @current_api end |
Instance Method Details
#count ⇒ Object
32 33 34 35 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 32 def count return nil unless last_page_uri parse_query(URI(last_page_uri).query)['page'] end |
#first ⇒ Object
Perform http get request for the first resource
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 39 def first return nil unless first_page_uri page_uri = URI(first_page_uri) params = parse_query(page_uri.query) if next_page < 1 params['sha'] = 'master' if params.keys.include?('sha') params['per_page'] = parse_per_page_number(first_page_uri) else params['page'] = parse_page_number(first_page_uri) params['per_page'] = parse_per_page_number(first_page_uri) end response = page_request(page_uri.path, params) update_page_links response.links response end |
#get_page(page_number) ⇒ Object
Returns the result for a specific page.
105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 105 def get_page(page_number) # Find URI that we can work with, if we cannot get the first or the # last page URI then there is only one page. page_uri = first_page_uri || last_page_uri return nil unless page_uri params = parse_query URI(page_uri).query params['page'] = page_number params['per_page'] = parse_per_page_number(page_uri) response = page_request URI(page_uri).path, params update_page_links response.links response end |
#has_next? ⇒ Boolean
28 29 30 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 28 def has_next? next_page == 0 || !next_page_uri.nil? end |
#last ⇒ Object
Perform http get request for the last resource
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 91 def last return nil unless last_page_uri page_uri = URI(last_page_uri) params = parse_query(page_uri.query) params['page'] = parse_page_number(last_page_uri) params['per_page'] = parse_per_page_number(last_page_uri) response = page_request(page_uri.path, params) update_page_links response.links response end |
#next ⇒ Object
Perform http get request for the next resource
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 58 def next return nil unless has_next? page_uri = URI(next_page_uri) params = parse_query(page_uri.query) if next_page < 1 params['sha'] = params['last_sha'] if params.keys.include?('last_sha') params['per_page'] = parse_per_page_number(next_page_uri) else params['page'] = parse_page_number(next_page_uri) params['per_page'] = parse_per_page_number(next_page_uri) end response = page_request(page_uri.path, params) update_page_links response.links response end |
#prev ⇒ Object
Perform http get request for the previous resource
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/nimbu-api/pagination/page_iterator.rb', line 77 def prev return nil unless prev_page_uri page_uri = URI(prev_page_uri) params = parse_query(page_uri.query) params['page'] = parse_page_number(prev_page_uri) params['per_page'] = parse_per_page_number(prev_page_uri) response = page_request(page_uri.path, params) update_page_links response.links response end |