Class: Mongo::Grid::FSBucket::Stream::Read
- Inherits:
-
Object
- Object
- Mongo::Grid::FSBucket::Stream::Read
- Includes:
- Enumerable
- Defined in:
- build/ruby-driver-v2.17/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-v2.17/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-v2.17/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-v2.17/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-v2.17/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.
119 120 121 122 123 124 125 |
# File 'build/ruby-driver-v2.17/lib/mongo/grid/stream/read.rb', line 119 def close if @open view.close_query @open = false end file_id end |
#closed? ⇒ true, false
Is the stream closed.
135 136 137 |
# File 'build/ruby-driver-v2.17/lib/mongo/grid/stream/read.rb', line 135 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 |
# File 'build/ruby-driver-v2.17/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 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 length_read += data.size 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.
173 174 175 176 177 178 179 180 181 182 |
# File 'build/ruby-driver-v2.17/lib/mongo/grid/stream/read.rb', line 173 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.
105 106 107 |
# File 'build/ruby-driver-v2.17/lib/mongo/grid/stream/read.rb', line 105 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.
152 153 154 155 156 157 158 159 160 161 |
# File 'build/ruby-driver-v2.17/lib/mongo/grid/stream/read.rb', line 152 def read_preference @read_preference ||= begin pref = [:read] || fs.read_preference if BSON::Document === pref pref else BSON::Document.new(pref) end end end |