|
1 | 1 | require 'set'
|
2 |
| -require 'active_model_serializers/adapter' |
| 2 | + |
3 | 3 | module ActiveModel
|
4 | 4 | class SerializableResource
|
5 |
| - ADAPTER_OPTION_KEYS = Set.new([:include, :fields, :adapter, :meta, :meta_key, :links]) |
6 |
| - include ActiveModelSerializers::Logging |
7 |
| - |
8 |
| - delegate :serializable_hash, :as_json, :to_json, to: :adapter |
9 |
| - notify :serializable_hash, :render |
10 |
| - notify :as_json, :render |
11 |
| - notify :to_json, :render |
12 |
| - |
13 |
| - # Primary interface to composing a resource with a serializer and adapter. |
14 |
| - # @return the serializable_resource, ready for #as_json/#to_json/#serializable_hash. |
15 |
| - def initialize(resource, options = {}) |
16 |
| - @resource = resource |
17 |
| - @adapter_opts, @serializer_opts = |
18 |
| - options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }.map { |h| Hash[h] } |
19 |
| - end |
20 |
| - |
21 |
| - def serialization_scope=(scope) |
22 |
| - serializer_opts[:scope] = scope |
23 |
| - end |
24 |
| - |
25 |
| - def serialization_scope |
26 |
| - serializer_opts[:scope] |
27 |
| - end |
28 |
| - |
29 |
| - def serialization_scope_name=(scope_name) |
30 |
| - serializer_opts[:scope_name] = scope_name |
31 |
| - end |
32 |
| - |
33 |
| - # NOTE: if no adapter is available, returns the resource itself. (i.e. adapter is a no-op) |
34 |
| - def adapter |
35 |
| - @adapter ||= find_adapter |
36 |
| - end |
37 |
| - alias adapter_instance adapter |
| 5 | + class << self |
| 6 | + extend ActiveModelSerializers::Deprecate |
38 | 7 |
|
39 |
| - def find_adapter |
40 |
| - return resource unless serializer? |
41 |
| - ActiveModelSerializers::Adapter.create(serializer_instance, adapter_opts) |
42 |
| - rescue ActiveModel::Serializer::CollectionSerializer::NoSerializerError |
43 |
| - resource |
| 8 | + delegate_and_deprecate :new, ActiveModelSerializers::SerializableResource |
44 | 9 | end
|
45 |
| - |
46 |
| - def serializer_instance |
47 |
| - @serializer_instance ||= serializer.new(resource, serializer_opts) |
48 |
| - end |
49 |
| - |
50 |
| - # Get serializer either explicitly :serializer or implicitly from resource |
51 |
| - # Remove :serializer key from serializer_opts |
52 |
| - # Replace :serializer key with :each_serializer if present |
53 |
| - def serializer |
54 |
| - @serializer ||= |
55 |
| - begin |
56 |
| - @serializer = serializer_opts.delete(:serializer) |
57 |
| - @serializer ||= ActiveModel::Serializer.serializer_for(resource) |
58 |
| - |
59 |
| - if serializer_opts.key?(:each_serializer) |
60 |
| - serializer_opts[:serializer] = serializer_opts.delete(:each_serializer) |
61 |
| - end |
62 |
| - @serializer |
63 |
| - end |
64 |
| - end |
65 |
| - alias serializer_class serializer |
66 |
| - |
67 |
| - # True when no explicit adapter given, or explicit appear is truthy (non-nil) |
68 |
| - # False when explicit adapter is falsy (nil or false) |
69 |
| - def use_adapter? |
70 |
| - !(adapter_opts.key?(:adapter) && !adapter_opts[:adapter]) |
71 |
| - end |
72 |
| - |
73 |
| - def serializer? |
74 |
| - use_adapter? && !!serializer |
75 |
| - end |
76 |
| - |
77 |
| - protected |
78 |
| - |
79 |
| - attr_reader :resource, :adapter_opts, :serializer_opts |
80 | 10 | end
|
81 | 11 | end
|
0 commit comments