Sha256: 370722349bd69a839d8409ddf7f9cb44ad490d86d717042c45f41353c929b922

Contents?: true

Size: 1.76 KB

Versions: 3

Compression:

Stored size: 1.76 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module Pagination
      class Proxy
        instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|respond_to\?|proxy_|^object_id$)/ }

        attr_accessor :subject
        attr_reader :total_entries, :per_page, :current_page
        alias limit per_page

        def initialize(total_entries, current_page, per_page=nil)
          @total_entries    = total_entries.to_i
          self.per_page     = per_page
          self.current_page = current_page
        end

        def total_pages
          (total_entries / per_page.to_f).ceil
        end

        def out_of_bounds?
          current_page > total_pages
        end

        def previous_page
          current_page > 1 ? (current_page - 1) : nil
        end

        def next_page
          current_page < total_pages ? (current_page + 1) : nil
        end

        def skip
          (current_page - 1) * per_page
        end
        alias offset skip # for will paginate support

        def send(method, *args, &block)
          if respond_to?(method)
            super
          else
            subject.send(method, *args, &block)
          end
        end

        def ===(other)
          other === subject
        end

        def method_missing(name, *args, &block)
          @subject.send(name, *args, &block)
        end

        def respond_to?(name, *args, &block)
          super || @subject.respond_to?(name, *args, &block)
        end

        private
          def per_page=(value)
            value = 25 if value.blank?
            @per_page = value.to_i
          end

          def current_page=(value)
            value = value.to_i
            value = 1 if value < 1
            @current_page = value
          end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
mongo_mapper_ign-0.7.7 lib/mongo_mapper/plugins/pagination/proxy.rb
pwnash-mongo_mapper-0.7.6 lib/mongo_mapper/plugins/pagination/proxy.rb
mongo_mapper_ign-0.7.6 lib/mongo_mapper/plugins/pagination/proxy.rb