Class: Nimbu::Pagination::PageIterator

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_apiObject (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

#countObject



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

#firstObject

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

Returns:

  • (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

#lastObject

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

#nextObject

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

#prevObject

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