got view queries happening correctly

This commit is contained in:
Chris Anderson 2008-11-21 16:21:20 -08:00
parent 32ffbfe019
commit 19a70ffd7d
7 changed files with 106 additions and 60 deletions

View file

@ -144,6 +144,8 @@ module CouchRest
# DELETE the document from CouchDB that has the given <tt>_id</tt> and
# <tt>_rev</tt>.
def delete doc
raise ArgumentError, "_id and _rev required for deleting" unless doc['_id'] && doc['_rev']
slug = CGI.escape(doc['_id'])
CouchRest.delete "#{@root}/#{slug}?rev=#{doc['_rev']}"
end

View file

@ -1,7 +1,6 @@
module CouchRest
class Design < Document
def view_by *keys
# @stale = true
opts = keys.pop if keys.last.is_a?(Hash)
opts ||= {}
self['views'] ||= {}
@ -29,6 +28,7 @@ module CouchRest
self['views'][method_name] = {
'map' => map_function
}
self['views'][method_name]['couchrest-defaults'] = opts
method_name
end
end
@ -43,24 +43,23 @@ module CouchRest
# end
# Dispatches to any named view.
def view name, query={}, &block
# if @stale
# self.save
# end
view_name = "#{slug}/#{name}"
fetch_view(view_name, query, &block)
def view view_name, query={}, &block
view_name = view_name.to_s
view_slug = "#{name}/#{view_name}"
defaults = (self['views'][view_name] && self['views'][view_name]["couchrest-defaults"]) || {}
fetch_view(view_slug, defaults.merge(query), &block)
end
def slug
id.sub('_design/','')
def name
id.sub('_design/','') if id
end
def slug= newslug
self['_id'] = "_design/#{newslug}"
def name= newname
self['_id'] = "_design/#{newname}"
end
def save
raise ArgumentError, "_design" unless slug && slug.length > 0
raise ArgumentError, "_design docs require a name" unless name && name.length > 0
super
end

View file

@ -37,17 +37,15 @@ module CouchRest
# CouchDB's response.
def save
raise ArgumentError, "doc.database required for saving" unless database
if new_record?
create
else
update
end
result = database.save self
result['ok']
end
# Deletes the document from the database. Runs the :delete callbacks.
# Removes the <tt>_id</tt> and <tt>_rev</tt> fields, preparing the
# document to be saved to a new <tt>_id</tt>.
def destroy
raise ArgumentError, "doc.database required to destroy" unless database
result = database.delete self
if result['ok']
self['_rev'] = nil
@ -56,27 +54,6 @@ module CouchRest
result['ok']
end
protected
# Saves a document for the first time, after running the before(:create)
# callbacks, and applying the unique_id.
def create
set_unique_id if respond_to?(:set_unique_id) # hack
save_doc
end
# Saves the document and runs the :update callbacks.
def update
save_doc
end
private
def save_doc
result = database.save self
result['ok']
end
end