Class: Seasar::DBI::Paginate

Inherits:
Object
  • Object
show all
Defined in:
lib/seasar/dbi/paginate.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePaginate

  • args

    • none



27
28
29
30
31
32
33
34
# File 'lib/seasar/dbi/paginate.rb', line 27

def initialize
  @offset = 0
  @limit = 10
  @page = 1
  @window_size = 5
  @total = nil
  @data = nil
end

Instance Attribute Details

#limitObject

Returns the value of attribute limit.



35
36
37
# File 'lib/seasar/dbi/paginate.rb', line 35

def limit
  @limit
end

#offsetObject

Returns the value of attribute offset.



35
36
37
# File 'lib/seasar/dbi/paginate.rb', line 35

def offset
  @offset
end

#pageObject

Returns the value of attribute page.



35
36
37
# File 'lib/seasar/dbi/paginate.rb', line 35

def page
  @page
end

#totalObject

  • args

    • none

  • return

    • Integer



108
109
110
# File 'lib/seasar/dbi/paginate.rb', line 108

def total
  @total
end

Instance Method Details

#dataObject

  • args

    • none

  • return

    • Array



55
56
57
58
59
60
61
62
# File 'lib/seasar/dbi/paginate.rb', line 55

def data
  if @offset + @limit < @total
    len = @limit
  else
    len = @total - @offset
  end
  return @data[@offset, len]
end

#data=(data) ⇒ Object

  • args

    1. Array data

  • return

    • Integer



43
44
45
46
47
# File 'lib/seasar/dbi/paginate.rb', line 43

def data=(data)
  @total = data.size
  @data = data
  return @total
end

#get_total_pageObject

  • args

    • none

  • return

    • Integer



70
71
72
# File 'lib/seasar/dbi/paginate.rb', line 70

def get_total_page
  return (@total.to_f / @limit.to_f).ceil
end

#init_offsetObject

  • args

    • none

  • return

    • none



98
99
100
# File 'lib/seasar/dbi/paginate.rb', line 98

def init_offset
  @offset = 0
end

#move(action, index = nil) ⇒ Object

  • args

    1. Symbol action

    2. Integer index

  • return

    • nil



200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/seasar/dbi/paginate.rb', line 200

def move(action, index = nil)
  return if action.nil?
  case action.to_sym
  when :n, :next
    self.next
  when :p, :prev
    self.prev
  when :g, :goto
    self.page = index.to_i
  else
    raise ArgumentError.new("invalid action [#{action}]")
  end
end

#nextObject

  • args

    • none

  • return

    • none



132
133
134
135
136
# File 'lib/seasar/dbi/paginate.rb', line 132

def next
  return if self.get_total_page == @page
  @offset = @offset + @limit
  @page += 1
end

#next?Boolean

  • args

    • none

  • return

    • Boolean

Returns:

  • (Boolean)


144
145
146
# File 'lib/seasar/dbi/paginate.rb', line 144

def next?
  return @page < self.get_total_page
end

#page_rangeObject

  • args

    • none

  • return

    • Range



176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/seasar/dbi/paginate.rb', line 176

def page_range
  total_page = self.get_total_page
  if total_page <= @window_size
    return 1..total_page
  else
    start = @page - (@window_size.to_f / 2.0).floor
    if start < 1
      return 1..@window_size
    end
    last = start + @window_size -1
    if total_page < last
      return (total_page - @window_size + 1) .. total_page
    end
    return start..last
  end
end

#prevObject

  • args

    • none

  • return

    • none



154
155
156
157
158
# File 'lib/seasar/dbi/paginate.rb', line 154

def prev
  return if @page == 1
  @page -= 1
  @offset = @offset - @limit
end

#prev?Boolean

  • args

    • none

  • return

    • Boolean

Returns:

  • (Boolean)


166
167
168
# File 'lib/seasar/dbi/paginate.rb', line 166

def prev?
  return 1 < @page
end

#window_size=(size) ⇒ Object

  • args

    1. Integer size

  • return

    • Integer



121
122
123
124
# File 'lib/seasar/dbi/paginate.rb', line 121

def window_size=(size)
  size = 2 if size < 2
  @window_size = size
end