Module: Sequel::Plugins::JsonSerializer::DatasetMethods
- Defined in:
- lib/sequel/plugins/json_serializer.rb
Instance Method Summary collapse
-
#to_json(*a) ⇒ Object
Return a JSON string representing an array of all objects in this dataset.
Instance Method Details
#to_json(*a) ⇒ Object
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.
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
# 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 |