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
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
total()
click to toggle source
# File lib/hoalife/resources/collection.rb, line 63 def total data @meta['total'] end
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