Class: Mongo::Grid::File::Chunk

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/grid/file/chunk.rb

Overview

Encapsulates behavior around GridFS chunks of file data.

Since:

  • 2.0.0

Constant Summary collapse

COLLECTION =

Name of the chunks collection.

Since:

  • 2.0.0

'chunks'.freeze
DEFAULT_SIZE =

Default size for chunks of data.

Since:

  • 2.0.0

(255 * 1024).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document) ⇒ Chunk

Create the new chunk.

Examples:

Create the chunk.

Chunk.new(document)

Parameters:

  • document (BSON::Document)

    The document to create the chunk from.

Since:

  • 2.0.0



122
123
124
# File 'lib/mongo/grid/file/chunk.rb', line 122

def initialize(document)
  @document = BSON::Document.new(:_id => BSON::ObjectId.new).merge(document)
end

Instance Attribute Details

#documentBSON::Document (readonly)

Returns document The document to store for the chunk.

Returns:

  • (BSON::Document)

    document The document to store for the chunk.

Since:

  • 2.0.0



36
37
38
# File 'lib/mongo/grid/file/chunk.rb', line 36

def document
  @document
end

Class Method Details

.assemble(chunks) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Takes an array of chunks and assembles them back into the full piece of raw data.

Examples:

Assemble the chunks.

Chunk.assemble(chunks)

Parameters:

  • chunks (Array<Chunk>)

    The chunks.

Returns:

  • (String)

    The assembled data.

Since:

  • 2.0.0



155
156
157
# File 'lib/mongo/grid/file/chunk.rb', line 155

def assemble(chunks)
  chunks.reduce(''){ |data, chunk| data << chunk.data.data }
end

.split(io, file_info, offset = 0) ⇒ Array<Chunk>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Split the provided data into multiple chunks.

Examples:

Split the data into chunks.

Chunks.split(data)

Parameters:

  • io (String, IO)

    The raw bytes.

  • file_info (File::Info)

    The files collection file doc.

  • offset (Integer) (defaults to: 0)

    The offset.

Returns:

  • (Array<Chunk>)

    The chunks of the data.

Since:

  • 2.0.0



172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/mongo/grid/file/chunk.rb', line 172

def split(io, file_info, offset = 0)
  io = StringIO.new(io) if io.is_a?(String)
  parts = Enumerator.new { |y| y << io.read(file_info.chunk_size) until io.eof? }
  parts.map.with_index do |bytes, n|
    file_info.update_md5(bytes)
    Chunk.new(
      data: BSON::Binary.new(bytes),
      files_id: file_info.id,
      n: n + offset
    )
  end
end

Instance Method Details

#==(other) ⇒ true, false

Check chunk equality.

Examples:

Check chunk equality.

chunk == other

Parameters:

  • other (Object)

    The object ot compare to.

Returns:

  • (true, false)

    If the objects are equal.

Since:

  • 2.0.0



48
49
50
51
# File 'lib/mongo/grid/file/chunk.rb', line 48

def ==(other)
  return false unless other.is_a?(Chunk)
  document == other.document
end

#bson_typeInteger

Get the BSON type for a chunk document.

Examples:

Get the BSON type.

chunk.bson_type

Returns:

  • (Integer)

    The BSON type.

Since:

  • 2.0.0



61
62
63
# File 'lib/mongo/grid/file/chunk.rb', line 61

def bson_type
  BSON::Hash::BSON_TYPE
end

#dataBSON::Binary

Get the chunk data.

Examples:

Get the chunk data.

chunk.data

Returns:

  • (BSON::Binary)

    The chunk data.

Since:

  • 2.0.0



73
74
75
# File 'lib/mongo/grid/file/chunk.rb', line 73

def data
  document[:data]
end

#files_idBSON::ObjectId

Get the files id.

Examples:

Get the files id.

chunk.files_id

Returns:

  • (BSON::ObjectId)

    The files id.

Since:

  • 2.0.0



97
98
99
# File 'lib/mongo/grid/file/chunk.rb', line 97

def files_id
  document[:files_id]
end

#idBSON::ObjectId

Get the chunk id.

Examples:

Get the chunk id.

chunk.id

Returns:

  • (BSON::ObjectId)

    The chunk id.

Since:

  • 2.0.0



85
86
87
# File 'lib/mongo/grid/file/chunk.rb', line 85

def id
  document[:_id]
end

#nInteger

Get the chunk position.

Examples:

Get the chunk position.

chunk.n

Returns:

  • (Integer)

    The chunk position.

Since:

  • 2.0.0



109
110
111
# File 'lib/mongo/grid/file/chunk.rb', line 109

def n
  document[:n]
end

#to_bson(buffer = BSON::ByteBuffer.new, validating_keys = BSON::Config.validating_keys?) ⇒ String

Conver the chunk to BSON for storage.

Examples:

Convert the chunk to BSON.

chunk.to_bson

Parameters:

  • buffer (BSON::ByteBuffer) (defaults to: BSON::ByteBuffer.new)

    The encoded BSON buffer to append to.

  • validating_keys (true, false) (defaults to: BSON::Config.validating_keys?)

    Whether keys should be validated when serializing.

Returns:

  • (String)

    The raw BSON data.

Since:

  • 2.0.0



137
138
139
# File 'lib/mongo/grid/file/chunk.rb', line 137

def to_bson(buffer = BSON::ByteBuffer.new, validating_keys = BSON::Config.validating_keys?)
  document.to_bson(buffer)
end