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