Class: Mongo::Grid::FSBucket::Stream::Read
- Inherits:
-
Object
- Object
- Mongo::Grid::FSBucket::Stream::Read
- Includes:
- Enumerable
- Defined in:
- build/ruby-driver-master/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 Summary collapse
-
#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 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 56 def initialize(fs, ) @fs = fs @options = .dup @file_id = @options.delete(:file_id) @options.freeze @open = true end |
Instance Attribute Details
#file_id ⇒ BSON::ObjectId, Object (readonly)
Returns file_id The id of the file being read.
42 43 44 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 42 def file_id @file_id end |
#fs ⇒ FSBucket (readonly)
Returns fs The fs bucket from which this stream reads.
32 33 34 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 32 def fs @fs end |
#options ⇒ Hash (readonly)
Returns options The stream options.
37 38 39 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 37 def @options end |
Instance Method Details
#close ⇒ BSON::ObjectId, Object
Close the read stream.
If the stream is already closed, this method does nothing.
125 126 127 128 129 130 131 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 125 def close if @open view.close_query @open = false end file_id end |
#closed? ⇒ true, false
Is the stream closed.
141 142 143 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 141 def closed? !@open end |
#each {|Each| ... } ⇒ Enumerator
Iterate through chunk data streamed from the FSBucket.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 78 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
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.
179 180 181 182 183 184 185 186 187 188 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 179 def file_info @file_info ||= begin doc = [:file_info_doc] || fs.files_collection.find(_id: file_id).first if doc File::Info.new(Options::Mapper.transform(doc, File::Info::MAPPINGS.invert)) else nil end end end |
#read ⇒ String
Read all file data.
111 112 113 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 111 def read to_a.join end |
#read_preference ⇒ BSON::Document
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.
158 159 160 161 162 163 164 165 166 167 |
# File 'build/ruby-driver-master/lib/mongo/grid/stream/read.rb', line 158 def read_preference @read_preference ||= begin pref = [:read] || fs.read_preference if BSON::Document === pref pref else BSON::Document.new(pref) end end end |