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