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'
DEFAULT_SIZE =

Default size for chunks of data.

Since:

  • 2.0.0

(255 * 1024)

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



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

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



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

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



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

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
52
# 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



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

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



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

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



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

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



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

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



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

def n
  document[:n]
end

#to_bson(buffer = BSON::ByteBuffer.new, _validating_keys = nil) ⇒ String

Convert 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)

    Whether keys should be validated when serializing. This option is deprecated and will not be used. It will removed in version 3.0.

Returns:

  • (String)

    The raw BSON data.

Since:

  • 2.0.0



139
140
141
# File 'lib/mongo/grid/file/chunk.rb', line 139

def to_bson(buffer = BSON::ByteBuffer.new, _validating_keys = nil)
  document.to_bson(buffer)
end