Exception: Grape::Exceptions::Validation

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

Constant Summary collapse

EMPTY_BACKTRACE =
[].freeze

Constants inherited from Base

Base::MESSAGE_STEPS

Instance Attribute Summary collapse

Attributes inherited from Base

#headers, #status

Instance Method Summary collapse

Methods inherited from Base

#[]

Constructor Details

#initialize(params:, message: nil, status: nil, headers: nil) ⇒ Validation

Returns a new instance of Validation.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/grape/exceptions/validation.rb', line 10

def initialize(params:, message: nil, status: nil, headers: nil)
  @params = Array(params)
  translated =
    if message
      @message_key = case message
                     when Symbol then message
                     when Hash then message[:key]
                     end
      translate_message(message)
    end

  super(status:, message: translated, headers:)
  # Pre-seed the backtrace so Ruby's raise skips capture. Validation errors are
  # a hot path (raised per bad attribute) and end up as 400 Bad Request responses;
  # backtraces here point into Grape internals and have no diagnostic value.
  set_backtrace(EMPTY_BACKTRACE)
end

Instance Attribute Details

#message_keyObject (readonly)

Returns the value of attribute message_key.



8
9
10
# File 'lib/grape/exceptions/validation.rb', line 8

def message_key
  @message_key
end

#paramsObject (readonly)

Returns the value of attribute params.



8
9
10
# File 'lib/grape/exceptions/validation.rb', line 8

def params
  @params
end

Instance Method Details

#as_json(*_args) ⇒ Object

Remove all the unnecessary stuff from Grape::Exceptions::Base like status and headers when converting a validation error to json or string



30
31
32
# File 'lib/grape/exceptions/validation.rb', line 30

def as_json(*_args)
  to_s
end

#errorsObject

Returns self so callers (e.g. ValidationErrors#initialize) can treat a single Validation and a ValidationArrayErrors wrapper uniformly via flat_map(&:errors) — Array returns flatten in, non-Array returns (i.e. this self) append as one element.



38
39
40
# File 'lib/grape/exceptions/validation.rb', line 38

def errors
  self
end