Sha256: a5d95165036910a754ae1663715a7074778558ce39591b06ae34f3d6d16c8285

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

require_relative 'base'
require_relative '../type'

module Swaggard
  module Swagger
    module Parameters
      class Body < Base

        attr_reader :definition

        def initialize(operation_name)
          @in           = 'body'
          @name         = 'body'
          @description  = ''
          @definition   = Definition.new("#{operation_name}_body")
        end

        def add_property(string)
          property = Property.new(string)
          @definition.add_property(property)
        end

        def to_doc
          doc = super

          doc.delete('type')

          doc['required'] = false
          doc['schema'] = { '$ref' => "#/definitions/#{@definition.id}" }

          doc
        end

        private


        class Property

          attr_reader :id

          def initialize(string)
            parse(string)
          end

          def to_doc
            result = @type.to_doc
            result['description'] = @description if @description
            result
          end

          # Example: [Array]     status            Filter by status. (e.g. status[]=1&status[]=2&status[]=3)
          # Example: [Array]     status(required)  Filter by status. (e.g. status[]=1&status[]=2&status[]=3)
          # Example: [Integer]   media[media_type_id]                          ID of the desired media type.
          def parse(string)
            data_type, name, required, description = string.match(/\A\[(\w*)\]\s*([\w\[\]]*)(\(required\))?\s*(.*)\Z/).captures

            @id = name
            @description = description
            @type = Type.new([data_type.downcase])
          end

        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
swaggard-0.0.4 lib/swaggard/swagger/parameters/body.rb