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
extract_first_page_link(headers)
click to toggle source
# File lib/grape_client/collection.rb, line 91 def extract_first_page_link(headers) extract_page_link(headers, 'first') end
extract_next_page_link(headers)
click to toggle source
# File lib/grape_client/collection.rb, line 95 def extract_next_page_link(headers) extract_page_link(headers, 'next') end
extract_page_link(headers, title)
click to toggle source
# File lib/grape_client/collection.rb, line 99 def extract_page_link(headers, title) return unless headers.present? links = headers['link'].try(:first) return unless links.present? links = links.split(',').map do |link| link = link.split(';').map(&:strip) link.delete("rel=\"#{title}\"") ? link : nil end.compact.flatten return unless links.any? links.first[1..-2] end
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