class GrapeClient::Collection

Attributes

count[R]

Public Class Methods

new(clazz, elements, headers = nil) click to toggle source
# File lib/grape_client/collection.rb, line 5
def initialize(clazz, elements, headers = nil)
  @is_first_page = true
  @clazz = clazz
  update(elements, headers)
end

Public Instance Methods

any?() click to toggle source
# File lib/grape_client/collection.rb, line 45
def any?
  !empty?
end
collect() click to toggle source
# File lib/grape_client/collection.rb, line 33
def collect
  result = []
  per_page do |elements|
    result += elements
  end
  result
end
each() { |clazz| ... } click to toggle source
# File lib/grape_client/collection.rb, line 15
def each(&_block)
  per_page do |elements|
    elements.each do |attrs|
      yield @clazz.new(attrs)
    end
  end
end
empty?() click to toggle source
# File lib/grape_client/collection.rb, line 41
def empty?
  @is_first_page && @elements.empty?
end
first() click to toggle source
# File lib/grape_client/collection.rb, line 11
def first
  @clazz.new(@elements.first) if @elements.any?
end
map() { |clazz| ... } click to toggle source
# File lib/grape_client/collection.rb, line 23
def map(&_block)
  result = []
  per_page do |elements|
    result += elements.map do |attrs|
      yield @clazz.new(attrs)
    end
  end
  result
end

Private Instance Methods

load_first_page() click to toggle source
# File lib/grape_client/collection.rb, line 78
def load_first_page
  return unless load_page @first_page_link
  @is_first_page = true
  true
end
load_next_page() click to toggle source
# File lib/grape_client/collection.rb, line 72
def load_next_page
  return unless load_page @next_page_link
  @is_first_page = false
  true
end
load_page(link) click to toggle source
# File lib/grape_client/collection.rb, line 84
def load_page(link)
  return unless link.present?
  response = @clazz.connection.request :get, link
  update ResponseParser.new(response, @clazz).collection, @clazz.connection.headers
  true
end
per_page() { |elements| ... } click to toggle source
# File lib/grape_client/collection.rb, line 51
def per_page
  prepare_for_iteration
  loop do
    yield @elements
    break unless load_next_page
  end
end
prepare_for_iteration() click to toggle source
# File lib/grape_client/collection.rb, line 67
def prepare_for_iteration
  return if @is_first_page
  load_first_page
end
update(elements, headers = nil) click to toggle source
# File lib/grape_client/collection.rb, line 59
def update(elements, headers = nil)
  @elements = elements
  @count = headers['total'].first.try(:to_i) if headers
  @count ||= @elements.length
  @first_page_link = extract_first_page_link(headers)
  @next_page_link = extract_next_page_link(headers)
end