Exception: Poodle::ValidationError

Inherits:
Error
  • Object
show all
Defined in:
lib/poodle/errors/validation_error.rb

Overview

Exception raised when request validation fails (400 Bad Request, 422 Unprocessable Entity)

Examples:

Handling validation errors

begin
  client.send_email(invalid_email)
rescue Poodle::ValidationError => e
  puts "Validation failed: #{e.message}"
  e.errors.each do |field, messages|
    puts "#{field}: #{messages.join(', ')}"
  end
end

Instance Attribute Summary collapse

Attributes inherited from Error

#context, #status_code

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Error

#message, #to_s

Constructor Details

#initialize(message = "Validation failed", errors: {}, context: {}, status_code: 400) ⇒ ValidationError

Initialize a new ValidationError

Parameters:

  • message (String) (defaults to: "Validation failed")

    the error message

  • errors (Hash) (defaults to: {})

    field-specific validation errors

  • context (Hash) (defaults to: {})

    additional context information

  • status_code (Integer) (defaults to: 400)

    HTTP status code (400 or 422)



27
28
29
30
# File 'lib/poodle/errors/validation_error.rb', line 27

def initialize(message = "Validation failed", errors: {}, context: {}, status_code: 400)
  @errors = errors
  super(message, context: context.merge(errors: errors), status_code: status_code)
end

Instance Attribute Details

#errorsHash (readonly)

Returns field-specific validation errors.

Returns:

  • (Hash)

    field-specific validation errors



19
20
21
# File 'lib/poodle/errors/validation_error.rb', line 19

def errors
  @errors
end

Class Method Details

.content_too_large(field, max_size) ⇒ ValidationError

Create a ValidationError for content too large

Parameters:

  • field (String)

    the field name

  • max_size (Integer)

    the maximum allowed size

Returns:



70
71
72
73
74
75
# File 'lib/poodle/errors/validation_error.rb', line 70

def self.content_too_large(field, max_size)
  new(
    "Content size exceeds maximum allowed size of #{max_size} bytes",
    errors: { field => ["Content size exceeds maximum allowed size of #{max_size} bytes"] }
  )
end

.invalid_contentValidationError

Create a ValidationError for invalid content

Returns:



58
59
60
61
62
63
# File 'lib/poodle/errors/validation_error.rb', line 58

def self.invalid_content
  new(
    "Email must contain either HTML content, text content, or both",
    errors: { content: ["At least one content type (html or text) is required"] }
  )
end

.invalid_email(email, field: "email") ⇒ ValidationError

Create a ValidationError for invalid email address

Parameters:

  • email (String)

    the invalid email address

  • field (String) (defaults to: "email")

    the field name (default: "email")

Returns:



37
38
39
40
41
42
# File 'lib/poodle/errors/validation_error.rb', line 37

def self.invalid_email(email, field: "email")
  new(
    "Invalid email address provided",
    errors: { field => ["'#{email}' is not a valid email address"] }
  )
end

.invalid_field_value(field, value, reason = "") ⇒ ValidationError

Create a ValidationError for invalid field value

Parameters:

  • field (String)

    the field name

  • value (String)

    the invalid value

  • reason (String) (defaults to: "")

    the reason why it's invalid

Returns:



83
84
85
86
87
88
89
90
91
# File 'lib/poodle/errors/validation_error.rb', line 83

def self.invalid_field_value(field, value, reason = "")
  message = "Invalid value for field '#{field}': #{value}"
  message += ". #{reason}" unless reason.empty?

  new(
    message,
    errors: { field => [message] }
  )
end

.missing_field(field) ⇒ ValidationError

Create a ValidationError for missing required field

Parameters:

  • field (String)

    the missing field name

Returns:



48
49
50
51
52
53
# File 'lib/poodle/errors/validation_error.rb', line 48

def self.missing_field(field)
  new(
    "Missing required field: #{field}",
    errors: { field => ["The #{field} field is required"] }
  )
end