Sha256: 98f12998b8282fe4cf3e2925554b6793254fcc0645c86a6c6bb9acfa091466ae

Contents?: true

Size: 850 Bytes

Versions: 1

Compression:

Stored size: 850 Bytes

Contents

require 'json-schema'
require 'esplanade/error'

module Esplanade
  class Request
    class Validation
      def initialize(doc, raw)
        @doc = doc
        @raw = raw
      end

      def valid!
        raise ContentTypeIsNotJson, mini_message unless @doc.content_type  == 'application/json'
        @error ||= JSON::Validator.fully_validate(@doc.json_schema, @raw.body.to_hash)

        raise Invalid, message unless @error.empty?
      end

      private

      def mini_message
        {
          method: @doc.method,
          path:   @doc.path,
          content_type: @doc.content_type
        }
      end

      def message
        {
          method: @raw.method,
          path:   @raw.path,
          content_type: @raw.content_type,
          body:   @raw.body.to_hash,
          error:  @error
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
esplanade-1.3.0 lib/esplanade/request/validation.rb