module JWT::Deprecations

def context

def context
  yield.tap { emit_warnings }
ensure
  Thread.current[:jwt_warning_store] = nil
end

def emit_warnings

def emit_warnings
  return if Thread.current[:jwt_warning_store].nil?
  Thread.current[:jwt_warning_store].each { |warning| warn(warning) }
end

def record_warned(message)

def record_warned(message)
  @warned ||= []
  return true if @warned.include?(message)
  @warned << message
  false
end

def store(message)

def store(message)
  (Thread.current[:jwt_warning_store] ||= []) << message
end

def warning(message, only_if_valid: false)

def warning(message, only_if_valid: false)
  method_name = only_if_valid ? :store : :warn
  case JWT.configuration.deprecation_warnings
  when :once
    return if record_warned(message)
  when :warn
    # noop
  else
    return
  end
  send(method_name, "[DEPRECATION WARNING] #{message}")
end