Sha256: fd1e30fb60e9158eedd032c6fb23969a512ec514574fd2c55a2822bb13e3e31f

Contents?: true

Size: 1.49 KB

Versions: 7

Compression:

Stored size: 1.49 KB

Contents

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

module Meta
  class Parameters
    extend Forwardable

    attr_reader :parameters

    def initialize(parameters)
      @parameters = parameters.dup
    end

    def filter(request)
      errors = {}
      final_value = {}

      parameters.each 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
        final_value[name] = value
      rescue JsonSchema::ValidationError => e
        errors[name] = e.message
      end
      raise Errors::ParameterInvalid.new(errors) unless errors.empty?

      final_value
    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

7 entries across 7 versions & 1 rubygems

Version Path
meta-api-0.2.0 lib//meta/application/parameters.rb
meta-api-0.1.2 lib//meta/application/parameters.rb
meta-api-0.1.1 lib//meta/application/parameters.rb
meta-api-0.1.0 lib//meta/application/parameters.rb
meta-api-0.0.9 lib//meta/application/parameters.rb
meta-api-0.0.8 lib/meta/application/parameters.rb
meta-api-0.0.7 lib/meta/application/parameters.rb