Sha256: 188711153a394cc290f887b49a4b6773b969d275fa20f809d88406a0293c332b

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module SimpleJsonapi
  module Rails
    module ActionController
      class RequestValidator
        attr_reader :request, :params

        delegate :body, :content_type, :media_type, :accept, :path, to: :request, prefix: true

        def initialize(request, params)
          @request = request
          @params = params
        end

        def valid_content_type_header?
          if request.respond_to?(:media_type)
            !request_has_body? || request_media_type == SimpleJsonapi::MIME_TYPE
          else
            !request_has_body? || request_content_type == SimpleJsonapi::MIME_TYPE
          end
        end

        def valid_accept_header?
          request_accept.blank? || request_accept == SimpleJsonapi::MIME_TYPE
        end

        def valid_request_body?
          return true unless request_has_body?

          params["data"].present? && valid_relationship_body?
        end

        def valid_relationship_body?
          request_path.exclude?("relationships") || params["data"]&.is_a?(Array)
        end

        private

        def request_has_body?
          request_body.size > 0
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_jsonapi_rails-1.3.0 lib/simple_jsonapi/rails/action_controller/request_validator.rb