Class: OpenBEL::Helpers::Pager

Inherits:
Object
  • Object
show all
Defined in:
app/openbel/api/helpers/pager.rb

Instance Method Summary collapse

Constructor Details

#initialize(start_offset, page_size, total_size) ⇒ Pager

Returns a new instance of Pager.

Raises:

  • (ArgumentError)


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_pageObject



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_pageObject



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_sizeObject



62
63
64
# File 'app/openbel/api/helpers/pager.rb', line 62

def page_size
  @page_size.to_i
end

#previous_pageObject



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_offsetObject



40
41
42
# File 'app/openbel/api/helpers/pager.rb', line 40

def start_offset
  @start_offset
end

#total_pagesObject



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_sizeObject



76
77
78
# File 'app/openbel/api/helpers/pager.rb', line 76

def total_size
  @total_size
end