Class: Wsv::RangeRequest
- Inherits:
-
Object
- Object
- Wsv::RangeRequest
- Defined in:
- lib/wsv/range_request.rb
Overview
Parses an HTTP ‘Range` header (RFC 7233) against a known file size.
Defined Under Namespace
Classes: Result
Constant Summary collapse
- PATTERN =
/\Abytes=(\d+)?-(\d+)?\z/
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(header_value, file_size) ⇒ RangeRequest
constructor
A new instance of RangeRequest.
- #parse ⇒ Object
Constructor Details
#initialize(header_value, file_size) ⇒ RangeRequest
Returns a new instance of RangeRequest.
45 46 47 48 |
# File 'lib/wsv/range_request.rb', line 45 def initialize(header_value, file_size) @header_value = header_value @file_size = file_size end |
Class Method Details
.parse(header_value, file_size) ⇒ Object
41 42 43 |
# File 'lib/wsv/range_request.rb', line 41 def self.parse(header_value, file_size) new(header_value, file_size).parse end |
Instance Method Details
#parse ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/wsv/range_request.rb', line 50 def parse return Result.full if @header_value.nil? || @header_value.empty? match = @header_value.match(PATTERN) # Per RFC 7233, an unparseable Range is treated as if absent: return # full so the caller serves a normal 200 instead of 416. return Result.full unless match first, last = match.captures if first.nil? && last.nil? Result.full elsif first.nil? suffix_range(last.to_i) elsif last.nil? open_range(first.to_i) else bounded_range(first.to_i, last.to_i) end end |