class LightSide::Pager

Attributes

collection[RW]
next_url[RW]
params[RW]
previous_url[RW]
resource_builder[RW]
resource_url[RW]
url[RW]

Public Class Methods

new(model_class, params={}) click to toggle source
# File lib/lightside/pager.rb, line 7
def initialize(model_class, params={})
  self.resource_url     = model_class.resource_url
  self.resource_builder = lambda { |hash| model_class.new(hash) }
  self.params           = { page: 1 }.merge(params)
  self.collection       = []
  self.url              = resource_path
end

Public Instance Methods

count() click to toggle source
# File lib/lightside/pager.rb, line 15
def count
  collection.length
end
each() { |instance| ... } click to toggle source
# File lib/lightside/pager.rb, line 19
def each
  collection.each { |instance| yield instance }
end
fetch() click to toggle source
# File lib/lightside/pager.rb, line 23
def fetch
  self.collection = []
  fetch_page
  self
end
fetch_page() click to toggle source
# File lib/lightside/pager.rb, line 29
def fetch_page
  RestClient.get(url, Config.headers) do |response, request, result|
    case response.code
    when 200
      parsed_response   = JSON.parse(response)
      self.next_url     = parsed_response["next"]
      self.previous_url = parsed_response["previous"]
      parsed_response["results"].each do |resource|
        collection << resource_builder.call(resource)
      end
    end
  end
end
less?() click to toggle source
# File lib/lightside/pager.rb, line 43
def less?
  !!previous_url
end
more?() click to toggle source
# File lib/lightside/pager.rb, line 47
def more?
  !!next_url
end
next() click to toggle source
# File lib/lightside/pager.rb, line 51
def next
  raise "no more results" unless more?
  self.url = next_url
  fetch
end
page_number() click to toggle source
# File lib/lightside/pager.rb, line 57
def page_number
  params.fetch(:page, 1).to_i
end
previous() click to toggle source
# File lib/lightside/pager.rb, line 61
def previous
  raise "no more results" unless less?
  self.url = previous_url
  fetch
end
resource_path() click to toggle source
# File lib/lightside/pager.rb, line 67
def resource_path
  URI.join(resource_url, "?#{URI.encode_www_form(params)}").to_s
end