Sha256: d6c4bde5edc7e6899740b1f06f6ce82262cfae12ff8b6bfed0b86c77a59c4815

Contents?: true

Size: 1.71 KB

Versions: 7

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module GrapeSwagger
  module DocMethods
    class FormatData
      class << self
        def to_format(parameters)
          parameters.reject { |parameter| parameter[:in] == 'body' }.each do |b|
            related_parameters = parameters.select do |p|
              p[:name] != b[:name] && p[:name].to_s.start_with?("#{b[:name].to_s.gsub(/\[\]\z/, '')}[")
            end
            parameters.reject! { |p| p[:name] == b[:name] } if move_down(b, related_parameters)
          end
          parameters
        end

        def move_down(parameter, related_parameters)
          case parameter[:type]
          when 'array'
            add_array(parameter, related_parameters)
            unless related_parameters.blank?
              add_braces(parameter, related_parameters) if parameter[:name].match?(/\A.*\[\]\z/)
              return true
            end
          when 'object'
            return true
          end
          false
        end

        def add_braces(parameter, related_parameters)
          param_name = parameter[:name].gsub(/\A(.*)\[\]\z/, '\1')
          related_parameters.each { |p| p[:name] = p[:name].gsub(param_name, "#{param_name}[]") }
        end

        def add_array(parameter, related_parameters)
          related_parameters.each do |p|
            next if p.key?(:items)

            p_type = p[:type] == 'array' ? 'string' : p[:type]
            p[:items] = { type: p_type, format: p[:format], enum: p[:enum], is_array: p[:is_array] }
            p[:items].compact!
            p[:type] = 'array'
            p[:is_array] = parameter[:is_array]
            p.delete(:format)
            p.delete(:enum)
            p.compact!
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
grape-swagger-2.1.2 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-2.1.1 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-2.0.3 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-2.0.2 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-2.0.1 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-2.0.0 lib/grape-swagger/doc_methods/format_data.rb
grape-swagger-1.6.1 lib/grape-swagger/doc_methods/format_data.rb