class AcceptHeaders::MediaType::Negotiator
Constants
- HEADER_PREFIX
- MEDIA_TYPE_PATTERN
- PARAMS_PATTERN
Public Instance Methods
negotiate(supported)
click to toggle source
Calls superclass method
AcceptHeaders::Negotiatable#negotiate
# File lib/accept_headers/media_type/negotiator.rb, line 13 def negotiate(supported) support, match = super(supported) return nil if support.nil? && match.nil? begin media_type = parse(support).first media_type.extensions = match.extensions return media_type rescue MediaType::Error return nil end end
Private Instance Methods
no_header()
click to toggle source
# File lib/accept_headers/media_type/negotiator.rb, line 26 def no_header [MediaType.new] end
parse_extensions(extensions_string)
click to toggle source
# File lib/accept_headers/media_type/negotiator.rb, line 45 def parse_extensions(extensions_string) return {} if !extensions_string || extensions_string.empty? if extensions_string.match(/['"]/) extensions = extensions_string.scan(PARAMS_PATTERN).map(&:compact).to_h else extensions = {} extensions_string.split(';').each do |part| param = PARAMS_PATTERN.match(part) extensions[param[:attribute]] = param[:value] if param end end extensions.delete('q') extensions end
parse_item(header)
click to toggle source
# File lib/accept_headers/media_type/negotiator.rb, line 30 def parse_item(header) return nil if header.nil? header.strip! accept_media_range, accept_extensions = header.split(';', 2) raise Error if accept_media_range.nil? media_range = MEDIA_TYPE_PATTERN.match(accept_media_range) raise Error if media_range.nil? MediaType.new( media_range[:type], media_range[:subtype], q: parse_q(accept_extensions), extensions: parse_extensions(accept_extensions) ) end