Read — Documentation by YARD 0.9.37 (original) (raw)
Class: Mongo::Grid::FSBucket::Stream::Read
Inherits:
Object
- Object
- Mongo::Grid::FSBucket::Stream::Read show all
Includes:
Enumerable
Defined in:
lib/mongo/grid/stream/read.rb
Overview
A stream that reads files from the FSBucket.
Instance Attribute Summary collapse
- #file_id ⇒ BSON::ObjectId, Object readonly
File_id The id of the file being read. - #fs ⇒ FSBucket readonly
Fs The fs bucket from which this stream reads. - #options ⇒ Hash readonly
Options The stream options.
Instance Method Summarycollapse
- #close ⇒ BSON::ObjectId, Object
Close the read stream. - #closed? ⇒ true, false
Is the stream closed. - #each {|Each| ... } ⇒ Enumerator
Iterate through chunk data streamed from the FSBucket. - #file_info ⇒ File::Info
Get the files collection file information document for the file being read. - #initialize(fs, options) ⇒ Read constructor
Create a stream for reading files from the FSBucket. - #read ⇒ String
Read all file data. - #read_preference ⇒ BSON::Document
Get the read preference.
Constructor Details
#initialize(fs, options) ⇒ Read
Create a stream for reading files from the FSBucket.
56 57 58 59 60 61 62 63 64 65 66 67 68 | # File 'lib/mongo/grid/stream/read.rb', line 56 def initialize(fs, options) @fs = fs @options = options.dup @file_id = @options.delete(:file_id) @options.freeze @open = true @timeout_holder = CsotTimeoutHolder.new( operation_timeouts: { operation_timeout_ms: options[:timeout_ms], inherited_timeout_ms: fs.database.timeout_ms } ) end |
---|
Instance Attribute Details
#file_id ⇒ BSON::ObjectId, Object
Returns file_id The id of the file being read.
42 43 44 | # File 'lib/mongo/grid/stream/read.rb', line 42 def file_id @file_id end |
---|
#fs ⇒ FSBucket
Returns fs The fs bucket from which this stream reads.
32 33 34 | # File 'lib/mongo/grid/stream/read.rb', line 32 def fs @fs end |
---|
#options ⇒ Hash
Returns options The stream options.
37 38 39 | # File 'lib/mongo/grid/stream/read.rb', line 37 def options @options end |
---|
Instance Method Details
#close ⇒ BSON::ObjectId, Object
Close the read stream.
If the stream is already closed, this method does nothing.
131 132 133 134 135 136 137 | # File 'lib/mongo/grid/stream/read.rb', line 131 def close if @open view.close_query @open = false end file_id end |
---|
#closed? ⇒ true, false
147 148 149 | # File 'lib/mongo/grid/stream/read.rb', line 147 def closed? !@open end |
---|
#each {|Each| ... } ⇒ Enumerator
Iterate through chunk data streamed from the FSBucket.
| 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | # File 'lib/mongo/grid/stream/read.rb', line 84 def each ensure_readable! info = file_info num_chunks = (info.length + info.chunk_size - 1) / info.chunk_size num_read = 0 if block_given? view.each_with_index.reduce(0) do |length_read, (doc, index)| chunk = Grid::File::Chunk.new(doc) validate!(index, num_chunks, chunk, length_read) data = chunk.data.data yield data num_read += 1 length_read += data.size end.tap do if num_read < num_chunks raise Error::MissingFileChunk.new(num_chunks, num_read) end end else view.to_enum end end | | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
#file_info ⇒ File::Info
Note:
The file information is cached in the stream. Subsequent calls to file_info will return the same information that the first call returned, and will not query the database again.
Get the files collection file information document for the file being read.
| 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | # File 'lib/mongo/grid/stream/read.rb', line 185 def file_info @file_info ||= begin doc = options[:file_info_doc] | | fs.files_collection.find( { _id: file_id }, { timeout_ms: @timeout_holder.remaining_timeout_ms! } ).first if doc File::Info.new(Options::Mapper.transform(doc, File::Info::MAPPINGS.invert)) else nil end end end | | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
#read ⇒ String
117 118 119 | # File 'lib/mongo/grid/stream/read.rb', line 117 def read to_a.join end |
---|
#read_preference ⇒ BSON::Document
Note:
This method always returns a BSON::Document instance, even though the constructor specifies the type of :read as a Hash, not as a BSON::Document.
Get the read preference.
| 164 165 166 167 168 169 170 171 172 173 | # File 'lib/mongo/grid/stream/read.rb', line 164 def read_preference @read_preference ||= begin pref = options[:read] | | fs.read_preference if BSON::Document === pref pref else BSON::Document.new(pref) end end end | | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |