Class: Slipcover::DesignDocument

Inherits:
Object
  • Object
show all
Defined in:
lib/slipcover/design_document.rb

Defined Under Namespace

Classes: DesignSpecificDocument

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database_name, view_dir = nil) ⇒ DesignDocument

Returns a new instance of DesignDocument.



5
6
7
8
# 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

Instance Attribute Details

#database_nameObject (readonly)

Returns the value of attribute database_name.



3
4
5
# File 'lib/slipcover/design_document.rb', line 3

def database_name
  @database_name
end

#view_dirObject (readonly)

Returns the value of attribute view_dir.



3
4
5
# File 'lib/slipcover/design_document.rb', line 3

def view_dir
  @view_dir
end

Instance Method Details

#[](key) ⇒ Object



40
41
42
# File 'lib/slipcover/design_document.rb', line 40

def [](key)
  document[:views][key]
end

#documentObject



10
11
12
13
14
15
16
# File 'lib/slipcover/design_document.rb', line 10

def document
  @document ||= DesignSpecificDocument.new(database_name, {
    id: document_id,
    language: 'javascript',
    views: views
  })
end

#document_idObject



36
37
38
# File 'lib/slipcover/design_document.rb', line 36

def document_id
  "_design/#{Slipcover::Config.design_version_value}"
end

#fetchObject



21
22
23
24
25
26
# 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

#saveObject



28
29
30
31
32
33
34
# File 'lib/slipcover/design_document.rb', line 28

def save
  document.save
rescue HttpAdapter::ConflictError
  document.fetch
  document[:views] = views
  document.save
end

#viewsObject



44
45
46
47
48
49
50
51
52
53
54
# 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