Class: Treaty::Attribute::Option::Conditionals::Base
- 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:
-
If condition evaluates to ‘false` → attribute is skipped entirely
-
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
Instance Method Summary collapse
-
#evaluate_condition(_data) ⇒ Boolean
Evaluates the conditional with runtime data Must be overridden in subclasses.
-
#transform_value(value) ⇒ Object
Conditionals do not transform values This is a no-op for conditionals.
-
#validate_schema! ⇒ void
Phase 1: Validates conditional schema Must be overridden in subclasses.
-
#validate_value!(_value) ⇒ void
Conditionals do not validate values This is a no-op for conditionals.
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
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
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
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
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 |