class VzaarApi::Lib::PagedResource

Attributes

collection[R]
meta[R]
query[R]
resource_class[R]
resource_url[R]
scope_id[R]

Public Class Methods

new(query = {}) click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 8
def initialize(query = {})
  @query = query.dup
  @resource_class = @query.delete(:resource_class)
  @resource_url = @query.delete(:resource_url)
  @scope_id = @query.delete(:scope_id)
  @loaded = false
end

Public Instance Methods

each_item() { |record| ... } click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 20
def each_item
  return enum_for :each_item unless block_given?
  begin
    each { |record| yield record }
  end while !self.next.empty?
end
first() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 27
def first
  loaded? ? load_page_url(:first) : load!
end
last() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 39
def last
  load_page_url :last
end
loaded?() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 16
def loaded?
  @loaded
end
next() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 31
def next
  load_page_url :next
end
previous() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 35
def previous
  load_page_url :previous
end

Private Instance Methods

build_collection(items) click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 76
def build_collection(items)
  items.map do |attrs|
    attrs = scope_id ? attrs.merge(scope_id: scope_id) : attrs
    resource_class.new attrs
  end
end
each() { |record| ... } click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 64
def each
  return enum_for :each unless block_given?
  load! unless collection
  collection.each { |record| yield record }
end
load!() click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 45
def load!
  @loaded = true
  load_from_url resource_url, query
end
load_from_url(url, query = {}) click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 70
def load_from_url(url, query = {})
  response = Api.new.get(url, query)
  @meta = response.meta
  @collection = build_collection response.data
end
load_page_url(page) click to toggle source
# File lib/vzaar_api/lib/paged_resource.rb, line 50
def load_page_url(page)
  load! unless loaded?
  if url = meta_link(page)
    load_from_url meta[:links][page]
  else
    []
  end
end