Class: ShyCouch::CouchDatabase
- Inherits:
-
Object
- Object
- ShyCouch::CouchDatabase
show all
- Defined in:
- lib/ShyCouch.rb
Defined Under Namespace
Classes: CouchServerConnection
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of CouchDatabase.
41
42
43
|
# File 'lib/ShyCouch.rb', line 41
def initialize(settings)
init(settings)
end
|
Instance Attribute Details
#design_documents ⇒ Object
Returns the value of attribute design_documents.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def design_documents
@design_documents
end
|
#designs ⇒ Object
Returns the value of attribute designs.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def designs
@designs
end
|
#host ⇒ Object
Returns the value of attribute host.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def host
@host
end
|
#name ⇒ Object
Returns the value of attribute name.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def name
@name
end
|
#port ⇒ Object
Returns the value of attribute port.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def port
@port
end
|
#server ⇒ Object
Returns the value of attribute server.
45
46
47
|
# File 'lib/ShyCouch.rb', line 45
def server
@server
end
|
Instance Method Details
#add_design(design) ⇒ Object
153
154
155
156
157
158
159
160
161
|
# File 'lib/ShyCouch.rb', line 153
def add_design(design)
throw TypeError unless design.kind_of?(ShyCouch::Data::Design)
if design_by_name(design.name) != nil
design_by_name(design.name) == design
end
@designs << design
end
|
#add_design_and_push!(doc) ⇒ Object
170
171
172
173
|
# File 'lib/ShyCouch.rb', line 170
def add_design_and_push!(doc)
add_design(doc)
push_designs!
end
|
#add_designs_and_push!(*docs) ⇒ Object
163
164
165
166
167
168
|
# File 'lib/ShyCouch.rb', line 163
def add_designs_and_push!(*docs)
docs.each do |doc|
add_design(doc)
end
push_designs!
end
|
#all_docs ⇒ Object
90
91
92
93
94
|
# File 'lib/ShyCouch.rb', line 90
def all_docs
get_document_by_id('_all_docs').rows.map { |doc|
get_document_by_id(doc["id"])
}
end
|
#connect ⇒ Object
47
48
49
50
51
52
53
54
|
# File 'lib/ShyCouch.rb', line 47
def connect
@server = CouchServerConnection.new({"host"=>@host, "port"=>@port, "user"=>@user, "password"=>@password, "database" => @name})
if @server.responds?
return {"ok"=>true, "message"=>"Successfully connected to the couch database at #{@host}:#{@port}"}
else
return {"ok"=>false, "message"=>"Could not connect to the couch database."}
end
end
|
#create! ⇒ Object
79
80
81
|
# File 'lib/ShyCouch.rb', line 79
def create!
@server.create_db(@name)
end
|
#delete! ⇒ Object
55
56
57
|
# File 'lib/ShyCouch.rb', line 55
def delete!
@server.delete_db(self.name)
end
|
#delete_document!(doc, opts = {}) ⇒ Object
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/ShyCouch.rb', line 111
def delete_document!(doc, opts = {})
if !doc._id
if !doc._rev
raise ShyCouch::DocumentValidationError, "Cannot delete document without id and rev" unless doc._id
else
raise ShyCouch::DocumentValidationError, "Cannot delete document without id" unless doc._id
end
elsif !doc._rev
raise ShyCouch::DocumentValidationError, "Cannot delete document without id" unless doc._id
end
@server.delete_document(self.name, doc)
end
|
#design(design) ⇒ Object
63
64
65
66
67
68
69
|
# File 'lib/ShyCouch.rb', line 63
def design(design)
if design.kind_of?(ShyCouch::Data::Design)
return design_by_name(design.name)
else
return design_by_name(design)
end
end
|
#design_by_name(name) ⇒ Object
71
72
73
74
|
# File 'lib/ShyCouch.rb', line 71
def design_by_name(name)
@designs.each { |design| return design if design.name == name.to_s }
return nil
end
|
#exists? ⇒ Boolean
76
77
78
|
# File 'lib/ShyCouch.rb', line 76
def exists?
@server.has_database?(@name)
end
|
#getDocumentById(id) ⇒ Object
82
83
84
|
# File 'lib/ShyCouch.rb', line 82
def getDocumentById(id)
@server.get_document_by_id(@name, id)
end
|
#init! ⇒ Object
60
61
62
|
# File 'lib/ShyCouch.rb', line 60
def init!
create! unless exists?
end
|
#pull_design(designName) ⇒ Object
86
87
88
89
|
# File 'lib/ShyCouch.rb', line 86
def pull_design(designName)
doc = @server.get_document_by_id(@name, designName)
return ShyCouch::Data::Design.new(designName).merge! doc
end
|
#pull_document(document) ⇒ Object
99
100
101
102
103
|
# File 'lib/ShyCouch.rb', line 99
def pull_document(document)
@server.pull_document(self.name, document)
rescue RestClient::ResourceNotFound
raise ShyCouch::ResourceNotFound
end
|
#push_designs! ⇒ Object
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
# File 'lib/ShyCouch.rb', line 175
def push_designs!
@designs.each do |design|
begin
design._rev = push_document!(design)["rev"]
rescue ShyCouch::DesignConflict => e
existing_design = get_document_by_id design._id
design._rev = existing_design._rev
design._rev = push_document!(design)["rev"]
end
end
end
|
#push_document!(doc, opts = {}) ⇒ Object
105
106
107
108
109
|
# File 'lib/ShyCouch.rb', line 105
def push_document!(doc, opts = {})
raise(ShyCouch::DocumentValidationError, "Document missing required fields: #{doc.missing_needs}") unless doc.satisfies_needs?
raise ShyCouch::DocumentValidationError, "Document missing suggested fields, not overriden: #{doc.missing_suggestions}" unless doc.satisfies_suggestions?(opts)
@server.push_document(self.name, doc)
end
|
#query_string(opts = {}) ⇒ Object
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/ShyCouch.rb', line 138
def query_string(opts = {})
exceptions = [:from]
return opts.map{ |k,v|
raise ShyCouch::ViewError, "Illegal view option: #{k}" unless @legal_view_options.has_key? k
if @legal_view_options[k][:stringify] == true
"#{k.to_s}=#{URI.escape(v.to_s.to_json)}" if !exceptions.include? k
else
"#{k.to_s}=#{v.to_s}" if !exceptions.include? k
end
}.join("&")
end
|
#query_view(design_name, view_name, opts = {}) ⇒ Object
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/ShyCouch.rb', line 124
def query_view(design_name, view_name, opts = {})
uri = "_design/#{design_name}/_view/#{view_name}"
uri += "?#{query_string opts}" if opts.length > 0
result = ShyCouch::Data::ViewResultHandler.init(get_document_by_id(uri))
if opts.has_key? :key and result.kind_of? ShyCouch::Data::CouchDocumentCollection return result[0]
else
return result
end
end
|
#server_responds? ⇒ Boolean
58
|
# File 'lib/ShyCouch.rb', line 58
def server_responds?; return @server.responds?; end
|
#uri ⇒ Object
95
96
97
|
# File 'lib/ShyCouch.rb', line 95
def uri
return "http://#{host}/#{port}/#{name}"
end
|
#view(design, view_obj) ⇒ Object
190
191
192
193
|
# File 'lib/ShyCouch.rb', line 190
def view(design, view_obj)
url = "#{design._id}/_view/#{view_obj.name}"
get_document_by_id(url)
end
|