oj_serializers 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,28 +6,13 @@ require 'active_model_serializers'
6
6
  # as well.
7
7
  class ActiveModel::Serializer
8
8
  # JsonStringEncoder: Used internally to write a single object to JSON.
9
- #
10
- # Returns nothing.
11
- def self.write_one(writer, object, options)
12
- writer.push_value(new(object, options))
9
+ def self.one(object, options = nil)
10
+ new(object, options)
13
11
  end
14
12
 
15
13
  # JsonStringEncoder: Used internally to write an array of objects to JSON.
16
- #
17
- # Returns nothing.
18
- def self.write_many(writer, array, options)
19
- writer.push_array
20
- array.each do |object|
21
- write_one(writer, object, options)
22
- end
23
- writer.pop
24
- end
25
-
26
- # JsonStringEncoder: Used internally to instantiate an Oj::StringWriter.
27
- #
28
- # Returns an Oj::StringWriter.
29
- def self.new_json_writer
30
- OjSerializers::Serializer.send(:new_json_writer)
14
+ def self.many(array, options = nil)
15
+ array.map { |object| new(object, options) }
31
16
  end
32
17
  end
33
18
 
@@ -20,10 +20,10 @@ module OjSerializers::ControllerSerialization
20
20
  #
21
21
  # which is more performant.
22
22
  %i[_render_option_json _render_with_renderer_json].each do |renderer_method|
23
- define_method renderer_method do |resource, **options|
23
+ define_method renderer_method do |resource, options = {}|
24
24
  serializer_class = options[:serializer] || options[:each_serializer]
25
25
  if serializer_class && serializer_class < OjSerializers::Serializer
26
- super(OjSerializers::JsonStringEncoder.encode_to_json(resource, options), options.except(:root, :serializer, :each_serializer))
26
+ super(OjSerializers::JsonStringEncoder.encode_to_json(resource, **options), options.except(:root, :serializer, :each_serializer))
27
27
  else
28
28
  super(resource, **options)
29
29
  end
@@ -14,43 +14,27 @@ module OjSerializers::JsonStringEncoder
14
14
  # regardless of whether a serializer is specified or not.
15
15
  #
16
16
  # Returns a JSON string.
17
- def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
18
- # NOTE: Serializers may override `new_json_writer` to modify the behavior.
19
- writer = (serializer || each_serializer || OjSerializers::Serializer).send(:new_json_writer)
20
-
21
- if root
22
- writer.push_object
23
- writer.push_key(root.to_s)
24
- end
25
-
26
- if serializer
27
- serializer.write_one(writer, object, extras)
17
+ def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **options)
18
+ result = if serializer
19
+ serializer.one(object, options)
28
20
  elsif each_serializer
29
- each_serializer.write_many(writer, object, extras)
21
+ each_serializer.many(object, options)
30
22
  elsif object.is_a?(String)
31
- return object unless root
32
-
33
- writer.push_json(object)
23
+ OjSerializers::JsonValue.new(object)
34
24
  else
35
- writer.push_value(object)
25
+ object
36
26
  end
37
-
38
- writer.pop if root
39
-
40
- writer.to_json
27
+ Oj.dump(root ? { root => result } : result)
41
28
  end
42
29
 
43
30
  if OjSerializers::Serializer::DEV_MODE
44
31
  alias actual_encode_to_json encode_to_json
45
32
  # Internal: Allows to detect misusage of the options during development.
46
- def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
47
- if serializer && serializer < OjSerializers::Serializer
48
- raise ArgumentError, 'You must use `each_serializer` when serializing collections' if object.respond_to?(:each)
49
- end
50
- if each_serializer && each_serializer < OjSerializers::Serializer
51
- raise ArgumentError, 'You must use `serializer` when serializing a single object' unless object.respond_to?(:each)
52
- end
53
- actual_encode_to_json(object, root: root, serializer: serializer, each_serializer: each_serializer, **extras)
33
+ def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **options)
34
+ raise ArgumentError, 'You must use `each_serializer` when serializing collections' if serializer && serializer < OjSerializers::Serializer && object.respond_to?(:map)
35
+ raise ArgumentError, 'You must use `serializer` when serializing a single object' if each_serializer && each_serializer < OjSerializers::Serializer && !object.respond_to?(:map)
36
+
37
+ actual_encode_to_json(object, root: root, serializer: serializer, each_serializer: each_serializer, **options)
54
38
  end
55
39
  end
56
40
  end