Method: Gem::Net::HTTPHeader#set_range

Defined in:
lib/rubygems/net-http/lib/net/http/header.rb

#set_range(r, e = nil) ⇒ Object Also known as: range=

call-seq:

set_range(length) -> length
set_range(offset, length) -> range
set_range(begin..length) -> range

Sets the value for field 'Range'; see Range request header:

With argument length:

req = Gem::Net::HTTP::Get.new(uri)
req.set_range(100)      # => 100
req['Range']            # => "bytes=0-99"

With arguments offset and length:

req.set_range(100, 100) # => 100...200
req['Range']            # => "bytes=100-199"

With argument range:

req.set_range(100..199) # => 100..199
req['Range']            # => "bytes=100-199"

Gem::Net::HTTPHeader#range= is an alias for Gem::Net::HTTPHeader#set_range.



576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
# File 'lib/rubygems/net-http/lib/net/http/header.rb', line 576

def set_range(r, e = nil)
  unless r
    @header.delete 'range'
    return r
  end
  r = (r...r+e) if e
  case r
  when Numeric
    n = r.to_i
    rangestr = (n > 0 ? "0-#{n-1}" : "-#{-n}")
  when Range
    first = r.first
    last = r.end
    last -= 1 if r.exclude_end?
    if last == -1
      rangestr = (first > 0 ? "#{first}-" : "-#{-first}")
    else
      raise Gem::Net::HTTPHeaderSyntaxError, 'range.first is negative' if first < 0
      raise Gem::Net::HTTPHeaderSyntaxError, 'range.last is negative' if last < 0
      raise Gem::Net::HTTPHeaderSyntaxError, 'must be .first < .last' if first > last
      rangestr = "#{first}-#{last}"
    end
  else
    raise TypeError, 'Range/Integer is required'
  end
  @header['range'] = ["bytes=#{rangestr}"]
  r
end