Raise FastJsonapi scoped error in case of unsupported include

This commit is contained in:
nattfodd 2020-09-17 15:03:49 +03:00
parent 1bcf8d2cb5
commit 3ae3ef4c23
No known key found for this signature in database
GPG Key ID: 4BDACB33B1FC518A
4 changed files with 23 additions and 2 deletions

View File

@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'jsonapi/serializer/errors'
module FastJsonapi
require 'fast_jsonapi/object_serializer'
if defined?(::Rails)

View File

@ -342,7 +342,7 @@ module FastJsonapi
parse_includes_list(includes).keys.each do |include_item|
relationship_to_include = relationships_to_serialize[include_item]
raise ArgumentError, "#{include_item} is not specified as a relationship on #{name}" unless relationship_to_include
raise(JSONAPI::Serializer::UnsupportedIncludeError.new(include_item, name)) unless relationship_to_include
relationship_to_include.static_serializer # called for a side-effect to check for a known serializer class.
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
module JSONAPI
module Serializer
class Error < StandardError; end
class UnsupportedIncludeError < Error
attr_reader :include_item, :klass
def initialize(include_item, klass)
@include_item = include_item
@klass = klass
end
def message
"#{include_item} is not specified as a relationship on #{klass}"
end
end
end
end

View File

@ -18,7 +18,7 @@ RSpec.describe JSONAPI::Serializer do
it do
expect { ActorSerializer.new(actor, include: ['bad_include']) }
.to raise_error(
ArgumentError, /bad_include is not specified as a relationship/
JSONAPI::Serializer::UnsupportedIncludeError, /bad_include is not specified as a relationship/
)
end
end