class Deas::Runner::SendFileBody
Constants
- CHUNK_SIZE
this class borrows from the body range handling in Rack::File.
Attributes
content_range[R]
path_name[R]
size[R]
Public Class Methods
new(env, path_name)
click to toggle source
# File lib/deas/runner.rb, line 238 def initialize(env, path_name) @path_name = path_name file_size = @path_name.size? || Rack::Utils.bytesize(path_name.read) ranges = byte_ranges(env, file_size) if ranges.nil? || ranges.empty? || ranges.length > 1 # No ranges or multiple ranges are not supported @range = 0..file_size-1 @content_range = nil else # single range @range = ranges[0] @content_range = "bytes #{@range.begin}-#{@range.end}/#{file_size}" end @size = self.range_end - self.range_begin + 1 end
Public Instance Methods
==(other_body)
click to toggle source
# File lib/deas/runner.rb, line 283 def ==(other_body) self.path_name.to_s == other_body.path_name.to_s && self.range_begin == other_body.range_begin && self.range_end == other_body.range_end end
each() { |part| ... }
click to toggle source
# File lib/deas/runner.rb, line 263 def each @path_name.open("rb") do |io| io.seek(@range.begin) remaining_len = self.size while remaining_len > 0 part = io.read([CHUNK_SIZE, remaining_len].min) break if part.nil? remaining_len -= part.length yield part end end end
inspect()
click to toggle source
# File lib/deas/runner.rb, line 277 def inspect "#<#{self.class}:#{'0x0%x' % (self.object_id << 1)} " \ "path=#{self.path_name} " \ "range_begin=#{self.range_begin} range_end=#{self.range_end}>" end
partial?()
click to toggle source
# File lib/deas/runner.rb, line 256 def partial? !@content_range.nil? end
range_begin()
click to toggle source
# File lib/deas/runner.rb, line 260 def range_begin; @range.begin; end
range_end()
click to toggle source
# File lib/deas/runner.rb, line 261 def range_end; @range.end; end
Private Instance Methods
byte_ranges(env, file_size)
click to toggle source
# File lib/deas/runner.rb, line 291 def byte_ranges(env, file_size) if Rack::Utils.respond_to?('byte_ranges') Rack::Utils.byte_ranges(env, file_size) else nil end end