class Swaggard::Swagger::Parameters::Query

Public Class Methods

new(string) click to toggle source
# File lib/swaggard/swagger/parameters/query.rb, line 8
def initialize(string)
  @in = 'query'
  parse(string)
end

Public Instance Methods

to_doc() click to toggle source
# File lib/swaggard/swagger/parameters/query.rb, line 13
def to_doc
  {
    'name'          => @name,
    'in'            => @in,
    'required'      => @is_required,
  }.tap do |doc|
    doc.merge!(@type.to_doc)

    doc.merge!('enum' => @options) if @options.any?
    doc.merge!('description'   => description)
  end
end

Private Instance Methods

parse(string) click to toggle source

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 ID of the desired media type.

# File lib/swaggard/swagger/parameters/query.rb, line 31
def parse(string)
  data_type, required, name, options_and_description = string.match(/\A\[(\S*)\](!)?\s*([\w\[\]]*)\s*(.*)\Z/).captures
  allow_multiple = name.gsub!('[]', '')

  options, description = options_and_description.match(/\A(\[.*\])?(.*)\Z/).captures
  options = options ? options.gsub(/\[?\]?\s?/, '').split(',') : []

  @name = name
  @description = description
  @type = Type.new([data_type])
  @is_required = required.present?
  @allow_multiple = allow_multiple.present?
  @options = options
end