class Dragonfly::CouchDataStore
Constants
- VERSION
Attributes
database[R]
host[R]
password[R]
port[R]
username[R]
Public Class Methods
new(opts={})
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 11 def initialize(opts={}) @host = opts[:host] || 'localhost' @port = opts[:port] || '5984' @database = opts[:database] || 'dragonfly' @username = opts[:username] @password = opts[:password] end
Public Instance Methods
db()
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 48 def db @db ||= begin url = "http://#{auth}#{host}:#{port}" CouchRest.new(url).database!(database) end end
destroy(uid)
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 40 def destroy(uid) doc_id, attachment = parse_uid(uid) doc = db.get(doc_id) db.delete_doc(doc) rescue RestClient::ResourceNotFound => e Dragonfly.warn("#{self.class.name} destroy error: #{e}") end
read(uid)
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 32 def read(uid) doc_id, attachment = parse_uid(uid) doc = db.get(doc_id) [doc.fetch_attachment(attachment), extract_meta(doc)] rescue RestClient::ResourceNotFound => e nil end
url_for(uid, opts={})
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 55 def url_for(uid, opts={}) doc_id, attachment = parse_uid(uid) "http://#{host}:#{port}/#{database}/#{doc_id}/#{attachment}" end
write(content, opts={})
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 21 def write(content, opts={}) name = content.name || 'file' content.file do |f| doc = CouchRest::Document.new(:meta => content.meta) response = db.save_doc(doc) doc.put_attachment(name, f.dup, :content_type => content.mime_type) form_uid(response['id'], name) end end
Private Instance Methods
auth()
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 62 def auth username ? "#{username}:#{password}@" : nil end
extract_meta(doc)
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 75 def extract_meta(doc) meta = doc['meta'] meta = Utils.stringify_keys(marshal_b64_decode(meta)) if meta.is_a?(String) # Deprecated encoded meta meta end
form_uid(doc_id, attachment)
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 66 def form_uid(doc_id, attachment) "#{doc_id}/#{attachment}" end
parse_uid(uid)
click to toggle source
# File lib/dragonfly/couch_data_store.rb, line 70 def parse_uid(uid) doc_id, attachment = uid.split('/') [doc_id, (attachment || 'file')] end