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

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/mongo/grid/stream/read.rb

Overview

A stream that reads files from the FSBucket.

Since:

  • 2.1.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fs, options) ⇒ Read

Create a stream for reading files from the FSBucket.

Examples:

Create the stream.

Stream::Read.new(fs, options)

Parameters:

  • fs (FSBucket)

    The GridFS bucket object.

  • options (Hash)

    The read stream options.

Options Hash (options):

  • :file_info_doc (BSON::Document)

    For internal driver use only. A BSON document to use as file information.

Since:

  • 2.1.0



53
54
55
56
57
58
59
# File 'lib/mongo/grid/stream/read.rb', line 53

def initialize(fs, options)
  @fs = fs
  @options = options.dup
  @file_id = @options.delete(:file_id)
  @options.freeze
  @open = true
end

Instance Attribute Details

#file_idBSON::ObjectId, Object (readonly)

Returns file_id The id of the file being read.

Returns:

  • (BSON::ObjectId, Object)

    file_id The id of the file being read.

Since:

  • 2.1.0



39
40
41
# File 'lib/mongo/grid/stream/read.rb', line 39

def file_id
  @file_id
end

#fsFSBucket (readonly)

Returns fs The fs bucket from which this stream reads.

Returns:

  • (FSBucket)

    fs The fs bucket from which this stream reads.

Since:

  • 2.1.0



29
30
31
# File 'lib/mongo/grid/stream/read.rb', line 29

def fs
  @fs
end

#optionsHash (readonly)

Returns options The stream options.

Returns:

  • (Hash)

    options The stream options.

Since:

  • 2.1.0



34
35
36
# File 'lib/mongo/grid/stream/read.rb', line 34

def options
  @options
end

Instance Method Details

#closeBSON::ObjectId, Object

Close the read stream.

If the stream is already closed, this method does nothing.

Examples:

Close the stream.

stream.close

Returns:

  • (BSON::ObjectId, Object)

    The file id.

Since:

  • 2.1.0



116
117
118
119
120
121
122
# File 'lib/mongo/grid/stream/read.rb', line 116

def close
  if @open
    view.close_query
    @open = false
  end
  file_id
end

#closed?true, false

Is the stream closed.

Examples:

Is the stream closd.

stream.closed?

Returns:

  • (true, false)

    Whether the stream is closed.

Since:

  • 2.1.0



132
133
134
# File 'lib/mongo/grid/stream/read.rb', line 132

def closed?
  !@open
end

#each {|Each| ... } ⇒ Enumerator

Iterate through chunk data streamed from the FSBucket.

Examples:

Iterate through the chunk data.

stream.each do |data|
  buffer << data
end

Yield Parameters:

  • Each (Hash)

    chunk of file data.

Returns:

  • (Enumerator)

    The enumerator.

Raises:

Since:

  • 2.1.0



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/mongo/grid/stream/read.rb', line 75

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_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.

Returns:

Since:

  • 2.1.0



158
159
160
161
162
163
164
165
166
167
# File 'lib/mongo/grid/stream/read.rb', line 158

def file_info
  @file_info ||= begin
    doc = options[: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

#readString

Read all file data.

Examples:

Read the file data.

stream.read

Returns:

  • (String)

    The file data.

Raises:

Since:

  • 2.1.0



102
103
104
# File 'lib/mongo/grid/stream/read.rb', line 102

def read
  to_a.join
end

#read_preferenceMongo::ServerSelector

Get the read preference used when streaming.

Examples:

Get the read preference.

stream.read_preference

Returns:

Since:

  • 2.1.0



144
145
146
# File 'lib/mongo/grid/stream/read.rb', line 144

def read_preference
  @read_preference ||= options[:read] || fs.read_preference
end