Class: Seasar::DBI::Paginate
- Inherits:
-
Object
- Object
- Seasar::DBI::Paginate
- Defined in:
- lib/seasar/dbi/paginate.rb
Instance Attribute Summary collapse
-
#limit ⇒ Object
Returns the value of attribute limit.
-
#offset ⇒ Object
Returns the value of attribute offset.
-
#page ⇒ Object
Returns the value of attribute page.
-
#total ⇒ Object
-
args - none - return - Integer.
-
Instance Method Summary collapse
-
#data ⇒ Object
-
args - none - return - Array.
-
-
#data=(data) ⇒ Object
-
args 1.
-
-
#get_total_page ⇒ Object
-
args - none - return - Integer.
-
-
#init_offset ⇒ Object
-
args - none - return - none.
-
-
#initialize ⇒ Paginate
constructor
-
args - none.
-
-
#move(action, index = nil) ⇒ Object
-
args 1.
-
-
#next ⇒ Object
-
args - none - return - none.
-
-
#next? ⇒ Boolean
-
args - none - return - Boolean.
-
-
#page_range ⇒ Object
-
args - none - return - Range.
-
-
#prev ⇒ Object
-
args - none - return - none.
-
-
#prev? ⇒ Boolean
-
args - none - return - Boolean.
-
-
#window_size=(size) ⇒ Object
-
args 1.
-
Constructor Details
#initialize ⇒ Paginate
-
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
#limit ⇒ Object
Returns the value of attribute limit.
35 36 37 |
# File 'lib/seasar/dbi/paginate.rb', line 35 def limit @limit end |
#offset ⇒ Object
Returns the value of attribute offset.
35 36 37 |
# File 'lib/seasar/dbi/paginate.rb', line 35 def offset @offset end |
#page ⇒ Object
Returns the value of attribute page.
35 36 37 |
# File 'lib/seasar/dbi/paginate.rb', line 35 def page @page end |
#total ⇒ Object
-
args
-
none
-
-
return
-
Integer
-
108 109 110 |
# File 'lib/seasar/dbi/paginate.rb', line 108 def total @total end |
Instance Method Details
#data ⇒ Object
-
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
-
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_page ⇒ Object
-
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_offset ⇒ Object
-
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
-
Symbol action
-
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 |
#next ⇒ Object
-
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
-
144 145 146 |
# File 'lib/seasar/dbi/paginate.rb', line 144 def next? return @page < self.get_total_page end |
#page_range ⇒ Object
-
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 |
#prev ⇒ Object
-
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
-
166 167 168 |
# File 'lib/seasar/dbi/paginate.rb', line 166 def prev? return 1 < @page end |
#window_size=(size) ⇒ Object
-
args
-
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 |