Class: Mongo::Grid

Inherits:
Object show all
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

Methods included from Mongo::GridExt::InstanceMethods

#exist?

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.

Parameters:

  • []

    id

Returns:

  • (Boolean)


96
97
98
99
# File 'lib/mongo/gridfs/grid.rb', line 96

def delete(id)
  @files.remove({"_id" => id})
  @chunks.remove({"files_id" => id})
end

#get(id) ⇒ Mongo::GridIO

Read a file from the file store.

Parameters:

  • []

    id the file’s unique id.

Returns:



82
83
84
85
# File 'lib/mongo/gridfs/grid.rb', line 82

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.

Parameters:

  • data (String, #read)

    a string or io-like object to store.

  • opts (Hash) (defaults to: {})

    a customizable set of options

Options Hash (opts):

  • :filename (String) — default: nil

    a name for the file.

  • :metadata (Hash) — default: {}

    any additional data to store with the file.

  • :_id (ObjectId) — default: ObjectId

    a unique id for the file to be use in lieu of an automatically generated one.

  • :content_type (String) — default: 'binary/octet-stream'

    If no content type is specified, the content type will may be inferred from the filename extension if the mime-types gem can be loaded. Otherwise, the content type ‘binary/octet-stream’ will be used.

  • (262144) (Integer)

    :chunk_size size of file chunks in bytes.

  • :safe (Boolean) — default: false

    When safe mode is enabled, the chunks sent to the server will be validated using an md5 hash. If validation fails, an exception will be raised.

Returns:

  • (Mongo::ObjectId)

    the file’s id.



67
68
69
70
71
72
73
74
75
# File 'lib/mongo/gridfs/grid.rb', line 67

def put(data, opts={})
  opts     = opts.dup
  filename = opts[: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