Class: Dragonfly::DataStorage::MongoDataStore

Inherits:
Object
  • Object
show all
Defined in:
lib/dragonfly/data_storage/mongo_data_store.rb

Constant Summary collapse

OBJECT_ID =

Mongo gem deprecated ObjectID in favour of ObjectId

defined?(BSON::ObjectId) ? BSON::ObjectId : BSON::ObjectID
INVALID_OBJECT_ID =
defined?(BSON::InvalidObjectId) ? BSON::InvalidObjectId : BSON::InvalidObjectID

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ MongoDataStore

Returns a new instance of MongoDataStore.



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 24

def initialize(opts={})
  self.host = opts[:host]
  self.hosts = opts[:hosts]
  self.connection_opts = opts[:connection_opts] if opts[:connection_opts]
  self.port = opts[:port]
  self.database = opts[:database] if opts[:database]
  self.username = opts[:username]
  self.password = opts[:password]
  self.connection = opts[:connection]
  self.db = opts[:db]
end

Instance Method Details

#connectionObject



66
67
68
69
70
71
72
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 66

def connection
  @connection ||= if hosts
    Mongo::ReplSetConnection.new(hosts, connection_opts)
  else
    Mongo::Connection.new(host, port, connection_opts)
  end
end

#dbObject



74
75
76
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 74

def db
  @db ||= connection.db(database)
end

#destroy(uid) ⇒ Object

Raises:



59
60
61
62
63
64
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 59

def destroy(uid)
  ensure_authenticated!
  grid.delete(bson_id(uid))
rescue Mongo::GridFileNotFound, INVALID_OBJECT_ID => e
  raise DataNotFound, "#{e} - #{uid}"
end

#gridObject



78
79
80
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 78

def grid
  @grid ||= Mongo::Grid.new(db)
end

#retrieve(uid) ⇒ Object

Raises:



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 46

def retrieve(uid)
  ensure_authenticated!
  grid_io = grid.get(bson_id(uid))
  meta = marshal_decode(grid_io.)
  meta.merge!(:stored_at => grid_io.upload_date)
  [
    grid_io.read,
    meta
  ]
rescue Mongo::GridFileNotFound, INVALID_OBJECT_ID => e
  raise DataNotFound, "#{e} - #{uid}"
end

#store(temp_object, opts = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/dragonfly/data_storage/mongo_data_store.rb', line 36

def store(temp_object, opts={})
  ensure_authenticated!
  content_type = opts[:content_type] || opts[:mime_type] || 'application/octet-stream'
  temp_object.file do |f|
    mongo_id = grid.put(f, :content_type => content_type,
                           :metadata => marshal_encode(temp_object.meta))
    mongo_id.to_s
  end
end