Read — Documentation by YARD 0.9.37 (original) (raw)

Class: Mongo::Grid::FSBucket::Stream::Read

Inherits:

Object

Includes:

Enumerable

Defined in:

lib/mongo/grid/stream/read.rb

Overview

A stream that reads files from the FSBucket.

Instance Attribute Summary collapse

Instance Method Summarycollapse

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

#fsFSBucket

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_infoFile::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 | | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |