Class: Promoted::Ruby::Client::Pager
- Inherits:
-
Object
- Object
- Promoted::Ruby::Client::Pager
- Defined in:
- lib/promoted/ruby/client/pager.rb
Instance Method Summary collapse
- #_sanitize_offsets(retrieval_insertion_offset, paging) ⇒ Object
- #_validate_paging(insertions, retrieval_insertion_offset, offset, index) ⇒ Object
- #apply_paging(insertions, retrieval_insertion_offset, paging = nil) ⇒ Object
- #validate_paging(insertions, retrieval_insertion_offset, paging) ⇒ Object
Instance Method Details
#_sanitize_offsets(retrieval_insertion_offset, paging) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/promoted/ruby/client/pager.rb', line 21 def _sanitize_offsets(retrieval_insertion_offset, paging) offset = [0, paging[:offset]].max retrieval_insertion_offset = [0, retrieval_insertion_offset].max index = [0, offset - retrieval_insertion_offset].max return [offset, retrieval_insertion_offset, index] end |
#_validate_paging(insertions, retrieval_insertion_offset, offset, index) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/promoted/ruby/client/pager.rb', line 28 def _validate_paging(insertions, retrieval_insertion_offset, offset, index) if offset < retrieval_insertion_offset raise InvalidPagingError.new("Invalid page offset (retrieval_insertion_offset #{retrieval_insertion_offset}, offset #{offset})", []) end if index >= insertions.length raise InvalidPagingError.new("Invalid page offset (insertion size #{insertions.length}, index #{index})", []) end end |
#apply_paging(insertions, retrieval_insertion_offset, paging = nil) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/promoted/ruby/client/pager.rb', line 37 def apply_paging(insertions, retrieval_insertion_offset, paging = nil) if !paging paging = { :offset => 0, :size => insertions.length } end offset, retrieval_insertion_offset, index = _sanitize_offsets(retrieval_insertion_offset, paging) begin _validate_paging(insertions, retrieval_insertion_offset, offset, index) rescue InvalidPagingError => err # This is invalid input, stop it before it goes to the server. return err.default_insertions_page end size = paging[:size] if size <= 0 size = insertions.length end final_insertion_size = [size, insertions.length - index].min insertion_page = Array.new(final_insertion_size) 0.upto(final_insertion_size - 1) {|i| request_insertion = insertions[index] # Pager returns response insertions. Create a copy and fill in some of the fields. response_insertion = Hash[] response_insertion[:content_id] = request_insertion[:content_id] response_insertion[:insertion_id] = request_insertion[:insertion_id] # TODO - implement retrieval_start. response_insertion[:position] = offset insertion_page[i] = response_insertion index = index + 1 offset = offset + 1 } return insertion_page end |
#validate_paging(insertions, retrieval_insertion_offset, paging) ⇒ Object
14 15 16 17 18 19 |
# File 'lib/promoted/ruby/client/pager.rb', line 14 def validate_paging(insertions, retrieval_insertion_offset, paging) if paging && paging[:offset] offset, retrieval_insertion_offset, index = _sanitize_offsets(retrieval_insertion_offset, paging) _validate_paging(insertions, retrieval_insertion_offset, offset, index) end end |