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