module CouchRest::Mixins::DesignDoc::ClassMethods

Public Instance Methods

all_design_doc_versions(db = database) click to toggle source

DEPRECATED use #stored_design_doc to retrieve the current design doc

# File lib/couchrest/mixins/design_doc.rb, line 49
def all_design_doc_versions(db = database)
  db.documents :startkey => "_design/#{self.to_s}", 
    :endkey => "_design/#{self.to_s}-\u9999"
end
default_design_doc() click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 31
def default_design_doc
  {
    "_id" => design_doc_id,
    "language" => "javascript",
    "views" => {
      'all' => {
        'map' => "function(doc) {
          if (doc['couchrest-type'] == '#{self.to_s}') {
            emit(doc['_id'],1);
          }
        }"
      }
    }
  }
end
design_doc() click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 13
def design_doc
  @design_doc ||= Design.new(default_design_doc)
end
design_doc_id() click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 23
def design_doc_id
  "_design/#{design_doc_slug}"
end
design_doc_slug() click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 27
def design_doc_slug
  self.to_s
end
model_design_doc(db = database) click to toggle source
Alias for: stored_design_doc
refresh_design_doc(db = database) click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 61
def refresh_design_doc(db = database)
  raise "Database missing for design document refresh" if db.nil?
  unless design_doc_fresh(db)
    save_design_doc(db)
    design_doc_fresh(db, true)
  end
end
req_design_doc_refresh() click to toggle source

Use when something has been changed, like a view, so that on the next request the design docs will be updated (if changed!)

# File lib/couchrest/mixins/design_doc.rb, line 19
def req_design_doc_refresh
  @design_doc_fresh = { }
end
save_design_doc(db = database, force = false) click to toggle source

Save the design doc onto a target database in a thread-safe way, not modifying the model’s #design_doc

See also #save_design_doc! to always save the design doc even if there are no changes.

# File lib/couchrest/mixins/design_doc.rb, line 74
def save_design_doc(db = database, force = false)
  update_design_doc(Design.new(design_doc), db, force)
end
save_design_doc!(db = database) click to toggle source

Force the update of the model’s #design_doc even if it hasn’t changed.

# File lib/couchrest/mixins/design_doc.rb, line 79
def save_design_doc!(db = database)
  save_design_doc(db, true)
end
stored_design_doc(db = database) click to toggle source

Retreive the latest version of the design document directly from the database.

# File lib/couchrest/mixins/design_doc.rb, line 56
def stored_design_doc(db = database)
  db.get(design_doc_id) rescue nil
end
Also aliased as: model_design_doc

Protected Instance Methods

compare_views(orig, repl) click to toggle source

Return true if the two views match

# File lib/couchrest/mixins/design_doc.rb, line 118
def compare_views(orig, repl)
  return false if orig.nil? or repl.nil?
  (orig['map'].to_s.strip == repl['map'].to_s.strip) && (orig['reduce'].to_s.strip == repl['reduce'].to_s.strip)
end
design_doc_fresh(db, fresh = nil) click to toggle source
# File lib/couchrest/mixins/design_doc.rb, line 85
def design_doc_fresh(db, fresh = nil)
  @design_doc_fresh ||= {}
  if fresh.nil? 
    @design_doc_fresh[db.uri] || false
  else
    @design_doc_fresh[db.uri] = fresh
  end
end
update_design_doc(design_doc, db, force = false) click to toggle source

Writes out a #design_doc to a given database, returning the updated design doc

# File lib/couchrest/mixins/design_doc.rb, line 96
def update_design_doc(design_doc, db, force = false)
  saved = stored_design_doc(db)
  if saved
    changes = force
    design_doc['views'].each do |name, view|
      if !compare_views(saved['views'][name], view)
        changes = true
        saved['views'][name] = view
      end
    end
    if changes
      db.save_doc(saved)
    end
    design_doc
  else
    design_doc.database = db
    design_doc.save
    design_doc
  end
end