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
Takes an array of chunks and assembles them back into the full piece of raw data.
-
.split(io, file_info, offset = 0) ⇒ Array<Chunk>
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 = BSON::Config.validating_keys?) ⇒ String
Conver the chunk to BSON for storage.
Constructor Details
#initialize(document) ⇒ Chunk
Create the new chunk.
124 125 126 |
# File 'lib/mongo/grid/file/chunk.rb', line 124 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.
38 39 40 |
# File 'lib/mongo/grid/file/chunk.rb', line 38 def document @document end |
Class Method Details
.assemble(chunks) ⇒ String
Takes an array of chunks and assembles them back into the full piece of raw data.
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>
Split the provided data into multiple chunks.
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.
50 51 52 53 |
# File 'lib/mongo/grid/file/chunk.rb', line 50 def ==(other) return false unless other.is_a?(Chunk) document == other.document end |
#bson_type ⇒ Integer
Get the BSON type for a chunk document.
63 64 65 |
# File 'lib/mongo/grid/file/chunk.rb', line 63 def bson_type BSON::Hash::BSON_TYPE end |
#data ⇒ BSON::Binary
Get the chunk data.
75 76 77 |
# File 'lib/mongo/grid/file/chunk.rb', line 75 def data document[:data] end |
#files_id ⇒ BSON::ObjectId
Get the files id.
99 100 101 |
# File 'lib/mongo/grid/file/chunk.rb', line 99 def files_id document[:files_id] end |
#id ⇒ BSON::ObjectId
Get the chunk id.
87 88 89 |
# File 'lib/mongo/grid/file/chunk.rb', line 87 def id document[:_id] end |
#n ⇒ Integer
Get the chunk position.
111 112 113 |
# File 'lib/mongo/grid/file/chunk.rb', line 111 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.
139 140 141 |
# File 'lib/mongo/grid/file/chunk.rb', line 139 def to_bson(buffer = BSON::ByteBuffer.new, validating_keys = BSON::Config.validating_keys?) document.to_bson(buffer) end |