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)

Since:

  • 2.0.0



125
126
127
# File 'lib/mongo/grid/file/chunk.rb', line 125

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.

Since:

  • 2.0.0



39
40
41
# File 'lib/mongo/grid/file/chunk.rb', line 39

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)

Since:

  • 2.0.0



159
160
161
# File 'lib/mongo/grid/file/chunk.rb', line 159

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)

Since:

  • 2.0.0



176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/mongo/grid/file/chunk.rb', line 176

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

Since:

  • 2.0.0



51
52
53
54
# File 'lib/mongo/grid/file/chunk.rb', line 51

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

Since:

  • 2.0.0



64
65
66
# File 'lib/mongo/grid/file/chunk.rb', line 64

def bson_type
  BSON::Hash::BSON_TYPE
end

#dataBSON::Binary

Get the chunk data.

Examples:

Get the chunk data.

chunk.data

Since:

  • 2.0.0



76
77
78
# File 'lib/mongo/grid/file/chunk.rb', line 76

def data
  document[:data]
end

#files_idBSON::ObjectId

Get the files id.

Examples:

Get the files id.

chunk.files_id

Since:

  • 2.0.0



100
101
102
# File 'lib/mongo/grid/file/chunk.rb', line 100

def files_id
  document[:files_id]
end

#idBSON::ObjectId

Get the chunk id.

Examples:

Get the chunk id.

chunk.id

Since:

  • 2.0.0



88
89
90
# File 'lib/mongo/grid/file/chunk.rb', line 88

def id
  document[:_id]
end

#nInteger

Get the chunk position.

Examples:

Get the chunk position.

chunk.n

Since:

  • 2.0.0



112
113
114
# File 'lib/mongo/grid/file/chunk.rb', line 112

def n
  document[:n]
end

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

Conver the chunk to BSON for storage.

Examples:

Convert the chunk to BSON.

chunk.to_bson

Since:

  • 2.0.0



141
142
143
# File 'lib/mongo/grid/file/chunk.rb', line 141

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