diff --git a/docs/jsonapi/schema.md b/docs/jsonapi/schema.md
index ba718ec0..586fd8cd 100644
--- a/docs/jsonapi/schema.md
+++ b/docs/jsonapi/schema.md
@@ -81,7 +81,7 @@ Example supported requests
| linkage | String(type), String(id), meta | type, id | AMS::Adapter::JsonApi#primary_data_for
| pagination | pageObject(first), pageObject(last),
pageObject(prev), pageObject(next) | | AMS::Adapter::JsonApi::PaginationLinks#serializable_hash
| pagination.pageObject | oneOf(Uri, null) | |
-| jsonapi | String(version), meta | | AMS::Adapter::JsonApi::ApiObjects::JsonApi#as_json
+| jsonapi | String(version), meta | | AMS::Adapter::JsonApi::Jsonapi#as_json
| error | String(id), links, String(status),
String(code), String(title),
String(detail), error.source, meta | | AM::S::ErrorSerializer, AMS::Adapter::JsonApi::Error.resource_errors
| error.source | String(pointer), String(parameter) | | AMS::Adapter::JsonApi::Error.error_source
| pointer | [JSON Pointer RFC6901](https://tools.ietf.org/html/rfc6901) | | AMS::JsonPointer
diff --git a/lib/active_model/serializer/configuration.rb b/lib/active_model/serializer/configuration.rb
index 94dc80e0..b347958c 100644
--- a/lib/active_model/serializer/configuration.rb
+++ b/lib/active_model/serializer/configuration.rb
@@ -21,6 +21,12 @@ module ActiveModel
config.adapter = :attributes
config.jsonapi_resource_type = :plural
+ config.jsonapi_version = '1.0'
+ config.jsonapi_toplevel_meta = {}
+ # Make JSON API top-level jsonapi member opt-in
+ # ref: http://jsonapi.org/format/#document-top-level
+ config.jsonapi_include_toplevel_object = false
+
config.schema_path = 'test/support/schemas'
end
end
diff --git a/lib/active_model_serializers/adapter/json_api.rb b/lib/active_model_serializers/adapter/json_api.rb
index dfb387bf..f06a69e9 100644
--- a/lib/active_model_serializers/adapter/json_api.rb
+++ b/lib/active_model_serializers/adapter/json_api.rb
@@ -2,51 +2,16 @@ module ActiveModelSerializers
module Adapter
class JsonApi < Base
extend ActiveSupport::Autoload
- autoload :PaginationLinks
autoload :FragmentCache
- autoload :Link
- autoload :Meta
+ autoload :Jsonapi
autoload :ResourceIdentifier
autoload :Relationship
+ autoload :Link
+ autoload :PaginationLinks
+ autoload :Meta
autoload :Error
autoload :Deserialization
- # TODO: if we like this abstraction and other API objects to it,
- # then extract to its own file and require it.
- module ApiObjects
- # {http://jsonapi.org/format/#document-jsonapi-object Jsonapi Object}
- module Jsonapi
- ActiveModelSerializers.config.jsonapi_version = '1.0'
- ActiveModelSerializers.config.jsonapi_toplevel_meta = {}
- # Make JSON API top-level jsonapi member opt-in
- # ref: http://jsonapi.org/format/#document-top-level
- ActiveModelSerializers.config.jsonapi_include_toplevel_object = false
-
- module_function
-
- def add!(hash)
- hash.merge!(object) if include_object?
- end
-
- def include_object?
- ActiveModelSerializers.config.jsonapi_include_toplevel_object
- end
-
- # TODO: see if we can cache this
- def object
- object = {
- jsonapi: {
- version: ActiveModelSerializers.config.jsonapi_version,
- meta: ActiveModelSerializers.config.jsonapi_toplevel_meta
- }
- }
- object[:jsonapi].reject! { |_, v| v.blank? }
-
- object
- end
- end
- end
-
def initialize(serializer, options = {})
super
@include_tree = ActiveModel::Serializer::IncludeTree.from_include_args(options[:include])
@@ -74,7 +39,7 @@ module ActiveModelSerializers
hash[:data] = is_collection ? primary_data : primary_data[0]
hash[:included] = included if included.any?
- ApiObjects::Jsonapi.add!(hash)
+ Jsonapi.add!(hash)
if instance_options[:links]
hash[:links] ||= {}
@@ -100,7 +65,7 @@ module ActiveModelSerializers
def failure_document
hash = {}
# PR Please :)
- # ApiObjects::Jsonapi.add!(hash)
+ # Jsonapi.add!(hash)
if serializer.respond_to?(:each)
hash[:errors] = serializer.flat_map do |error_serializer|
@@ -114,7 +79,7 @@ module ActiveModelSerializers
def fragment_cache(cached_hash, non_cached_hash)
root = false if instance_options.include?(:include)
- ActiveModelSerializers::Adapter::JsonApi::FragmentCache.new.fragment_cache(root, cached_hash, non_cached_hash)
+ FragmentCache.new.fragment_cache(root, cached_hash, non_cached_hash)
end
protected
@@ -217,7 +182,7 @@ module ActiveModelSerializers
# {http://jsonapi.org/format/#fetching-pagination Pagination Links}
def pagination_links_for(serializer, options)
- JsonApi::PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
+ PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
end
# {http://jsonapi.org/format/#document-meta Docment Meta}
diff --git a/lib/active_model_serializers/adapter/json_api/jsonapi.rb b/lib/active_model_serializers/adapter/json_api/jsonapi.rb
new file mode 100644
index 00000000..8df1ae96
--- /dev/null
+++ b/lib/active_model_serializers/adapter/json_api/jsonapi.rb
@@ -0,0 +1,31 @@
+module ActiveModelSerializers
+ module Adapter
+ class JsonApi < Base
+ # {http://jsonapi.org/format/#document-jsonapi-object Jsonapi Object}
+ module Jsonapi
+ module_function
+
+ def add!(hash)
+ hash.merge!(object) if include_object?
+ end
+
+ def include_object?
+ ActiveModelSerializers.config.jsonapi_include_toplevel_object
+ end
+
+ # TODO: see if we can cache this
+ def object
+ object = {
+ jsonapi: {
+ version: ActiveModelSerializers.config.jsonapi_version,
+ meta: ActiveModelSerializers.config.jsonapi_toplevel_meta
+ }
+ }
+ object[:jsonapi].reject! { |_, v| v.blank? }
+
+ object
+ end
+ end
+ end
+ end
+end