Class: Mongo::Grid::File::Chunk
- Inherits:
-
Object
- Object
- Mongo::Grid::File::Chunk
- Defined in:
- lib/mongo/grid/file/chunk.rb
Overview
Encapsulates behavior around GridFS chunks of file data.
Constant Summary collapse
- COLLECTION =
Name of the chunks collection.
'chunks'.freeze
- DEFAULT_SIZE =
Default size for chunks of data.
(255 * 1024).freeze
Instance Attribute Summary collapse
-
#document ⇒ BSON::Document
readonly
Document The document to store for the chunk.
Class Method Summary collapse
-
.assemble(chunks) ⇒ String
private
Takes an array of chunks and assembles them back into the full piece of raw data.
-
.split(io, file_info, offset = 0) ⇒ Array<Chunk>
private
Split the provided data into multiple chunks.
Instance Method Summary collapse
-
#==(other) ⇒ true, false
Check chunk equality.
-
#bson_type ⇒ Integer
Get the BSON type for a chunk document.
-
#data ⇒ BSON::Binary
Get the chunk data.
-
#files_id ⇒ BSON::ObjectId
Get the files id.
-
#id ⇒ BSON::ObjectId
Get the chunk id.
-
#initialize(document) ⇒ Chunk
constructor
Create the new chunk.
-
#n ⇒ Integer
Get the chunk position.
-
#to_bson(buffer = BSON::ByteBuffer.new, validating_keys = nil) ⇒ String
Conver the chunk to BSON for storage.
Constructor Details
#initialize(document) ⇒ Chunk
Create the new chunk.
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
#document ⇒ BSON::Document (readonly)
Returns document The document to store for the chunk.
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.
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.
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.
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_type ⇒ Integer
Get the BSON type for a chunk document.
64 65 66 |
# File 'lib/mongo/grid/file/chunk.rb', line 64 def bson_type BSON::Hash::BSON_TYPE end |
#data ⇒ BSON::Binary
Get the chunk data.
76 77 78 |
# File 'lib/mongo/grid/file/chunk.rb', line 76 def data document[:data] end |
#files_id ⇒ BSON::ObjectId
Get the files id.
100 101 102 |
# File 'lib/mongo/grid/file/chunk.rb', line 100 def files_id document[:files_id] end |
#id ⇒ BSON::ObjectId
Get the chunk id.
88 89 90 |
# File 'lib/mongo/grid/file/chunk.rb', line 88 def id document[:_id] end |
#n ⇒ Integer
Get the chunk position.
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.
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 |