Sha256: 93c9c15890c61b051a1ff14ffb86d69ed1f3222adfe61c542d341acba226ca49

Contents?: true

Size: 1.65 KB

Versions: 32

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

class ReeSwagger::BuildRequestBodySchema
  include Ree::FnDSL

  fn :build_request_body_schema do
    link :get_caster_definition
  end

  contract(
    ReeMapper::Mapper,
    ArrayOf[Symbol],
    Nilor[ArrayOf[ReeMapper::FieldsFilter]] => Nilor[Hash]
  )
  def call(mapper, path_params = [], fields_filters = nil)
    if mapper.type
      return get_caster_definition(mapper.type, method(:call).to_proc)
    end

    required_fields = []

    properties = mapper.fields.each_with_object({}) do |(_name, field), acc|
      next unless fields_filters.nil? || fields_filters.all? { _1.allow?(field.name) }

      next if path_params.include?(field.name)

      if field.type == mapper
        acc[field.name] = {}
        next
      end

      swagger_field = {}

      required_fields << field.name.to_s if !field.optional
      field_mapper = field.type

      nested_fields_filters = fields_filters&.filter_map { _1.filter_for(field.name) }

      if field.fields_filter
        nested_fields_filters = if nested_fields_filters
          nested_fields_filters + [field.fields_filter]
        else
          [field.fields_filter]
        end
      end

      swagger_type = call(field_mapper, [], nested_fields_filters)

      swagger_field.merge!(swagger_type) if swagger_type

      description = field.doc
      swagger_field[:description] = description if description

      swagger_field[:nullable] = true if field.null

      acc[field.name] = swagger_field
    end

    return if properties.empty?

    obj = {
      type: 'object',
      properties: properties,
    }
    obj[:required] = required_fields if required_fields.size != 0
    obj
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
ree_lib-1.1.0 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb
ree_lib-1.0.106 lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb