class Slipcover::DesignDocument

Attributes

database_name[R]
view_dir[R]

Public Class Methods

new(database_name, view_dir=nil) click to toggle source
# File lib/slipcover/design_document.rb, line 5
def initialize(database_name, view_dir=nil)
  @database_name = database_name
  @view_dir = view_dir || Slipcover::Config.view_dir
end

Public Instance Methods

[](key) click to toggle source
# File lib/slipcover/design_document.rb, line 40
def [](key)
  document[:views][key]
end
document() click to toggle source
# File lib/slipcover/design_document.rb, line 10
def document
  @document ||= DesignSpecificDocument.new(database_name, {
    id: document_id,
    language: 'javascript',
    views: views
  })
end
document_id() click to toggle source
# File lib/slipcover/design_document.rb, line 36
def document_id
  "_design/#{Slipcover::Config.design_version_value}"
end
fetch() click to toggle source
# File lib/slipcover/design_document.rb, line 21
def fetch
  document.fetch
  document.attributes[:views].symbolize_keys!
  document.attributes[:views].each {|key, hash| document.attributes[:views][key] = hash.symbolize_keys!}
  document
end
save() click to toggle source
# File lib/slipcover/design_document.rb, line 28
def save
  document.save
rescue HttpAdapter::ConflictError
  document.fetch
  document[:views] = views
  document.save
end
views() click to toggle source
# File lib/slipcover/design_document.rb, line 44
def views
  Dir.entries(view_dir).inject({}) do |hash, path|
    if !path.match(/\./)
      dir = view_dir.to_s + "/" + path
      hash[path.to_sym] ||= {}
      hash[path.to_sym][:map] = File.read(dir + "/map.js")
      hash[path.to_sym][:reduce] = File.read(dir + "/reduce.js") if File.exist?(dir + "/reduce.js")
    end
    hash
  end
end