Module: CouchRest::Mixins::DesignDoc::ClassMethods

Defined in:
lib/couchrest/mixins/design_doc.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#design_docObject

Returns the value of attribute design_doc.



12
13
14
# File 'lib/couchrest/mixins/design_doc.rb', line 12

def design_doc
  @design_doc
end

#design_doc_freshObject

Returns the value of attribute design_doc_fresh.



12
13
14
# File 'lib/couchrest/mixins/design_doc.rb', line 12

def design_doc_fresh
  @design_doc_fresh
end

#design_doc_slug_cacheObject

Returns the value of attribute design_doc_slug_cache.



12
13
14
# File 'lib/couchrest/mixins/design_doc.rb', line 12

def design_doc_slug_cache
  @design_doc_slug_cache
end

Instance Method Details

#default_design_docObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/couchrest/mixins/design_doc.rb', line 32

def default_design_doc
  {
    "language" => "javascript",
    "views" => {
      'all' => {
        'map' => "function(doc) {
          if (doc['couchrest-type'] == '#{self.to_s}') {
            emit(null,null);
          }
        }"
      }
    }
  }
end

#design_doc_idObject



18
19
20
# File 'lib/couchrest/mixins/design_doc.rb', line 18

def design_doc_id
  "_design/#{design_doc_slug}"
end

#design_doc_slugObject



22
23
24
25
26
27
28
29
30
# File 'lib/couchrest/mixins/design_doc.rb', line 22

def design_doc_slug
  return design_doc_slug_cache if (design_doc_slug_cache && design_doc_fresh)
  funcs = []
  design_doc['views'].each do |name, view|
    funcs << "#{name}/#{view['map']}#{view['reduce']}"
  end
  md5 = Digest::MD5.hexdigest(funcs.sort.join(''))
  self.design_doc_slug_cache = "#{self.to_s}-#{md5}"
end

#refresh_design_docObject



47
48
49
50
51
52
# File 'lib/couchrest/mixins/design_doc.rb', line 47

def refresh_design_doc
  design_doc['_id'] = design_doc_id
  design_doc.delete('_rev')
  #design_doc.database = nil
  self.design_doc_fresh = true
end

#save_design_docObject

Save the design doc onto the default database, and update the design_doc attribute



56
57
58
59
# File 'lib/couchrest/mixins/design_doc.rb', line 56

def save_design_doc
  refresh_design_doc unless design_doc_fresh
  self.design_doc = update_design_doc(design_doc)
end

#save_design_doc_on(db) ⇒ Object

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



63
64
65
# File 'lib/couchrest/mixins/design_doc.rb', line 63

def save_design_doc_on(db)
  update_design_doc(Design.new(design_doc), db)
end