Module: Ask::Schema::DSL::ComplexTypes

Included in:
Ask::Schema::DSL
Defined in:
lib/ask/schema/dsl/complex_types.rb

Overview

DSL methods for declaring complex (non-primitive) property types.

Instance Method Summary collapse

Instance Method Details

#any_of(name, description: nil, required: true, requires: nil, **options, &block) ⇒ Object

Declare a property accepting any of the listed schemas.

Parameters:

  • name (Symbol)

    Property name

  • description (String, nil) (defaults to: nil)

    Property description

  • required (Boolean) (defaults to: true)

    Whether the property is required (default: true)

  • requires (Symbol, Array<Symbol>, nil) (defaults to: nil)

    Dependent property requirements

  • options (Hash)

    Additional options

  • block (Proc)

    Block listing alternative schemas



37
38
39
# File 'lib/ask/schema/dsl/complex_types.rb', line 37

def any_of(name, description: nil, required: true, requires: nil, **options, &block)
  add_property(name, any_of_schema(description: description, **options, &block), required: required, requires: requires)
end

#array(name, description: nil, required: true, requires: nil, **options, &block) ⇒ Object

Declare an array property.

Parameters:

  • name (Symbol)

    Property name

  • description (String, nil) (defaults to: nil)

    Property description

  • required (Boolean) (defaults to: true)

    Whether the property is required (default: true)

  • requires (Symbol, Array<Symbol>, nil) (defaults to: nil)

    Dependent property requirements

  • options (Hash)

    Additional options (of:, min_items:, max_items:)

  • block (Proc)

    Block for complex item definitions



26
27
28
# File 'lib/ask/schema/dsl/complex_types.rb', line 26

def array(name, description: nil, required: true, requires: nil, **options, &block)
  add_property(name, array_schema(description: description, **options, &block), required: required, requires: requires)
end

#object(name, description: nil, required: true, requires: nil, **options, &block) ⇒ Object

Declare an object property with inline or referenced sub-schema.

Parameters:

  • name (Symbol)

    Property name

  • description (String, nil) (defaults to: nil)

    Property description

  • required (Boolean) (defaults to: true)

    Whether the property is required (default: true)

  • requires (Symbol, Array<Symbol>, nil) (defaults to: nil)

    Dependent property requirements

  • options (Hash)

    Additional options (of:, reference:)

  • block (Proc)

    Inline property definitions



15
16
17
# File 'lib/ask/schema/dsl/complex_types.rb', line 15

def object(name, description: nil, required: true, requires: nil, **options, &block)
  add_property(name, object_schema(description: description, **options, &block), required: required, requires: requires)
end

#one_of(name, description: nil, required: true, requires: nil, **options, &block) ⇒ Object

Declare a property accepting exactly one of the listed schemas.

Parameters:

  • name (Symbol)

    Property name

  • description (String, nil) (defaults to: nil)

    Property description

  • required (Boolean) (defaults to: true)

    Whether the property is required (default: true)

  • requires (Symbol, Array<Symbol>, nil) (defaults to: nil)

    Dependent property requirements

  • options (Hash)

    Additional options

  • block (Proc)

    Block listing alternative schemas



48
49
50
# File 'lib/ask/schema/dsl/complex_types.rb', line 48

def one_of(name, description: nil, required: true, requires: nil, **options, &block)
  add_property(name, one_of_schema(description: description, **options, &block), required: required, requires: requires)
end

#optional(name, description: nil, &block) ⇒ Object

Declare an optional (nullable) property using anyOf with null.

Examples:

optional :nickname do
  string
end
# Produces: anyOf: [{ type: "string" }, { type: "null" }]

Parameters:

  • name (Symbol)

    Property name

  • description (String, nil) (defaults to: nil)

    Property description

  • block (Proc)

    Block defining the non-null type



63
64
65
66
67
68
# File 'lib/ask/schema/dsl/complex_types.rb', line 63

def optional(name, description: nil, &block)
  any_of(name, description: description) do
    instance_eval(&block)
    null
  end
end