Methods

Class/Module Index [+]

Quicksearch

Sequel::Plugins::JsonSerializer::DatasetMethods

Public Instance Methods

to_json(*a) click to toggle source

Return a JSON string representing an array of all objects in this dataset. Takes the same options as the 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.

# File lib/sequel/plugins/json_serializer.rb, line 369
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 :collection
    opts = opts.dup
    opts.delete(:root)
    opts[:naked] = true unless opts.has_key?(:naked)
    true
  when :both
    true
  else
    Sequel::Deprecation.deprecate('The to_json :root=>true option will mean :root=>:collection starting in Sequel 4.  Use :root=>:both if you want to wrap both the collection and each item in a wrapper.')
    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

[Validate]

Generated with the Darkfish Rdoc Generator 2.