Class: Mongo::Grid
- Includes:
- Mongo::GridExt::InstanceMethods
- Defined in:
- lib/mongo/gridfs/grid.rb
Overview
Implementation of the MongoDB GridFS specification. A file store.
Constant Summary collapse
- DEFAULT_FS_NAME =
'fs'
Instance Method Summary collapse
-
#delete(id) ⇒ Boolean
Delete a file from the store.
-
#get(id) ⇒ Mongo::GridIO
Read a file from the file store.
-
#initialize(db, fs_name = DEFAULT_FS_NAME) ⇒ Grid
constructor
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
-
#put(data, opts = {}) ⇒ Mongo::ObjectId
Store a file in the file store.
Methods included from Mongo::GridExt::InstanceMethods
Constructor Details
#initialize(db, fs_name = DEFAULT_FS_NAME) ⇒ Grid
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/mongo/gridfs/grid.rb', line 33 def initialize(db, fs_name=DEFAULT_FS_NAME) raise MongoArgumentError, "db must be a Mongo::DB." unless db.is_a?(Mongo::DB) @db = db @files = @db["#{fs_name}.files"] @chunks = @db["#{fs_name}.chunks"] @fs_name = fs_name # Ensure indexes only if not connected to slave. unless db.connection.slave_ok? @chunks.create_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true) end end |
Instance Method Details
#delete(id) ⇒ Boolean
Delete a file from the store.
Note that deleting a GridFS file can result in read errors if another process is attempting to read a file while it’s being deleted. While the odds for this kind of race condition are small, it’s important to be aware of.
95 96 97 98 |
# File 'lib/mongo/gridfs/grid.rb', line 95 def delete(id) @files.remove({"_id" => id}) @chunks.remove({"files_id" => id}) end |
#get(id) ⇒ Mongo::GridIO
Read a file from the file store.
81 82 83 84 |
# File 'lib/mongo/gridfs/grid.rb', line 81 def get(id) opts = {:query => {'_id' => id}}.merge!(default_grid_io_opts) GridIO.new(@files, @chunks, nil, 'r', opts) end |
#put(data, opts = {}) ⇒ Mongo::ObjectId
Store a file in the file store. This method is designed only for writing new files; if you need to update a given file, first delete it using Grid#delete.
Note that arbitary metadata attributes can be saved to the file by passing them in as options.
67 68 69 70 71 72 73 74 |
# File 'lib/mongo/gridfs/grid.rb', line 67 def put(data, opts={}) filename = opts.delete :filename opts.merge!(default_grid_io_opts) file = GridIO.new(@files, @chunks, filename, 'w', opts=opts) file.write(data) file.close file.files_id end |