module WillPaginate::DataMapper::CollectionMethods

Attributes

current_page[RW]

Public Instance Methods

offset() click to toggle source
# File lib/will_paginate/data_mapper.rb, line 45
def offset
  query.offset
end
paginated?() click to toggle source
# File lib/will_paginate/data_mapper.rb, line 37
def paginated?
  !current_page.nil?
end
per_page() click to toggle source
# File lib/will_paginate/data_mapper.rb, line 41
def per_page
  query.limit || model.per_page
end
to_a() click to toggle source
Calls superclass method
# File lib/will_paginate/data_mapper.rb, line 65
def to_a
  if paginated?
    ::WillPaginate::Collection.create(current_page, per_page) do |col|
      col.replace super
      col.total_entries ||= total_entries
    end
  else
    super
  end
end
total_entries() click to toggle source
# File lib/will_paginate/data_mapper.rb, line 49
def total_entries
  @total_entries ||= begin
    if loaded? and @array.size < per_page and (current_page == 1 or @array.size > 0)
      offset + @array.size
    else
      # :reload prevents Collection.filter from being run, which
      # would cause a stack overflow
      clean_query = query.merge(:reload => true)
      # seems like the only way
      clean_query.instance_variable_set('@limit', nil)
      clean_query.instance_variable_set('@offset', 0)
      new_collection(clean_query).count
    end
  end
end

Private Instance Methods

initialize_copy(original) click to toggle source
Calls superclass method
# File lib/will_paginate/data_mapper.rb, line 84
def initialize_copy(original)
  super
  @total_entries = nil
end
new_collection(query, resources = nil) click to toggle source
Calls superclass method
# File lib/will_paginate/data_mapper.rb, line 78
def new_collection(query, resources = nil)
  col = super
  col.current_page = self.current_page
  col
end