class CouchRest::Design

Public Instance Methods

can_reduce_view?(name) click to toggle source

Check if the view has a reduce method defined.

# File lib/couchrest/design.rb, line 85
def can_reduce_view?(name)
  has_view?(name) && !self['views'][name.to_s]['reduce'].to_s.empty?
end
has_view?(name) click to toggle source

Returns true or false if the view is available.

# File lib/couchrest/design.rb, line 80
def has_view?(name)
  !self['views'][name.to_s].nil?
end
info() click to toggle source

Provide information about the status of the design document.

# File lib/couchrest/design.rb, line 64
def info
  database.connection.get "#{database.uri}/#{id}/_info"
end
name() click to toggle source
# File lib/couchrest/design.rb, line 55
def name
  id.sub('_design/','') if id
end
name=(newname) click to toggle source
# File lib/couchrest/design.rb, line 59
def name= newname
  self['_id'] = "_design/#{newname}"
end
save() click to toggle source
Calls superclass method
# File lib/couchrest/design.rb, line 68
def save
  raise ArgumentError, "_design docs require a name" unless name && name.length > 0
  super
end
view(view_name, query={}) click to toggle source

Dispatches to any named view. (using the database where this design doc was saved)

# File lib/couchrest/design.rb, line 38
def view view_name, query={}, &block
  view_on database, view_name, query, &block
end
view_by(*keys) click to toggle source
# File lib/couchrest/design.rb, line 4
    def view_by *keys
      opts = keys.pop if keys.last.is_a?(Hash)
      opts ||= {}
      self['views'] ||= {}
      method_name = "by_#{keys.join('_and_')}"

      if opts[:map]
        view = {}
        view['map'] = opts.delete(:map)
        view['reduce'] = opts.delete(:reduce) if opts[:reduce]
        self['views'][method_name] = view
      else
        doc_keys = keys.collect{|k| "doc['#{k}']"}
        key_emit = doc_keys.length == 1 ? "#{doc_keys.first}" : "[#{doc_keys.join(', ')}]"
        guards = opts.delete(:guards) || []
        guards += doc_keys.map{|k| "(#{k} != null)"} unless opts.delete(:allow_nil)
        guards << 'true' if guards.empty?
        map_function = <<-JAVASCRIPT
function(doc) {
  if (#{guards.join(' && ')}) {
    emit(#{key_emit}, null);
  }
}
JAVASCRIPT
        self['views'][method_name] = {
          'map' => map_function
        }
      end
      self['views'][method_name]['couchrest-defaults'] = opts unless opts.empty?
      method_name
    end
view_defaults(name) click to toggle source

Return the hash of default values to include in all queries sent to a view from couchrest.

# File lib/couchrest/design.rb, line 75
def view_defaults(name)
  (self['views'][name.to_s] && self['views'][name.to_s]["couchrest-defaults"]) || {}
end
view_on(db, view_name, query = {}) click to toggle source

Dispatches to any named view in a specific database

# File lib/couchrest/design.rb, line 43
def view_on db, view_name, query = {}, &block
  raise ArgumentError, "View query options must be set as symbols!" if query.keys.find{|k| k.is_a?(String)}
  view_name = view_name.to_s
  view_slug = "#{name}/#{view_name}"
  # Set the default query options
  query = view_defaults(view_name).merge(query)
  # Ensure reduce is set if dealing with a reduceable view
  # This is a requirement of CouchDB.
  query[:reduce] ||= false if can_reduce_view?(view_name)
  db.view(view_slug, query, &block)
end

Private Instance Methods

fetch_view(view_name, opts, &block) click to toggle source
# File lib/couchrest/design.rb, line 91
def fetch_view view_name, opts, &block
  database.view(view_name, opts, &block)
end