couchrest_model/lib/database.rb

89 lines
2.1 KiB
Ruby
Raw Normal View History

require 'cgi'
2008-06-07 17:32:51 +02:00
require "base64"
2008-06-20 21:43:28 +02:00
require File.dirname(__FILE__) + '/couchrest'
2008-03-18 19:37:10 +01:00
class CouchRest
class Database
attr_accessor :host, :name
def initialize host, name
@name = name
@host = host
2008-03-19 16:57:20 +01:00
@root = "#{host}/#{name}"
2008-03-18 19:37:10 +01:00
end
2008-05-25 02:01:28 +02:00
def documents params = nil
url = CouchRest.paramify_url "#{@root}/_all_docs", params
CouchRest.get url
2008-03-19 16:57:20 +01:00
end
def temp_view funcs, params = nil
url = CouchRest.paramify_url "#{@root}/_temp_view", params
JSON.parse(RestClient.post(url, funcs.to_json, {"Content-Type" => 'application/json'}))
2008-03-20 02:10:16 +01:00
end
def view name, params = nil
url = CouchRest.paramify_url "#{@root}/_view/#{name}", params
CouchRest.get url
2008-03-19 16:57:20 +01:00
end
# experimental
def search params = nil
url = CouchRest.paramify_url "#{@root}/_search", params
CouchRest.get url
end
2008-07-05 01:56:09 +02:00
# experimental
def action action, params = nil
url = CouchRest.paramify_url "#{@root}/_action/#{action}", params
CouchRest.get url
end
2008-03-19 18:17:25 +01:00
def get id
2008-06-07 17:32:51 +02:00
slug = CGI.escape(id)
CouchRest.get "#{@root}/#{slug}"
2008-03-19 18:17:25 +01:00
end
2008-03-19 16:57:20 +01:00
2008-06-07 17:32:51 +02:00
def fetch_attachment doc, name
doc = CGI.escape(doc)
name = CGI.escape(name)
RestClient.get "#{@root}/#{doc}/#{name}"
end
# PUT or POST depending on presence of _id attribute
2008-03-19 16:57:20 +01:00
def save doc
2008-06-07 17:32:51 +02:00
if doc['_attachments']
doc['_attachments'] = encode_attachments(doc['_attachments'])
end
2008-03-19 16:57:20 +01:00
if doc['_id']
slug = CGI.escape(doc['_id'])
CouchRest.put "#{@root}/#{slug}", doc
2008-03-19 16:57:20 +01:00
else
CouchRest.post "#{@root}", doc
end
end
2008-03-20 00:38:07 +01:00
def bulk_save docs
CouchRest.post "#{@root}/_bulk_docs", {:docs => docs}
2008-03-20 00:38:07 +01:00
end
def delete doc
slug = CGI.escape(doc['_id'])
CouchRest.delete "#{@root}/#{slug}?rev=#{doc['_rev']}"
end
2008-03-18 19:37:10 +01:00
def delete!
2008-03-19 16:57:20 +01:00
CouchRest.delete @root
2008-03-18 19:37:10 +01:00
end
2008-06-07 17:32:51 +02:00
private
def encode_attachments attachments
attachments.each do |k,v|
2008-06-12 17:40:52 +02:00
next if v['stub']
2008-06-07 18:05:29 +02:00
v['data'] = base64(v['data'])
2008-06-07 17:32:51 +02:00
end
2008-06-07 18:05:29 +02:00
attachments
2008-06-07 17:32:51 +02:00
end
def base64 data
Base64.encode64(data).gsub(/\s/,'')
end
2008-03-18 19:37:10 +01:00
end
2008-06-20 23:26:26 +02:00
end