module OjSerializers::JsonStringEncoder

Public: Contains utility functions to render objects to JSON.

Useful to instantiate a single `JsonWriter` when rendering new serializers.

Public Class Methods

actual_encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
Alias for: encode_to_json
encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras) click to toggle source

Public: Allows to use Oj::Serializer in `serializer` and `each_serializer` as with ActiveModelSerializers.

render json: items, each_serializer: ItemSerializer
render json: item, serializer: ItemSerializer

Returns a JSON string.

NOTE: Unlike the default encoder, this one will use the `root` option regardless of whether a serializer is specified or not.

# File lib/oj_serializers/json_string_encoder.rb, line 17
def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
  # NOTE: Serializers may override `new_json_writer` to modify the behavior.
  writer = (serializer || each_serializer || OjSerializers::Serializer).send(:new_json_writer)

  if root
    writer.push_object
    writer.push_key(root.to_s)
  end

  if serializer
    serializer.write_one(writer, object, extras)
  elsif each_serializer
    each_serializer.write_many(writer, object, extras)
  elsif object.is_a?(String)
    return object unless root

    writer.push_json(object)
  else
    writer.push_value(object)
  end

  writer.pop if root

  writer.to_json
end
Also aliased as: actual_encode_to_json