Class: Chef::CouchDB
Instance Method Summary
collapse
-
#create_db ⇒ Object
-
#create_design_document(name, data) ⇒ Object
-
#delete(obj_type, name, rev = nil) ⇒ Object
-
#get_view(design, view, options = {}) ⇒ Object
-
#has_key?(obj_type, name) ⇒ Boolean
-
#initialize(url = nil) ⇒ CouchDB
constructor
A new instance of CouchDB.
-
#list(view, inflate = false) ⇒ Object
-
#load(obj_type, name) ⇒ Object
-
#store(obj_type, name, object) ⇒ Object
-
#view_uri(design, view) ⇒ Object
#set_or_return, #validate
Constructor Details
#initialize(url = nil) ⇒ CouchDB
Returns a new instance of CouchDB.
29
30
31
32
|
# File 'lib/chef/couchdb.rb', line 29
def initialize(url=nil)
url ||= Chef::Config[:couchdb_url]
@rest = Chef::REST.new(url)
end
|
Instance Method Details
#create_db ⇒ Object
34
35
36
37
38
39
40
|
# File 'lib/chef/couchdb.rb', line 34
def create_db
@database_list = @rest.get_rest("_all_dbs")
unless @database_list.detect { |db| db == Chef::Config[:couchdb_database] }
response = @rest.put_rest(Chef::Config[:couchdb_database], Hash.new)
end
Chef::Config[:couchdb_database]
end
|
#create_design_document(name, data) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/chef/couchdb.rb', line 42
def create_design_document(name, data)
create_db
to_update = true
begin
old_doc = @rest.get_rest("#{Chef::Config[:couchdb_database]}/_design%2F#{name}")
if data["version"] != old_doc["version"]
data["_rev"] = old_doc["_rev"]
Chef::Log.debug("Updating #{name} views")
else
to_update = false
end
rescue
Chef::Log.debug("Creating #{name} views for the first time")
end
if to_update
@rest.put_rest("#{Chef::Config[:couchdb_database]}/_design%2F#{name}", data)
end
true
end
|
#delete(obj_type, name, rev = nil) ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/chef/couchdb.rb', line 90
def delete(obj_type, name, rev=nil)
validate(
{
:obj_type => obj_type,
:name => name,
},
{
:obj_type => { :kind_of => String },
:name => { :kind_of => String },
}
)
unless rev
last_obj = @rest.get_rest("#{Chef::Config[:couchdb_database]}/#{obj_type}_#{safe_name(name)}")
if last_obj.respond_to?(:couchdb_rev)
rev = last_obj.couchdb_rev
else
rev = last_obj['_rev']
end
end
@rest.delete_rest("#{Chef::Config[:couchdb_database]}/#{obj_type}_#{safe_name(name)}?rev=#{rev}")
end
|
#get_view(design, view, options = {}) ⇒ Object
147
148
149
150
151
152
153
|
# File 'lib/chef/couchdb.rb', line 147
def get_view(design, view, options={})
view_string = view_uri(design, view)
view_string << "?" if options.length != 0
first = true;
options.each { |k,v| view_string << "#{first ? '' : '&'}#{k}=#{URI.escape(v.to_json)}"; first = false }
@rest.get_rest(view_string)
end
|
#has_key?(obj_type, name) ⇒ Boolean
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/chef/couchdb.rb', line 128
def has_key?(obj_type, name)
validate(
{
:obj_type => obj_type,
:name => name,
},
{
:obj_type => { :kind_of => String },
:name => { :kind_of => String },
}
)
begin
@rest.get_rest("#{Chef::Config[:couchdb_database]}/#{obj_type}_#{safe_name(name)}")
true
rescue
false
end
end
|
#list(view, inflate = false) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/chef/couchdb.rb', line 112
def list(view, inflate=false)
validate(
{
:view => view,
},
{
:view => { :kind_of => String }
}
)
if inflate
@rest.get_rest(view_uri(view, "all"))
else
@rest.get_rest(view_uri(view, "all_id"))
end
end
|
#load(obj_type, name) ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/chef/couchdb.rb', line 76
def load(obj_type, name)
validate(
{
:obj_type => obj_type,
:name => name,
},
{
:obj_type => { :kind_of => String },
:name => { :kind_of => String },
}
)
@rest.get_rest("#{Chef::Config[:couchdb_database]}/#{obj_type}_#{safe_name(name)}")
end
|
#store(obj_type, name, object) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/chef/couchdb.rb', line 62
def store(obj_type, name, object)
validate(
{
:obj_type => obj_type,
:name => name,
:object => object,
},
{
:object => { :respond_to => :to_json },
}
)
@rest.put_rest("#{Chef::Config[:couchdb_database]}/#{obj_type}_#{safe_name(name)}", object)
end
|
#view_uri(design, view) ⇒ Object
155
156
157
158
159
160
161
162
163
164
165
166
167
|
# File 'lib/chef/couchdb.rb', line 155
def view_uri(design, view)
Chef::Config[:couchdb_version] ||= @rest.run_request(:GET,
URI.parse(@rest.url + "/"),
false,
10,
false)["version"].gsub(/-.+/,"").to_f
case Chef::Config[:couchdb_version]
when 0.8
"#{Chef::Config[:couchdb_database]}/_view/#{design}/#{view}"
else
"#{Chef::Config[:couchdb_database]}/_design/#{design}/_view/#{view}"
end
end
|