Exception: ViewModel::DeserializationError::DatabaseConstraint

Inherits:
ViewModel::DeserializationError show all
Defined in:
lib/view_model/deserialization_error.rb

Instance Attribute Summary collapse

Attributes inherited from AbstractErrorWithBlame

#nodes

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ViewModel::DeserializationError

#code

Methods inherited from AbstractErrorWithBlame

#meta

Methods inherited from AbstractError

#aggregation?, #causes, #code, #exception, #meta, #status, #title, #to_s, #view

Constructor Details

#initialize(detail, nodes = []) ⇒ DatabaseConstraint

Returns a new instance of DatabaseConstraint.



340
341
342
343
# File 'lib/view_model/deserialization_error.rb', line 340

def initialize(detail, nodes = [])
  @detail = detail
  super(nodes)
end

Instance Attribute Details

#detailObject (readonly)

Returns the value of attribute detail.



338
339
340
# File 'lib/view_model/deserialization_error.rb', line 338

def detail
  @detail
end

Class Method Details

.from_exception(exception, nodes = []) ⇒ Object

Database constraint errors are pretty opaque and stringly typed. We can do our best to parse out what metadata we can from the error, and fall back when we can’t.



348
349
350
351
352
353
354
355
# File 'lib/view_model/deserialization_error.rb', line 348

def self.from_exception(exception, nodes = [])
  case exception.cause
  when PG::UniqueViolation, PG::ExclusionViolation
    UniqueViolation.from_postgres_error(exception.cause, nodes)
  else
    self.new(exception.message, nodes)
  end
end