Class: OpenBEL::Helpers::Pager
- Inherits:
-
Object
- Object
- OpenBEL::Helpers::Pager
- Defined in:
- app/openbel/api/helpers/pager.rb
Instance Method Summary collapse
- #current_page ⇒ Object
-
#initialize(start_offset, page_size, total_size) ⇒ Pager
constructor
A new instance of Pager.
- #next_page ⇒ Object
- #page_size ⇒ Object
- #previous_page ⇒ Object
- #start_offset ⇒ Object
- #total_pages ⇒ Object
- #total_size ⇒ Object
Constructor Details
#initialize(start_offset, page_size, total_size) ⇒ Pager
Returns a new instance of Pager.
30 31 32 33 34 35 36 37 38 |
# File 'app/openbel/api/helpers/pager.rb', line 30 def initialize(start_offset, page_size, total_size) raise ArgumentError.new("start_offset must be >= 0") if start_offset < 0 raise ArgumentError.new("page_size must be >= 0") if page_size < 0 raise ArgumentError.new("total_size must be >= 0") if total_size < 0 @start_offset = NEGATIVE_FUNCTION.call(start_offset) @page_size = FLOAT_FUNCTION.call(page_size) @total_size = total_size end |
Instance Method Details
#current_page ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/openbel/api/helpers/pager.rb', line 44 def current_page return 0 if @total_size == 0 if @page_size > 0 ((@start_offset + @page_size) / @page_size).floor else total_pages = total_pages() case total_pages when 1 1 when 2 midpoint = @total_size / total_pages @start_offset < midpoint ? 1 : 2 end end end |
#next_page ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/openbel/api/helpers/pager.rb', line 94 def next_page NEXT_COND_FUNCTION.call( self, lambda { |_| nil }, lambda { |pager| Pager.new( NEGATIVE_FUNCTION.call(start_offset + page_size), page_size, total_size ) } ) end |
#page_size ⇒ Object
62 63 64 |
# File 'app/openbel/api/helpers/pager.rb', line 62 def page_size @page_size.to_i end |
#previous_page ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'app/openbel/api/helpers/pager.rb', line 80 def previous_page PREVIOUS_COND_FUNCTION.call( self, lambda { |_| nil }, lambda { |pager| Pager.new( NEGATIVE_FUNCTION.call(start_offset - page_size), page_size, total_size ) } ) end |
#start_offset ⇒ Object
40 41 42 |
# File 'app/openbel/api/helpers/pager.rb', line 40 def start_offset @start_offset end |
#total_pages ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'app/openbel/api/helpers/pager.rb', line 66 def total_pages return 0 if @total_size == 0 if @page_size > 0 (@total_size / @page_size).ceil else @start_offset == 0 ? 1 : 2 end end |
#total_size ⇒ Object
76 77 78 |
# File 'app/openbel/api/helpers/pager.rb', line 76 def total_size @total_size end |