class Split
Represents headers that can contain multiple distinct values separated by commas.
This isn't a specific header class is a utility for handling headers with comma-separated values, such as accept, cache-control, and other similar headers. The values are split and stored as an array internally, and serialized back to a comma-separated string when needed.
Definitions
COMMA = /\s*,\s*/
Regular expression used to split values on commas, with optional surrounding whitespace.
def self.parse(value)
Parses a raw header value.
Split headers receive comma-separated values in a single header entry. This method splits the raw value into individual entries.
Signature
-
parameter
valueString a raw header value containing multiple entries separated by commas.
-
returns
Split a new instance containing the parsed values.
Implementation
def self.parse(value)
self.new(value.split(COMMA))
end
def self.coerce(value)
Coerces a value into a parsed header object.
This method is used by the Headers class when setting values via []= to convert application values into the appropriate policy type.
Signature
-
parameter
valueString | Array the value to coerce.
-
returns
Split a parsed header object.
Implementation
def self.coerce(value)
case value
when Array
self.new(value.map(&:to_s))
else
self.parse(value.to_s)
end
end
def initialize(value = nil)
Initializes a Split header with the given values.
Signature
-
parameter
valueArray | String | Nil an array of values, a raw header value, or
nilfor an empty header.
Implementation
def initialize(value = nil)
if value.is_a?(Array)
super(value)
elsif value.is_a?(String)
# Compatibility with the old constructor, prefer to use `parse` instead:
super()
self << value
elsif value
raise ArgumentError, "Invalid value: #{value.inspect}"
end
end
def <<(value)
Adds one or more comma-separated values to the header.
The input string is split into distinct entries and appended to the array.
Signature
-
parameter
valueString a raw header value containing one or more values separated by commas.
Implementation
def << value
self.concat(value.split(COMMA))
end
def to_s
Converts the parsed header value into a raw header value.
Signature
-
returns
String a raw header value (comma-separated string).
Implementation
def to_s
join(",")
end
def self.trailer?
Whether this header is acceptable in HTTP trailers. This is a base class for comma-separated headers, default is to disallow in trailers.
Signature
-
returns
Boolean false, as most comma-separated headers should not appear in trailers by default.
Implementation
def self.trailer?
false
end