Sha256: 16ffb1f06160835f9c180801cd090497fc1fdb8977d098bdd6a57cb11b20df70

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

# 仅仅处理 URL、Query、Header 中的参数

module Meta
  class Parameters
    extend Forwardable

    attr_reader :parameters

    def initialize(parameters)
      @parameters = parameters
    end

    def filter(request)
      parameters.map do |name, options|
        schema = options[:schema]
        value = if options[:in] == 'header'
          schema.filter(request.get_header('HTTP_' + name.to_s.upcase.gsub('-', '_')))
        else
          schema.filter(request.params[name.to_s])
        end
        [name, value]
      end.to_h
    end

    def to_swagger_doc
      parameters.map do |name, options|
        property_options = options[:schema].options
        {
          name: name,
          in: options[:in],
          required: property_options.key?(:required) ? property_options[:required] : false,
          description: property_options[:description] || '',
          schema: {
            type: property_options[:type]
          }.compact
        }.compact
      end unless parameters.empty?
    end

    def merge(parameters)
      parameters_hash = parameters.is_a?(Parameters) ? parameters.parameters : parameters
      Parameters.new(self.parameters.merge(parameters_hash))
    end

    def_delegators :parameters, :key?, :empty?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
meta-api-0.0.5 lib/meta/application/parameters.rb