class CouchRest::Mixins::Collection::CollectionProxy

Constants

DEFAULT_PAGE
DEFAULT_PER_PAGE

Public Instance Methods

===(other) click to toggle source

Explicitly proxy === because the instance method removal above doesn’t catch it.

# File lib/couchrest/mixins/collection.rb, line 171
def ===(other)
  load_target
  other === @target
end
paginate(options = {}) click to toggle source

See Collection.paginate

# File lib/couchrest/mixins/collection.rb, line 134
def paginate(options = {})
  page, per_page = parse_options(options)
  results = @database.send(@query_type, @view_name, pagination_options(page, per_page))
  remember_where_we_left_off(results, page)
  instances = convert_to_container_array(results)

  begin
    if Kernel.const_get('WillPaginate')
      total_rows = results['total_rows'].to_i
      paginated = WillPaginate::Collection.create(page, per_page, total_rows) do |pager|
        pager.replace(instances)
      end
      return paginated
    end
  rescue NameError
    # When not using will_paginate, not much we could do about this. :x
  end
  return instances
end
paginated_each(options = {}, &block) click to toggle source

See Collection.paginated_each

# File lib/couchrest/mixins/collection.rb, line 155
def paginated_each(options = {}, &block)
  page, per_page = parse_options(options)

  begin
    collection = paginate({:page => page, :per_page => per_page})
    collection.each(&block)
    page += 1
  end until collection.size < per_page
end
proxy_respond_to?(*args) click to toggle source
Alias for: respond_to?
respond_to?(*args) click to toggle source
# File lib/couchrest/mixins/collection.rb, line 165
def respond_to?(*args)
  proxy_respond_to?(*args) || (load_target && @target.respond_to?(*args))
end
Also aliased as: proxy_respond_to?

Public Class Methods

new(database, design_doc, view_name, view_options = {}, container_class = nil, query_type = :view) click to toggle source

Create a new CollectionProxy to represent the specified view. If a container class is specified, the proxy will create an object of the given type for each row that comes back from the view. If no container class is specified, the raw results are returned.

The CollectionProxy provides support for paginating over a collection via the paginate, and #paginated_each methods.

# File lib/couchrest/mixins/collection.rb, line 116
def initialize(database, design_doc, view_name, view_options = {}, container_class = nil, query_type = :view)
  raise ArgumentError, "database is a required parameter" if database.nil?

  @database = database
  @container_class = container_class
  @query_type = query_type

  strip_pagination_options(view_options)
  @view_options = view_options

  if design_doc.class == Design
    @view_name = "#{design_doc.name}/#{view_name}"
  else
    @view_name = "#{design_doc}/#{view_name}"
  end
end