Módulo: Mongo::Address::Validator Privado

Incluido en:
Srv::Result, URI
Definido en:
lib/mongo/address/validator.rb

Overview

Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.

Desde:

  • 2.0.0

Resumen del método de instancia colapsar

Detalles del método de instancia

#validar_dirección_str!(dirección_str) ⇒ Objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Toma una string de dirección en formato ipv4/ipv6/nombre de host/ruta de socket y valida su formato.

Desde:

  • 2.0.0



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Archivo 'lib/mongo/address/validator.rb', línea 23

def validate_address_str!(address_str)
  caso address_str
  cuando /\A\[[\d:]+\](?::(\d+))?\z/
    # ipv6 con puerto opcional
    si port_str = ::Regexp.último_partido(1)
      validate_port_str!(port_str)
    end
  cuando %r{\A/}, /\.sock\z/
    # Ruta del socket Unix.
    # La especificación requiere que validemos que la ruta no tiene ningún carácter sin escapar
    # barras oblicuas, pero si este fuera el caso, el análisis tendría
    # ya falló en otra parte porque el URI se habría dividido en
    # un lugar extraño.
    # La especificación también permite rutas de socket relativas y requiere que
    # las rutas de socket terminan en ".sock". Aceptamos todas las rutas excepto el caso especial
    # el .sock extensión para evitar rutas relativas que caigan en el
    # host:port caso siguiente.
  cuando %r{[/\[\]]}
    # No es un host:puerto ni una dirección ipv4 con puerto opcional.
    # Posiblemente dirección ipv6 estropeada con, por ejemplo, delimitador de puerto presente y
    # puerto faltante o basura extra antes o después.
    propagar Error::InvalidAddress,
          "Hostname inválido: #{address_str}"
  cuando /:.*:/m
    propagar Error::InvalidAddress,
          "No se permiten múltiples delimitadores de puertos: #{address_str}"
  else
    # host:puerto o dirección ipv4 con número de puerto opcional
    host, Puerto = address_str.división(':')
    propagar Error::InvalidAddress, "El host está vacío: #{address_str}" si host.¿vacío?

    validate_hostname!(host)

    propagar Error::InvalidAddress, "El puerto está vacío: #{address_str}" si Puerto && Puerto.¿vacío?

    validate_port_str!(Puerto)
  end
end