class Dragonfly::MongoDataStore

Constants

VERSION

Attributes

connection_opts[RW]
database[RW]
host[RW]
hosts[RW]
password[RW]
port[RW]
username[RW]

Public Class Methods

new(opts={}) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 11
def initialize(opts={})
  @host            = opts[:host]
  @hosts           = opts[:hosts]
  @connection_opts = opts[:connection_opts] || {}
  @port            = opts[:port]
  @database        = opts[:database] || 'dragonfly'
  @username        = opts[:username]
  @password        = opts[:password]
  @connection      = opts[:connection]
  @db              = opts[:db]
end

Public Instance Methods

connection() click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 49
def connection
  @connection ||= if hosts
    Mongo::ReplSetConnection.new(hosts, connection_opts)
  else
    Mongo::Connection.new(host, port, connection_opts)
  end
end
db() click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 57
def db
  @db ||= connection.db(database)
end
destroy(uid) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 42
def destroy(uid)
  ensure_authenticated!
  grid.delete(bson_id(uid))
rescue Mongo::GridFileNotFound, BSON::InvalidObjectId => e
  Dragonfly.warn("#{self.class.name} destroy error: #{e}")
end
grid() click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 61
def grid
  @grid ||= Mongo::Grid.new(db)
end
read(uid) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 33
def read(uid)
  ensure_authenticated!
  grid_io = grid.get(bson_id(uid))
  meta = extract_meta(grid_io)
  [grid_io.read, meta]
rescue Mongo::GridFileNotFound, BSON::InvalidObjectId => e
  nil
end
write(content, opts={}) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 25
def write(content, opts={})
  ensure_authenticated!
  content.file do |f|
    mongo_id = grid.put(f, :content_type => content.mime_type, :metadata => content.meta)
    mongo_id.to_s
  end
end

Private Instance Methods

bson_id(uid) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 73
def bson_id(uid)
  BSON::ObjectId.from_string(uid)
end
ensure_authenticated!() click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 67
def ensure_authenticated!
  if username
    @authenticated ||= db.authenticate(username, password)
  end
end
extract_meta(grid_io) click to toggle source
# File lib/dragonfly/mongo_data_store.rb, line 77
def extract_meta(grid_io)
  meta = grid_io.metadata
  meta = Utils.stringify_keys(marshal_b64_decode(meta)) if meta.is_a?(String) # Deprecated encoded meta
  meta.merge!('stored_at' => grid_io.upload_date)
  meta
end