module Sequel::Plugins::JsonSerializer::DatasetMethods

  1. lib/sequel/plugins/json_serializer.rb
Parent: JsonSerializer

Methods

Public Instance

  1. to_json

Public Instance methods

to_json (*a)

Return a JSON string representing an array of all objects in this dataset. Takes the same options as the instance method, and passes them to every instance. Additionally, respects the following options:

:array

An array of instances. If this is not provided, calls all on the receiver to get the array.

:root

If set to :collection, only wraps the collection in a root object. If set to :instance, only wraps the instances in a root object. If set to :both, wraps both the collection and instances in a root object. Unfortunately, for backwards compatibility, if this option is true and doesn’t match one of those symbols, it defaults to both. That may change in a future version, so for forwards compatibility, you should pick a specific symbol for your desired behavior.

[show source]
# File lib/sequel/plugins/json_serializer.rb, line 312
def to_json(*a)
  if opts = a.first.is_a?(Hash)
    opts = model.json_serializer_opts.merge(a.first)
    a = []
  else
    opts = model.json_serializer_opts
  end

  collection_root = case opts[:root]
  when nil, false, :instance
    false
  when :both
    true
  else
    opts = opts.dup
    opts.delete(:root)
    true
  end

  res = if row_proc 
    array = if opts[:array]
      opts = opts.dup
      opts.delete(:array)
    else
      all
    end
    array.map{|obj| Literal.new(Sequel.object_to_json(obj, opts))}
   else
    all
  end

  if collection_root
    Sequel.object_to_json({model.send(:pluralize, model.send(:underscore, model.to_s)) => res}, *a)
  else
    Sequel.object_to_json(res, *a)
  end
end