class OAuth2::AccessToken

def configure_authentication!(opts, verb)

def configure_authentication!(opts, verb)
  mode_opt = options[:mode]
  mode =
    if mode_opt.respond_to?(:call)
      mode_opt.call(verb)
    elsif mode_opt.is_a?(Hash)
      key = verb.to_sym
      # Try symbol key first, then string key; default to :header when missing
      mode_opt[key] || mode_opt[key.to_s] || :header
    else
      mode_opt
    end
  case mode
  when :header
    opts[:headers] ||= {}
    opts[:headers].merge!(headers)
  when :query
    # OAuth 2.1 note: Bearer tokens in the query string are omitted from the spec due to security risks.
    # Prefer the default :header mode whenever possible.
    opts[:params] ||= {}
    opts[:params][options[:param_name]] = token
  when :body
    opts[:body] ||= {}
    if opts[:body].is_a?(Hash)
      opts[:body][options[:param_name]] = token
    else
      opts[:body] += "&#{options[:param_name]}=#{token}"
    end
    # @todo support for multi-part (file uploads)
  else
    raise("invalid :mode option of #{mode}")
  end
end