Class: Ask::Schema::DSL::ConditionalBuilder
- Inherits:
-
Object
- Object
- Ask::Schema::DSL::ConditionalBuilder
- Defined in:
- lib/ask/schema/dsl/conditionals.rb
Overview
Builder for collecting requirements and validations within a conditional clause.
Constant Summary collapse
- VALIDATES_KEY_MAP =
Map of validated option names to JSON Schema key names.
{ type: :type, const: :const, enum: :enum, not_value: :not, min_length: :minLength, max_length: :maxLength, pattern: :pattern, minimum: :minimum, maximum: :maximum }.freeze
Instance Method Summary collapse
-
#empty? ⇒ Boolean
Check if the builder has no requirements or validations.
-
#required_fields ⇒ Array<String>
Get the required field names (duped).
-
#requires(*fields) ⇒ Object
Mark fields as required.
-
#to_schema ⇒ Hash
Convert to a JSON Schema fragment.
-
#validates(field, **options) ⇒ Object
Add validation constraints for a field.
-
#validations_empty? ⇒ Boolean
Check if no validations have been defined.
Instance Method Details
#empty? ⇒ Boolean
Check if the builder has no requirements or validations.
213 214 215 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 213 def empty? required.empty? && validations.empty? end |
#required_fields ⇒ Array<String>
Get the required field names (duped).
219 220 221 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 219 def required_fields required.dup end |
#requires(*fields) ⇒ Object
Mark fields as required.
160 161 162 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 160 def requires(*fields) required.concat(fields.map(&:to_s)) end |
#to_schema ⇒ Hash
Convert to a JSON Schema fragment.
202 203 204 205 206 207 208 209 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 202 def to_schema schema = {} schema[:required] = required if required.any? schema[:properties] = validations if validations.any? schema end |
#validates(field, **options) ⇒ Object
Add validation constraints for a field.
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 182 def validates(field, **) constraints = {} .each do |key, value| schema_key = VALIDATES_KEY_MAP[key] raise ArgumentError, "unknown validates option: #{key.inspect}" unless schema_key case key when :type then constraints[:type] = value.to_s when :not_value then constraints[:not] = {const: value} when :pattern then constraints[:pattern] = value.is_a?(Regexp) ? value.source : value else constraints[schema_key] = value end end validations[field.to_s] = constraints end |
#validations_empty? ⇒ Boolean
Check if no validations have been defined.
225 226 227 |
# File 'lib/ask/schema/dsl/conditionals.rb', line 225 def validations_empty? validations.empty? end |