Exception: ViewModel::DeserializationError::UniqueViolation
- Inherits:
-
ViewModel::DeserializationError
- Object
- StandardError
- AbstractError
- AbstractErrorWithBlame
- ViewModel::DeserializationError
- ViewModel::DeserializationError::UniqueViolation
- Defined in:
- lib/view_model/deserialization_error.rb
Constant Summary collapse
- PG_ERROR_FIELD_CONSTRAINT_NAME =
Not exposed in pg gem
'n'.ord
- DETAIL_PREFIX =
'Key ('
- DETAIL_SUFFIX =
') already exists.'
- DETAIL_INFIX =
')=('
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
-
#constraint ⇒ Object
readonly
Returns the value of attribute constraint.
-
#detail ⇒ Object
readonly
Returns the value of attribute detail.
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Attributes inherited from AbstractErrorWithBlame
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(detail, constraint, columns, values, nodes = []) ⇒ UniqueViolation
constructor
A new instance of UniqueViolation.
- #meta ⇒ Object
Methods inherited from ViewModel::DeserializationError
Methods inherited from AbstractError
#aggregation?, #causes, #code, #exception, #status, #title, #to_s, #view
Constructor Details
#initialize(detail, constraint, columns, values, nodes = []) ⇒ UniqueViolation
Returns a new instance of UniqueViolation.
424 425 426 427 428 429 430 |
# File 'lib/view_model/deserialization_error.rb', line 424 def initialize(detail, constraint, columns, values, nodes = []) @detail = detail @constraint = constraint @columns = columns @values = values super(nodes) end |
Instance Attribute Details
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
358 359 360 |
# File 'lib/view_model/deserialization_error.rb', line 358 def columns @columns end |
#constraint ⇒ Object (readonly)
Returns the value of attribute constraint.
358 359 360 |
# File 'lib/view_model/deserialization_error.rb', line 358 def constraint @constraint end |
#detail ⇒ Object (readonly)
Returns the value of attribute detail.
358 359 360 |
# File 'lib/view_model/deserialization_error.rb', line 358 def detail @detail end |
#values ⇒ Object (readonly)
Returns the value of attribute values.
358 359 360 |
# File 'lib/view_model/deserialization_error.rb', line 358 def values @values end |
Class Method Details
.from_postgres_error(err, nodes) ⇒ Object
361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
# File 'lib/view_model/deserialization_error.rb', line 361 def self.from_postgres_error(err, nodes) result = err.result constraint = result.error_field(PG_ERROR_FIELD_CONSTRAINT_NAME) = result.error_field(PG::Result::PG_DIAG_MESSAGE_DETAIL) columns, values = () unless columns # Couldn't parse the detail message, fall back on an unparsed error return DatabaseConstraint.new(err., nodes) end self.new(err., constraint, columns, values, nodes) end |
.parse_message_detail(detail) ⇒ Object
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 |
# File 'lib/view_model/deserialization_error.rb', line 380 def (detail) stream = detail.dup return nil unless stream.delete_prefix!(DETAIL_PREFIX) return nil unless stream.delete_suffix!(DETAIL_SUFFIX) # The message should start with an identifier list: pop off identifier # tokens while we can. identifiers = [] identifier = parse_identifier(stream) return nil unless identifier identifiers << identifier while stream.delete_prefix!(', ') identifier = parse_identifier(stream) return nil unless identifier identifiers << identifier end # The message should now contain ")=(" followed by the (unparseable) # value list. return nil unless stream.delete_prefix!(DETAIL_INFIX) [identifiers, stream] end |
Instance Method Details
#meta ⇒ Object
432 433 434 |
# File 'lib/view_model/deserialization_error.rb', line 432 def super.merge(constraint: @constraint, columns: @columns, values: @values) end |