class HOALife::Resources::Collection

A collection of resources Usually returned by an index endpoint

Attributes

url[R]

Public Class Methods

new(url) click to toggle source
# File lib/hoalife/resources/collection.rb, line 10
def initialize(url)
  @url = url
  @meta = {}
  @links = {}
end

Public Instance Methods

all() click to toggle source

Return all pages

# File lib/hoalife/resources/collection.rb, line 17
def all
  all_resources = resources

  if @meta['current_page'] < @meta['total_pages']
    all_resources += self.class.new(@links['next']).all
  end

  all_resources
end
count()
Alias for: total
current_page() click to toggle source
# File lib/hoalife/resources/collection.rb, line 57
def current_page
  data

  @meta['current_page']
end
first() click to toggle source

Just return the first result

# File lib/hoalife/resources/collection.rb, line 28
def first
  if resources.is_a?(Array)
    resources.first
  else
    resources
  end
end
last() click to toggle source

Just return the last result

# File lib/hoalife/resources/collection.rb, line 37
def last
  all.last
end
order(col, dir = :asc) click to toggle source
# File lib/hoalife/resources/collection.rb, line 46
def order(col, dir = :asc)
  safe_dir = dir.to_s.downcase == 'desc' ? 'desc' : 'asc'
  self.class.new add_params_to_url!(order: col, order_dir: safe_dir)
end
reload() click to toggle source
# File lib/hoalife/resources/collection.rb, line 71
def reload
  @data = nil

  self
end
size()
Alias for: total
total() click to toggle source
# File lib/hoalife/resources/collection.rb, line 63
def total
  data

  @meta['total']
end
Also aliased as: count, size
total_pages() click to toggle source
# File lib/hoalife/resources/collection.rb, line 51
def total_pages
  data

  @meta['total_pages']
end
where(params = {}) click to toggle source

Add query parameters to the URL

# File lib/hoalife/resources/collection.rb, line 42
def where(params = {})
  self.class.new add_params_to_url!(params)
end

Private Instance Methods

add_params_to_url!(new_params) click to toggle source
# File lib/hoalife/resources/collection.rb, line 90
def add_params_to_url!(new_params)
  uri = URI(@url)
  exisiting_params = Hash[URI.decode_www_form(uri.query || '')]
  new_params.each { |k, v| exisiting_params[k.to_s] = v }
  uri.query = URI.encode_www_form(exisiting_params)

  uri.to_s
end
data() click to toggle source
# File lib/hoalife/resources/collection.rb, line 99
def data
  @data ||= request!.json['data']
end
request!() click to toggle source
# File lib/hoalife/resources/collection.rb, line 79
def request!
  make_request! do
    response = HOALife::Client::Get.new(@url)

    @meta  = response.json['meta']
    @links = response.json['links']

    response
  end
end
resources() click to toggle source
# File lib/hoalife/resources/collection.rb, line 103
def resources
  if data.is_a?(Array)
    # array of resource objects for each instance
    data.collect { |instance| HOALife::Resource.new(instance) }
  else
    # return a single resource
    HOALife::Resource.new(data)
  end
end