Class: Perpetuity::Retrieval
- Inherits:
-
Object
- Object
- Perpetuity::Retrieval
- Includes:
- Enumerable
- Defined in:
- lib/perpetuity/retrieval.rb
Instance Attribute Summary collapse
-
#result_cache ⇒ Object
Returns the value of attribute result_cache.
-
#result_limit ⇒ Object
Returns the value of attribute result_limit.
-
#result_offset ⇒ Object
Returns the value of attribute result_offset.
-
#result_page ⇒ Object
Returns the value of attribute result_page.
-
#sort_attribute ⇒ Object
Returns the value of attribute sort_attribute.
-
#sort_direction ⇒ Object
Returns the value of attribute sort_direction.
Instance Method Summary collapse
- #[](index) ⇒ Object
- #clear_cache ⇒ Object
- #count ⇒ Object
- #drop(count) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #first ⇒ Object
-
#initialize(mapper, query) ⇒ Retrieval
constructor
A new instance of Retrieval.
- #limit(lim) ⇒ Object (also: #take)
- #options ⇒ Object
- #page(page) ⇒ Object
- #per_page(per) ⇒ Object
- #reverse ⇒ Object
- #sample ⇒ Object
- #sort(attribute = :name) ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize(mapper, query) ⇒ Retrieval
Returns a new instance of Retrieval.
8 9 10 11 12 13 |
# File 'lib/perpetuity/retrieval.rb', line 8 def initialize mapper, query @mapper = mapper @class = mapper.mapped_class @query = query @data_source = mapper.data_source end |
Instance Attribute Details
#result_cache ⇒ Object
Returns the value of attribute result_cache.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def result_cache @result_cache end |
#result_limit ⇒ Object
Returns the value of attribute result_limit.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def result_limit @result_limit end |
#result_offset ⇒ Object
Returns the value of attribute result_offset.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def result_offset @result_offset end |
#result_page ⇒ Object
Returns the value of attribute result_page.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def result_page @result_page end |
#sort_attribute ⇒ Object
Returns the value of attribute sort_attribute.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def sort_attribute @sort_attribute end |
#sort_direction ⇒ Object
Returns the value of attribute sort_direction.
6 7 8 |
# File 'lib/perpetuity/retrieval.rb', line 6 def sort_direction @sort_direction end |
Instance Method Details
#[](index) ⇒ Object
80 81 82 |
# File 'lib/perpetuity/retrieval.rb', line 80 def [] index to_a[index] end |
#clear_cache ⇒ Object
105 106 107 |
# File 'lib/perpetuity/retrieval.rb', line 105 def clear_cache @result_cache = nil end |
#count ⇒ Object
57 58 59 |
# File 'lib/perpetuity/retrieval.rb', line 57 def count @data_source.count(@class, @query) end |
#drop(count) ⇒ Object
97 98 99 100 101 102 103 |
# File 'lib/perpetuity/retrieval.rb', line 97 def drop count retrieval = clone retrieval.result_offset = count retrieval.clear_cache retrieval end |
#each(&block) ⇒ Object
49 50 51 |
# File 'lib/perpetuity/retrieval.rb', line 49 def each &block to_a.each(&block) end |
#empty? ⇒ Boolean
84 85 86 |
# File 'lib/perpetuity/retrieval.rb', line 84 def empty? to_a.empty? end |
#first ⇒ Object
61 62 63 |
# File 'lib/perpetuity/retrieval.rb', line 61 def first limit(1).to_a.first end |
#limit(lim) ⇒ Object Also known as: take
88 89 90 91 92 93 94 |
# File 'lib/perpetuity/retrieval.rb', line 88 def limit lim retrieval = clone retrieval.result_limit = lim retrieval.clear_cache retrieval end |
#options ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/perpetuity/retrieval.rb', line 71 def { attribute: sort_attribute, direction: sort_direction, limit: result_limit, skip: result_offset } end |
#page(page) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/perpetuity/retrieval.rb', line 32 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) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/perpetuity/retrieval.rb', line 41 def per_page per retrieval = clone retrieval.result_limit = per retrieval.result_offset = (retrieval.result_page - 1) * per retrieval.clear_cache retrieval end |
#reverse ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/perpetuity/retrieval.rb', line 24 def reverse retrieval = clone retrieval.sort_direction = retrieval.sort_direction == :descending ? :ascending : :descending retrieval.clear_cache retrieval end |
#sample ⇒ Object
65 66 67 68 69 |
# File 'lib/perpetuity/retrieval.rb', line 65 def sample sample_size = [count, result_limit].compact.max result = drop(rand(sample_size)).first result end |
#sort(attribute = :name) ⇒ Object
15 16 17 18 19 20 21 22 |
# File 'lib/perpetuity/retrieval.rb', line 15 def sort attribute=:name retrieval = clone retrieval.sort_attribute = attribute retrieval.sort_direction = :ascending retrieval.clear_cache retrieval end |
#to_a ⇒ Object
53 54 55 |
# File 'lib/perpetuity/retrieval.rb', line 53 def to_a @result_cache ||= @data_source.unserialize(@data_source.retrieve(@class, @query, ), @mapper) end |