Skip to content

Commit 5d7a1a4

Browse files
committed
Remove the last of ApiObjects
1 parent e30b2a4 commit 5d7a1a4

File tree

4 files changed

+46
-44
lines changed

4 files changed

+46
-44
lines changed

docs/jsonapi/schema.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Example supported requests
8181
| linkage | String(type), String(id), meta | type, id | AMS::Adapter::JsonApi#primary_data_for
8282
| pagination | pageObject(first), pageObject(last),<br>pageObject(prev), pageObject(next) | | AMS::Adapter::JsonApi::PaginationLinks#serializable_hash
8383
| pagination.pageObject | oneOf(Uri, null) | |
84-
| jsonapi | String(version), meta | | AMS::Adapter::JsonApi::ApiObjects::JsonApi#as_json
84+
| jsonapi | String(version), meta | | AMS::Adapter::JsonApi::Jsonapi#as_json
8585
| error | String(id), links, String(status),<br>String(code), String(title),<br>String(detail), error.source, meta | | AM::S::ErrorSerializer, AMS::Adapter::JsonApi::Error.resource_errors
8686
| error.source | String(pointer), String(parameter) | | AMS::Adapter::JsonApi::Error.error_source
8787
| pointer | [JSON Pointer RFC6901](https://tools.ietf.org/html/rfc6901) | | AMS::JsonPointer

lib/active_model/serializer/configuration.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ def config.array_serializer
2121

2222
config.adapter = :attributes
2323
config.jsonapi_resource_type = :plural
24+
config.jsonapi_version = '1.0'
25+
config.jsonapi_toplevel_meta = {}
26+
# Make JSON API top-level jsonapi member opt-in
27+
# ref: http://jsonapi.org/format/#document-top-level
28+
config.jsonapi_include_toplevel_object = false
29+
2430
config.schema_path = 'test/support/schemas'
2531
end
2632
end

lib/active_model_serializers/adapter/json_api.rb

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,16 @@ module ActiveModelSerializers
22
module Adapter
33
class JsonApi < Base
44
extend ActiveSupport::Autoload
5-
autoload :PaginationLinks
65
autoload :FragmentCache
7-
autoload :Link
8-
autoload :Meta
6+
autoload :Jsonapi
97
autoload :ResourceIdentifier
108
autoload :Relationship
9+
autoload :Link
10+
autoload :PaginationLinks
11+
autoload :Meta
1112
autoload :Error
1213
autoload :Deserialization
1314

14-
# TODO: if we like this abstraction and other API objects to it,
15-
# then extract to its own file and require it.
16-
module ApiObjects
17-
# {http://jsonapi.org/format/#document-jsonapi-object Jsonapi Object}
18-
module Jsonapi
19-
ActiveModelSerializers.config.jsonapi_version = '1.0'
20-
ActiveModelSerializers.config.jsonapi_toplevel_meta = {}
21-
# Make JSON API top-level jsonapi member opt-in
22-
# ref: http://jsonapi.org/format/#document-top-level
23-
ActiveModelSerializers.config.jsonapi_include_toplevel_object = false
24-
25-
module_function
26-
27-
def add!(hash)
28-
hash.merge!(object) if include_object?
29-
end
30-
31-
def include_object?
32-
ActiveModelSerializers.config.jsonapi_include_toplevel_object
33-
end
34-
35-
# TODO: see if we can cache this
36-
def object
37-
object = {
38-
jsonapi: {
39-
version: ActiveModelSerializers.config.jsonapi_version,
40-
meta: ActiveModelSerializers.config.jsonapi_toplevel_meta
41-
}
42-
}
43-
object[:jsonapi].reject! { |_, v| v.blank? }
44-
45-
object
46-
end
47-
end
48-
end
49-
5015
def initialize(serializer, options = {})
5116
super
5217
@include_tree = ActiveModel::Serializer::IncludeTree.from_include_args(options[:include])
@@ -74,7 +39,7 @@ def success_document(options)
7439
hash[:data] = is_collection ? primary_data : primary_data[0]
7540
hash[:included] = included if included.any?
7641

77-
ApiObjects::Jsonapi.add!(hash)
42+
Jsonapi.add!(hash)
7843

7944
if instance_options[:links]
8045
hash[:links] ||= {}
@@ -100,7 +65,7 @@ def success_document(options)
10065
def failure_document
10166
hash = {}
10267
# PR Please :)
103-
# ApiObjects::Jsonapi.add!(hash)
68+
# Jsonapi.add!(hash)
10469

10570
if serializer.respond_to?(:each)
10671
hash[:errors] = serializer.flat_map do |error_serializer|
@@ -114,7 +79,7 @@ def failure_document
11479

11580
def fragment_cache(cached_hash, non_cached_hash)
11681
root = false if instance_options.include?(:include)
117-
ActiveModelSerializers::Adapter::JsonApi::FragmentCache.new.fragment_cache(root, cached_hash, non_cached_hash)
82+
FragmentCache.new.fragment_cache(root, cached_hash, non_cached_hash)
11883
end
11984

12085
protected
@@ -217,7 +182,7 @@ def links_for(serializer)
217182

218183
# {http://jsonapi.org/format/#fetching-pagination Pagination Links}
219184
def pagination_links_for(serializer, options)
220-
JsonApi::PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
185+
PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
221186
end
222187

223188
# {http://jsonapi.org/format/#document-meta Docment Meta}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module ActiveModelSerializers
2+
module Adapter
3+
class JsonApi < Base
4+
# {http://jsonapi.org/format/#document-jsonapi-object Jsonapi Object}
5+
module Jsonapi
6+
module_function
7+
8+
def add!(hash)
9+
hash.merge!(object) if include_object?
10+
end
11+
12+
def include_object?
13+
ActiveModelSerializers.config.jsonapi_include_toplevel_object
14+
end
15+
16+
# TODO: see if we can cache this
17+
def object
18+
object = {
19+
jsonapi: {
20+
version: ActiveModelSerializers.config.jsonapi_version,
21+
meta: ActiveModelSerializers.config.jsonapi_toplevel_meta
22+
}
23+
}
24+
object[:jsonapi].reject! { |_, v| v.blank? }
25+
26+
object
27+
end
28+
end
29+
end
30+
end
31+
end

0 commit comments

Comments
 (0)