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



44
45
46
# File 'lib/ask/schema/dsl/complex_types.rb', line 44

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



30
31
32
33
34
35
# File 'lib/ask/schema/dsl/complex_types.rb', line 30

def array(name, description: nil, required: true, requires: nil, **options, &block)
  if options[:of].nil? && block.nil?
    raise ArgumentError, "array :#{name} needs of: :<item type> (e.g. of: :string) or a block"
  end
  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
18
19
20
21
# File 'lib/ask/schema/dsl/complex_types.rb', line 15

def object(name, description: nil, required: true, requires: nil, **options, &block)
  if options[:of].nil? && block.nil?
    raise ArgumentError,
      "object :#{name} needs a block (inline properties) or of: (a named definition)"
  end
  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



55
56
57
# File 'lib/ask/schema/dsl/complex_types.rb', line 55

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



70
71
72
73
74
75
# File 'lib/ask/schema/dsl/complex_types.rb', line 70

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