Sha256: 39ca1da8041a0282db204195f543af1266f0ae2d4170fea0fca3ed3803d8a489

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Lurker
  class Endpoint
    class ResponseCodes
      RESPONSE_CODES = 'responseCodes'.freeze
      DESCRIPTION = 'description'.freeze
      SUCCESSFUL = 'successful'.freeze
      STATUS = 'status'.freeze

      def initialize(schema)
        @schema = schema
        @schema[RESPONSE_CODES] ||= []
      end

      def add(status_code, successful, options = {})
        response_code = {
          STATUS => status_code,
          SUCCESSFUL => successful,
          DESCRIPTION => options.fetch(:description, '')
        }

        Lurker::SchemaModifier.append!(@schema[RESPONSE_CODES], response_code)
      end

      def validate!(status_code, successful)
        return if exists?(status_code, successful)

        raise Lurker::UndocumentedResponseCode,
          'Undocumented response: %s, successful: %s' % [
            status_code, successful
          ]
      end

      def exists?(status_code, successful)
        !!@schema[RESPONSE_CODES].detect do |response_code|
          response_code[SUCCESSFUL] == successful &&
            (response_code[STATUS] == status_code ||    # 200
             response_code[STATUS].to_i == status_code) # "200 OK"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lurker-0.6.2 lib/lurker/endpoint/response_codes.rb