Class: Latitude::API::ListObject

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/latitude/api/list_object.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_class:, parsed:, request_params: {}, request_opts: {}, path_params: {}) ⇒ ListObject

Returns a new instance of ListObject.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/latitude/api/list_object.rb', line 10

def initialize(resource_class:, parsed:, request_params: {}, request_opts: {}, path_params: {})
  @resource_class = resource_class
  @meta           = parsed.is_a?(Hash) ? (parsed["meta"] || {}) : {}
  @links          = parsed.is_a?(Hash) ? (parsed["links"] || {}) : {}
  raw_data        = parsed.is_a?(Hash) ? Array(parsed["data"]) : []
  @data           = raw_data.map do |row|
    resource_class.new(row, path_params: path_params, opts: request_opts)
  end
  @request_params = request_params || {}
  @request_opts   = request_opts || {}
  @path_params    = path_params || {}
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def data
  @data
end

Returns the value of attribute links.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def links
  @links
end

#metaObject (readonly)

Returns the value of attribute meta.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def meta
  @meta
end

#path_paramsObject (readonly)

Returns the value of attribute path_params.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def path_params
  @path_params
end

#request_optsObject (readonly)

Returns the value of attribute request_opts.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def request_opts
  @request_opts
end

#request_paramsObject (readonly)

Returns the value of attribute request_params.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def request_params
  @request_params
end

#resource_classObject (readonly)

Returns the value of attribute resource_class.



8
9
10
# File 'lib/latitude/api/list_object.rb', line 8

def resource_class
  @resource_class
end

Instance Method Details

#[](index) ⇒ Object



37
38
39
# File 'lib/latitude/api/list_object.rb', line 37

def [](index)
  @data[index]
end

#auto_paging_each(&blk) ⇒ Object



90
91
92
93
94
95
96
97
98
99
# File 'lib/latitude/api/list_object.rb', line 90

def auto_paging_each(&blk)
  page = self
  loop do
    page.each(&blk)
    break unless page.has_more?

    page = page.next_page
  end
  self
end

#each(&blk) ⇒ Object



23
24
25
# File 'lib/latitude/api/list_object.rb', line 23

def each(&blk)
  @data.each(&blk)
end

#empty?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/latitude/api/list_object.rb', line 33

def empty?
  @data.empty?
end

#firstObject



41
42
43
# File 'lib/latitude/api/list_object.rb', line 41

def first
  @data.first
end

#has_more?Boolean

Returns:

  • (Boolean)


63
64
65
66
67
68
# File 'lib/latitude/api/list_object.rb', line 63

def has_more?
  return !!@links["next"] if @links && @links["next"]
  return page_number < @meta["total_pages"].to_i if @meta && @meta["total_pages"]

  @data.size >= page_size
end

#lastObject



45
46
47
# File 'lib/latitude/api/list_object.rb', line 45

def last
  @data.last
end

#next_page(opts = {}) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/latitude/api/list_object.rb', line 70

def next_page(opts = {})
  return empty_page unless has_more?

  params = deep_dup(@request_params)
  params[:page] ||= {}
  params[:page][:number] = page_number + 1
  params[:page][:size]   = page_size
  fetch(params, opts)
end

#page_numberObject



58
59
60
61
# File 'lib/latitude/api/list_object.rb', line 58

def page_number
  value = page_params["number"] || page_params[:number]
  (value || 1).to_i
end

#page_sizeObject



53
54
55
56
# File 'lib/latitude/api/list_object.rb', line 53

def page_size
  value = page_params["size"] || page_params[:size]
  (value || 20).to_i
end

#previous_page(opts = {}) ⇒ Object



80
81
82
83
84
85
86
87
88
# File 'lib/latitude/api/list_object.rb', line 80

def previous_page(opts = {})
  return empty_page if page_number <= 1

  params = deep_dup(@request_params)
  params[:page] ||= {}
  params[:page][:number] = page_number - 1
  params[:page][:size]   = page_size
  fetch(params, opts)
end

#sizeObject Also known as: length



27
28
29
# File 'lib/latitude/api/list_object.rb', line 27

def size
  @data.size
end

#to_aObject



49
50
51
# File 'lib/latitude/api/list_object.rb', line 49

def to_a
  @data.dup
end