Exception: Treaty::Exceptions::Validation

Inherits:
Base
  • Object
show all
Defined in:
lib/treaty/exceptions/validation.rb

Overview

Raised when attribute validation fails

## Purpose

Indicates that data does not conform to the schema defined in the treaty. Most commonly used exception in Treaty, covering all validation scenarios including type mismatches, required fields, inclusion constraints, and more.

## Usage

Raised automatically during validation in various scenarios:

### Required Field Validation “‘ruby request do

string :title, :required

end # Raises: “Attribute ‘title’ is required but was not provided or is empty” “‘

### Type Validation “‘ruby request do

integer :age

end # Passing “25” as string raises: # “Attribute ‘age’ must be an Integer, got String” “‘

### Inclusion Validation “‘ruby request do

string :status, inclusion: ["active", "inactive"]

end # Passing “pending” raises: # “Attribute ‘status’ must be one of: active, inactive. Got: ‘pending’” “‘

### Nested Structure Validation “‘ruby request do

array :tags do
  string :_self
end

end # Passing [123, 456] raises: # “Error in array ‘tags’ at index 0: Element must match one of the defined types” “‘

### Custom Messages “‘ruby request do

string :email, required: { is: true, message: "Email is mandatory for registration" }

end # Raises custom message when email is missing “‘

## Integration

Can be rescued by application controllers to return appropriate HTTP status:

“‘ruby rescue_from Treaty::Exceptions::Validation, with: :render_validation_error

def render_validation_error(exception)

render json: { error: exception.message }, status: :unprocessable_entity  # HTTP 422

end “‘

## Validation Types

This exception covers multiple validation scenarios:

  • Required - Attribute presence validation

  • Type - Data type validation (integer, string, array, object, datetime)

  • Inclusion - Value must be in allowed set

  • Nested - Complex structure validation (arrays, objects)

  • Options - Unknown or invalid option specifications

  • Schema - DSL definition validation

## HTTP Status

Typically returns HTTP 422 Unprocessable Entity, indicating that the request was well-formed but contains semantic errors.

## Localization

All validation messages support I18n for multilingual applications. Messages are defined in ‘config/locales/en.yml` under `treaty.attributes.validators.*`.