class Perpetuity::Retrieval
Attributes
identity_map[R]
result_cache[RW]
result_limit[RW]
result_offset[RW]
result_page[RW]
sort_attribute[RW]
sort_direction[RW]
Public Class Methods
new(mapper, query, options={})
click to toggle source
# File lib/perpetuity/retrieval.rb, line 10 def initialize mapper, query, options={} @mapper = mapper @collection_name = mapper.collection_name @query = query @identity_map = options.fetch(:identity_map) { IdentityMap.new } @data_source = mapper.data_source end
Public Instance Methods
[](index)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 95 def [] index to_a[index] end
clear_cache()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 120 def clear_cache @result_cache = nil end
count()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 72 def count @data_source.count(@collection_name, @query) end
drop(count)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 112 def drop count retrieval = clone retrieval.result_offset = count retrieval.clear_cache retrieval end
each(&block)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 52 def each &block to_a.each(&block) end
empty?()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 99 def empty? to_a.empty? end
first()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 76 def first limit(1).to_a.first end
limit(lim)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 103 def limit lim retrieval = clone retrieval.result_limit = lim retrieval.clear_cache retrieval end
Also aliased as: take
options()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 86 def options { attribute: sort_attribute, direction: sort_direction, limit: result_limit, skip: result_offset } end
page(page)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 35 def page page retrieval = clone retrieval.result_limit ||= 20 retrieval.result_page = page retrieval.result_offset = (page - 1) * retrieval.result_limit retrieval.clear_cache retrieval end
per_page(per)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 44 def per_page per retrieval = clone retrieval.result_limit = per retrieval.result_offset = (retrieval.result_page - 1) * per retrieval.clear_cache retrieval end
reverse()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 27 def reverse retrieval = clone retrieval.sort_direction = retrieval.sort_direction == :descending ? :ascending : :descending retrieval.clear_cache retrieval end
sample()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 80 def sample sample_size = [count, result_limit].compact.max result = drop(rand(sample_size)).first result end
sort(attribute=:name)
click to toggle source
# File lib/perpetuity/retrieval.rb, line 18 def sort attribute=:name retrieval = clone retrieval.sort_attribute = attribute retrieval.sort_direction = :ascending retrieval.clear_cache retrieval end
to_a()
click to toggle source
# File lib/perpetuity/retrieval.rb, line 56 def to_a @result_cache ||= @data_source.unserialize(@data_source.retrieve(@collection_name, @query, options), @mapper) @result_cache.map do |result| klass = result.class id = @mapper.id_for(result) if cached_result = identity_map[klass, id] cached_result else identity_map << result result end end end