Sha256: c9c38ec10ae7deb03a7aedb08f3e83fdb482fbf4244542342a19365e92487265

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

require_relative 'restricted_value'

module Opushon
  # The content of headers, query string and body params MUST be described with
  #   the keys below. When a key is missing, its default value is assigned.
  class Parameter
    include Virtus.model(strict: true)

    attribute :title,             String,                 default: '',        required: true
    attribute :description,       String,                 default: '',        required: true
    attribute :type,              String,                 default: 'string',  required: true
    attribute :nullifiable,       Boolean,                default: true,      required: true
    attribute :restricted_values, Array[RestrictedValue],                     required: false
    attribute :example,           BasicObject,                                required: false
    attribute :minlen,            Integer,                                    required: false
    attribute :maxlen,            Integer,                                    required: false
    attribute :pattern,           Regexp,                                     required: false
    attribute :min,               Integer,                                    required: false
    attribute :max,               Integer,                                    required: false

    def to_h
      h = {
        title:              @title,
        description:        @description,
        type:               @type,
        nullifiable:        @nullifiable,
        restricted_values:  maybe_to_a(@restricted_values),
        example:            @example
      }

      if @type.eql?('string')
        h.update(
          minlen:   @minlen,
          maxlen:   @maxlen,
          pattern:  @pattern&.to_s
        )
      end

      if @type.eql?('number')
        h.update(
          min: @min,
          max: @max
        )
      end

      h
    end

    private

    def maybe_to_a(object)
      return if object.nil?

      object.map(&:to_h)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opushon-0.2.2 lib/opushon/parameter.rb