From d450ac4459165e3af6e45798a6afeac1876f3bc4 Mon Sep 17 00:00:00 2001 From: Rick Olson Date: Tue, 1 Apr 2008 20:09:45 +0000 Subject: Tweak ActiveRecord::Base#to_json to include a root value in the returned hash: {post: {title: ...}} [rick] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9202 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../lib/active_record/serializers/json_serializer.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/serializers/json_serializer.rb b/activerecord/lib/active_record/serializers/json_serializer.rb index c0a5850d5d..d024adba39 100644 --- a/activerecord/lib/active_record/serializers/json_serializer.rb +++ b/activerecord/lib/active_record/serializers/json_serializer.rb @@ -1,5 +1,10 @@ module ActiveRecord #:nodoc: module Serialization + def self.included(base) + base.cattr_accessor :include_root_in_json, :instance_writer => false + base.extend ClassMethods + end + # Returns a JSON string representing the model. Some configuration is # available through +options+. # @@ -48,7 +53,11 @@ module ActiveRecord #:nodoc: # {"comments": [{"body": "Don't think too hard"}], # "title": "So I was thinking"}]} def to_json(options = {}) - JsonSerializer.new(self, options).to_s + if include_root_in_json + "{#{self.class.json_class_name}: #{JsonSerializer.new(self, options).to_s}}" + else + JsonSerializer.new(self, options).to_s + end end def from_json(json) @@ -61,5 +70,11 @@ module ActiveRecord #:nodoc: serializable_record.to_json end end + + module ClassMethods + def json_class_name + @json_class_name ||= name.demodulize.underscore.inspect + end + end end end -- cgit v1.2.3