Class: DryStructParser::StructSchemaParser

Inherits:
Object
  • Object
show all
Defined in:
lib/mortymer/dry_swagger.rb

Overview

Just to monkey patch it

Instance Method Summary collapse

Instance Method Details

#visit_constructor(node, opts) ⇒ Object

rubocop:disable Metrics/AbcSize,Metrics/MethodLength



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/mortymer/dry_swagger.rb', line 17

def visit_constructor(node, opts) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  # Handle coercible types which have the form:
  # [:constructor, [[:nominal, [Type, {}]], [:method, Kernel, :Type]]]
  if node[0].is_a?(Array) && node[0][0] == :nominal
    if node[0][1][0] == Mortymer::Types::RackFile
      keys[opts[:key]] = node[0][1][1][:swagger].merge(
        required: opts.fetch(:required, true),
        nullable: opts.fetch(:nullable, false)
      )
      return
    end
    required = opts.fetch(:required, true)
    nullable = opts.fetch(:nullable, false)
    type = node[0][1][0] # Get the type from nominal node
    if PREDICATE_TYPES[type.name.to_sym]
      definition = {
        type: PREDICATE_TYPES[type.name.to_sym],
        required: required,
        nullable: nullable
      }
      definition[:array] = opts[:array] if opts[:array]
      keys[opts[:key]] = definition
      return
    end
  end

  # Fall back to regular visit for other cases
  visit(node[0], opts)
end