module PaginatedTable
  module ControllerHelpers
    def paginated_table(name, collection, options = {})
      defaults = options.fetch(:defaults, {})
      page = PageParams.create_page(params, defaults)
      data_page = DataPage.new(collection, page)
      instance_variable_set(:"@#{name}", data_page)
      if request.xhr?
        partial = options.fetch(:partial, name)
        render :partial => partial, :layout => false
      end
    end
  end
end

ActionController::Base.send :include, PaginatedTable::ControllerHelpers