Exception: Treaty::Exceptions::VersionDefaultDeprecatedConflict

Inherits:
Base
  • Object
show all
Defined in:
lib/treaty/exceptions/version_default_deprecated_conflict.rb

Overview

Raised when a version is marked as both default and deprecated

Purpose

Prevents the logical contradiction of having a version that is both the default version (used when no version is specified) and deprecated (should not be used). A default version must be active and usable.

Usage

This exception is raised automatically during version definition validation:

Invalid Configuration

class PostsTreaty < ApplicationTreaty
  version 1, default: true do
    deprecated true  # ERROR: Cannot be both default and deprecated
    # ... rest of version definition
  end
end

Valid Configurations

# Option 1: Default version without deprecation
version 1, default: true do
  # No deprecated call - valid
end

# Option 2: Deprecated version without default
version 1 do
  deprecated true  # Valid, but not default
end

# Option 3: Neither default nor deprecated
version 1 do
  # Regular version - valid
end

When It's Raised

The exception is raised during treaty class loading when:

  1. A version has default: true in the version declaration
  2. AND the same version calls deprecated method with any truthy value or block

Integration

This is a configuration error that should be caught during development. It can be rescued by application controllers:

rescue_from Treaty::Exceptions::VersionDefaultDeprecatedConflict, with: :render_config_error

def render_config_error(exception)
  render json: { error: exception.message }, status: :internal_server_error  # HTTP 500
end

HTTP Status

Returns HTTP 500 Internal Server Error as this indicates a configuration problem in the application code that should be fixed by developers.

Resolution

To fix this error, choose one of the following:

  1. Remove default: true if the version should be deprecated
  2. Remove the deprecated call if the version should be default
  3. Create a new version that will be the default, and deprecate the old one
  • VersionMultipleDefaults - When multiple versions are marked as default
  • Deprecated - When attempting to use an already deprecated version