Sha256: 5e671202e8ccd976fbdf488840154b04a1d3e3193d9618a050ecda637c916360

Contents?: true

Size: 568 Bytes

Versions: 70

Compression:

Stored size: 568 Bytes

Contents

module Files
  class SizableIO < IO
    def self.pipe
      r, w = super

      w.instance_variable_set(:@read_io, r)

      [ r, w ]
    end

    def size
      read_io.content_length_promise.wait.value
    end

    def fulfill_content_length(length)
      read_io.content_length = length
      read_io.content_length_promise.execute
    end

    protected

    attr_accessor :content_length

    def content_length_promise
      @content_length_promise ||= Concurrent::Promise.new { content_length }
    end

    def read_io
      @read_io || self
    end
  end
end

Version data entries

70 entries across 70 versions & 1 rubygems

Version Path
files.com-1.0.141 lib/files.com/sizable_io.rb
files.com-1.0.140 lib/files.com/sizable_io.rb
files.com-1.0.139 lib/files.com/sizable_io.rb
files.com-1.0.138 lib/files.com/sizable_io.rb
files.com-1.0.137 lib/files.com/sizable_io.rb
files.com-1.0.136 lib/files.com/sizable_io.rb
files.com-1.0.135 lib/files.com/sizable_io.rb
files.com-1.0.134 lib/files.com/sizable_io.rb
files.com-1.0.133 lib/files.com/sizable_io.rb
files.com-1.0.132 lib/files.com/sizable_io.rb
files.com-1.0.131 lib/files.com/sizable_io.rb
files.com-1.0.130 lib/files.com/sizable_io.rb
files.com-1.0.129 lib/files.com/sizable_io.rb
files.com-1.0.128 lib/files.com/sizable_io.rb
files.com-1.0.127 lib/files.com/sizable_io.rb
files.com-1.0.126 lib/files.com/sizable_io.rb
files.com-1.0.125 lib/files.com/sizable_io.rb
files.com-1.0.124 lib/files.com/sizable_io.rb
files.com-1.0.123 lib/files.com/sizable_io.rb
files.com-1.0.122 lib/files.com/sizable_io.rb