class Payable::ResourceList

Attributes

client[R]
collection[R]
page_size[R]
pages[R]
params[R]
resource_url[R]
type[R]

Public Class Methods

new(type, options = {}) click to toggle source
# File lib/payable/resource_list.rb, line 7
def initialize(type, options = {})
  @type = case type
  when Symbol, String then Payable.const_get(type)
  else type
  end

  @collection   = @type.collection
  @resource_url = Payable.api_url.join(collection)
  @client       = options.delete(:client){ Payable.client }
  @page_num     = options.delete(:page_num){ 1 }
  @page_size    = options.delete(:page_size){ Payable.config.page_size }
  @page_size    = 50 if @page_size < 1
  @page_size    = 250 if @page_size > 250
  @params       = options
  @pages        = {}
end

Public Instance Methods

[](index) click to toggle source
# File lib/payable/resource_list.rb, line 26
def [](index)
  index = (length + index) if index < 0
  page_num, offset = index.divmod(page_size)
  page(page_num + 1)[offset]
end
each() { |item| ... } click to toggle source
# File lib/payable/resource_list.rb, line 48
def each
  return to_enum(__callee__) unless block_given?

  0.step.each do |index|
    item = self[index] or break
    yield item
  end
end
length()
Alias for: total_count
page(num) click to toggle source
# File lib/payable/resource_list.rb, line 32
def page(num)
  @pages[num] ||= begin
    response = get(page: num)
    @total_count = response.body[:total_count]
    map response.body[collection.to_sym]
  end
end
total_count() click to toggle source
# File lib/payable/resource_list.rb, line 40
def total_count
  @total_count ||= begin
    get(page_size: 1).body[:total_count]
  end
end
Also aliased as: length

Private Instance Methods

get(page: 1, page_size: @page_size) click to toggle source
# File lib/payable/resource_list.rb, line 61
def get(page: 1, page_size: @page_size)
  client.get(resource_url, params.merge(page: page, page_size: page_size))
end
map(collection) click to toggle source
# File lib/payable/resource_list.rb, line 65
def map(collection)
  Array(collection).map{ |row| type.new(row) }
end