Class: Treaty::Entity::Attribute::Option::Conditionals::Base
- Defined in:
- lib/treaty/entity/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:
# Correct
integer :rating, if: ->(**attributes) { attributes.dig(:post, :published_at).present? }
array :tags, if: ->(post:) { post[:published_at].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 timeevaluate_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::Entity::Attribute::Option::Base
Instance Method Details
#evaluate_condition(_data) ⇒ Boolean
Evaluates the conditional with runtime data Must be overridden in subclasses
65 66 67 68 |
# File 'lib/treaty/entity/attribute/option/conditionals/base.rb', line 65 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
84 85 86 |
# File 'lib/treaty/entity/attribute/option/conditionals/base.rb', line 84 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
54 55 56 57 |
# File 'lib/treaty/entity/attribute/option/conditionals/base.rb', line 54 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
75 76 77 |
# File 'lib/treaty/entity/attribute/option/conditionals/base.rb', line 75 def validate_value!(_value) # No-op: conditionals don't validate values end |