Skip to content

Commit

Permalink
Update of custom validator documentation in Spanish (#1052)
Browse files Browse the repository at this point in the history
Update of custom validator documentation in Spanish from the issue
#1041.

---------

Co-authored-by: TheHandyOwl <[email protected]>
  • Loading branch information
alemohamad and TheHandyOwl authored Jan 15, 2025
1 parent b99757f commit a0ec345
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 49 deletions.
45 changes: 0 additions & 45 deletions docs/basics/errors.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,51 +136,6 @@ struct MyError: DebuggableError {

`DebuggableError` tiene otras propiedades como `possibleCauses` y `suggestedFixes` que puedes usar para mejorar la depuración de tus errores. Echa un vistazo al protocolo para más información.

## Stack Traces (Trazas de Pila)

Vapor incluye soporte para visualizar stack traces para errores normales y crashes de Swift.

### Swift Backtrace

Vapor usa la librería de [SwiftBacktrace](https://github.com/swift-server/swift-backtrace) para proporcionar stack traces después de un error crítico (fatal error) o comprobaciones (assertion) en Linux. Para que esto funcione, tu app debe incluir símbolos de depuración (debug symbols) durante la compilación.

```sh
swift build -c release -Xswiftc -g
```

### Trazas de Error

Por defecto, `Abort` capturará el stack trace actual al inicializarse. Tus tipos de errores personalizados pueden conseguir esto conformándose con `DebuggableError` y guardando `StackTrace.capture()`.

```swift
import Vapor

struct MyError: DebuggableError {
var identifier: String
var reason: String
var stackTrace: StackTrace?

init(
identifier: String,
reason: String,
stackTrace: StackTrace? = .capture()
) {
self.identifier = identifier
self.reason = reason
self.stackTrace = stackTrace
}
}
```

Cuando el [nivel de registro](logging.es.md#nivel) de tu app se establece a `.debug` o inferior, stack traces de errores se incluirán en los registros.

Los stack traces no serán capturados cuando el nivel de registro sea mayor que `.debug`. Para sobrescribir este comportamiento, establece `StackTrace.isCaptureEnabled` manualmente en `configure`.

```swift
// Siempre captura stack traces, sin importar el nivel de registro.
StackTrace.isCaptureEnabled = true
```

## Middleware de Error

`ErrorMiddleware` es el único middleware añadido a tu aplicación por defecto. Este middleware transforma errores de Swift que hayan sido lanzados o devueltos por tus controladores de rutas en respuestas HTTP. Sin este middleware, los errores lanzados darían lugar al cierre de la conexión sin una respuesta.
Expand Down
52 changes: 49 additions & 3 deletions docs/basics/validation.es.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Validación

La API Validation de Vapor te ayuda a validar peticiones entrantes antes de usar la API [Content](content.md) para decodificar datos.
La API Validation de Vapor te ayuda a validar el cuerpo y los parámetros de consulta de una solicitud entrante antes de usar la API [Content](content.md) para decodificar datos.

## Introducción

Expand Down Expand Up @@ -220,7 +220,7 @@ Debajo tienes una lista de los validadores soportados actualmente y una breve ex
|`.range(_:)`|El valor se encuentra en el `Range` (rango) proporcionado.|
|`.url`|Contiene una URL válida.|

Los validadores también pueden combinarse mediante operadores para construir validaciones complejas.
Los validadores también pueden combinarse mediante operadores para construir validaciones complejas. Más información sobre el validador `.custom` en [[#Validadores Personalizados]].

|Operador|Posición|Descripción|
|-|-|-|
Expand All @@ -230,7 +230,11 @@ Los validadores también pueden combinarse mediante operadores para construir va

## Validadores Personalizados

Crear un validador personalizado para códigos postales te permite extender la funcionalidad del marco de validación. En esta sección, te guiaremos a través de los pasos para crear un validador personalizado que valide códigos postales.
Hay dos formas de crear validadores personalizados.

### Extendiendo la API Validation

Extendiendo la API Validation es la mejor opción para los casos en los que planees utilizar el validador personalizado en más de un objeto `Content`. En esta sección, te guiaremos por los pasos para crear un validador personalizado para validar códigos postales.

Primero, crea un nuevo tipo para representar los resultados de la validación de `ZipCode`. Esta estructura será responsable de informar si una cadena dada es un código postal válido.

Expand Down Expand Up @@ -287,3 +291,45 @@ Ahora que has definido el validador personalizado `zipCode`, puedes usarlo para
```swift
validations.add("zipCode", as: String.self, is: .zipCode)
```

### Validador `Custom`

El validador `Custom` es el más adecuado para los casos en los que deseas validar una propiedad en un solo objeto `Content`. Esta implementación tiene las siguientes dos ventajas en comparación con la extensión de la API Validation:

- Lógica de validación personalizada más sencilla de implementar.
- Sintaxis más corta.

En esta sección, te guiaremos a través de los pasos para crear un validador personalizado para verificar si un empleado es parte de nuestra empresa mirando la propiedad `nameAndSurname`.

```swift
let allCompanyEmployees: [String] = [
"Everett Erickson",
"Sabrina Manning",
"Seth Gates",
"Melina Hobbs",
"Brendan Wade",
"Evie Richardson",
]

struct Employee: Content {
var nameAndSurname: String
var email: String
var age: Int
var role: String

static func validations(_ validations: inout Validations) {
validations.add(
"nameAndSurname",
as: String.self,
is: .custom("Validates whether employee is part of XYZ company by looking at name and surname.") { nameAndSurname in
for employee in allCompanyEmployees {
if employee == nameAndSurname {
return true
}
}
return false
}
)
}
}
```
3 changes: 2 additions & 1 deletion docs/basics/validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -294,14 +294,15 @@ Now that you've defined the custom `zipCode` validator, you can use it to valida
```swift
validations.add("zipCode", as: String.self, is: .zipCode)
```

### `Custom` Validator

The `Custom` validator is best suited for cases where you want to validate a property in only one `Content` object. This implementation has the following two advantages compared to extending the Validation API:

- Simpler to implement custom validation logic.
- Shorter syntax.

In this section, we'll walk you through the steps to create a custom validator for checking whether an employee is part of our company by looking at the `nameAndSurname` property.
In this section, we'll walk you through the steps to create a custom validator for checking whether an employee is part of our company by looking at the `nameAndSurname` property.

```swift
let allCompanyEmployees: [String] = [
Expand Down

0 comments on commit a0ec345

Please sign in to comment.