# frozen_string_literal: true # Holds utility methods for parsing tokens from header values class Keycard::Token TOKEN_DELIMS = /\s*[:,;\t]\s*/.freeze class << self def rfc7235(string) string .sub(/^(Bearer|Token):?/, '') .split(TOKEN_DELIMS) .map { |assignment| split_assignment(assignment) } .to_h["token"] end private # @param string_assignment [String] of the form 'key="value"' # @return An array of pairs of key:value, both strings def split_assignment(string_assignment) clean_assignment(string_assignment) .split('=') .push('') .slice(0, 2) end # @param string_assignment [String] of the form 'key="value"' # @return [String] With the quotes and extraneous whitespace removed. def clean_assignment(string_assignment) string_assignment .delete('"') .strip end end end