Sha256: addada161c0b4bcf9215a0e64c22b153a3c6827e61a54dac1d9b5f3b552cbf89
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
module VzaarApi module Lib class PagedResource attr_reader :query, :meta, :collection, :resource_class, :resource_url, :scope_id 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 def loaded? @loaded end def each_item return enum_for :each_item unless block_given? begin each { |record| yield record } end while !self.next.empty? end def first loaded? ? load_page_url(:first) : load! end def next load_page_url :next end def previous load_page_url :previous end def last load_page_url :last end private def load! @loaded = true load_from_url resource_url, query end def load_page_url(page) load! unless loaded? if url = meta_link(page) load_from_url meta[:links][page] else [] end end def meta_link(page) return unless meta meta[:links][page] end def each return enum_for :each unless block_given? load! unless collection collection.each { |record| yield record } end def load_from_url(url, query = {}) response = Api.new.get(url, query) @meta = response.meta @collection = build_collection response.data end def build_collection(items) items.map do |attrs| attrs = scope_id ? attrs.merge(scope_id: scope_id) : attrs resource_class.new attrs end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
vzaar_api-2.0.2 | lib/vzaar_api/lib/paged_resource.rb |
vzaar_api-2.0.1 | lib/vzaar_api/lib/paged_resource.rb |