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



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)



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



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



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



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



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



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