Class: Treaty::Attribute::Option::Conditionals::Base

Inherits:
Base
  • Object
show all
Defined in:
lib/treaty/attribute/option/conditionals/base.rb

Overview

Base class for conditional option processors.

## Purpose

Conditionals control whether an attribute should be processed at all. Unlike validators (which check data) and modifiers (which transform data), conditionals determine attribute visibility based on runtime conditions.

## Key Difference from Validators/Modifiers

  • Validators: Check if data is valid

  • Modifiers: Transform data values

  • Conditionals: Decide if attribute exists in output

## Processing

Conditionals are evaluated BEFORE validators and modifiers:

  1. If condition evaluates to ‘false` → attribute is skipped entirely

  2. If condition evaluates to ‘true` → attribute is processed normally

## Mode Support

Conditionals do NOT support simple/advanced modes. They only accept lambda/proc directly:

“‘ruby # Correct integer :rating, if: ->(**attributes) { attributes.dig(:post, :published_at).present? } array :tags, if: ->(post:) { post.present? }

# Incorrect - no simple/advanced mode integer :rating, if: true # Not supported integer :rating, if: { is: …, message: … } # Not supported “‘

## Implementation

Subclasses must implement:

  • ‘validate_schema!` - Validate the conditional schema at definition time

  • ‘evaluate_condition(data)` - Evaluate condition with runtime data

Direct Known Subclasses

IfConditional, UnlessConditional

Instance Method Summary collapse

Methods inherited from Base

#initialize, #target_name, #transforms_name?

Constructor Details

This class inherits a constructor from Treaty::Attribute::Option::Base

Instance Method Details

#evaluate_condition(_data) ⇒ Boolean

Evaluates the conditional with runtime data Must be overridden in subclasses

Parameters:

  • _data (Hash)

    Raw data to evaluate condition against

Returns:

  • (Boolean)

    True if attribute should be processed, false otherwise

Raises:



64
65
66
67
# File 'lib/treaty/attribute/option/conditionals/base.rb', line 64

def evaluate_condition(_data)
  raise Treaty::Exceptions::NotImplemented,
        "#{self.class} must implement #evaluate_condition"
end

#transform_value(value) ⇒ Object

Conditionals do not transform values This is a no-op for conditionals

Parameters:

  • value (Object)

    The value to pass through

Returns:

  • (Object)

    The unchanged value



83
84
85
# File 'lib/treaty/attribute/option/conditionals/base.rb', line 83

def transform_value(value)
  value
end

#validate_schema!void

This method returns an undefined value.

Phase 1: Validates conditional schema Must be overridden in subclasses

Raises:



53
54
55
56
# File 'lib/treaty/attribute/option/conditionals/base.rb', line 53

def validate_schema!
  raise Treaty::Exceptions::NotImplemented,
        "#{self.class} must implement #validate_schema!"
end

#validate_value!(_value) ⇒ void

This method returns an undefined value.

Conditionals do not validate values This is a no-op for conditionals

Parameters:

  • _value (Object)

    The value (unused)



74
75
76
# File 'lib/treaty/attribute/option/conditionals/base.rb', line 74

def validate_value!(_value)
  # No-op: conditionals don't validate values
end