Module: IntervalResponse
- Defined in:
- lib/interval_response.rb,
lib/interval_response/version.rb
Defined Under Namespace
Modules: ToRackResponseTriplet
Classes: Empty, Error, Full, Invalid, LazyFile, Multi, Sequence, Single
Constant Summary
collapse
- ENTIRE_RESOURCE_RANGE =
'bytes=0-'
- VERSION =
"0.1.2"
Class Method Summary
collapse
Class Method Details
.new(interval_map, http_range_header_value_or_nil, http_if_range_header_or_nil) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/interval_response.rb', line 19
def self.new(interval_map, , )
if && != interval_map.etag
Measurometer.increment_counter('interval_response.if_range_mismatch', 1)
return new(interval_map, ENTIRE_RESOURCE_RANGE, nil)
end
if
Measurometer.increment_counter('interval_response.if_range_match', 1)
elsif
Measurometer.increment_counter('interval_response.if_range_not_provided', 1)
end
prepare_response(interval_map, , ).tap do |res|
response_type_name_for_metric = res.class.to_s.split('::').last.downcase Measurometer.increment_counter('interval_response.resp_%s' % response_type_name_for_metric, 1)
end
end
|
.prepare_response(interval_map, http_range_header_value_or_nil, _http_if_range_header_or_nil) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/interval_response.rb', line 42
def self.prepare_response(interval_map, , )
return Empty.new(interval_map) if interval_map.empty?
= || ENTIRE_RESOURCE_RANGE
http_ranges = Rack::Utils.get_byte_ranges(, interval_map.size)
return Invalid.new(interval_map) if && http_ranges.empty?
return Full.new(interval_map) if http_ranges.length == 1 && http_ranges.first == (0..(interval_map.size - 1))
return Single.new(interval_map, http_ranges) if http_ranges.length == 1
Multi.new(interval_map, http_ranges)
end
|