aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/serializers/json.rb
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-06-23 18:13:46 -0300
committerEmilio Tagua <miloops@gmail.com>2009-06-23 18:13:46 -0300
commitb9088dce07f8525cdb84a1312a77b81db79067d6 (patch)
tree72ace069842b074981ba814ef1c335271176ce27 /activemodel/lib/active_model/serializers/json.rb
parent4864f92ee34e840307d968fa8b04972b6d786fe8 (diff)
parent4417a19b035d73eb46a5e06e296a4b1c8091bef1 (diff)
downloadrails-b9088dce07f8525cdb84a1312a77b81db79067d6.tar.gz
rails-b9088dce07f8525cdb84a1312a77b81db79067d6.tar.bz2
rails-b9088dce07f8525cdb84a1312a77b81db79067d6.zip
Merge commit 'rails/master'
Diffstat (limited to 'activemodel/lib/active_model/serializers/json.rb')
-rw-r--r--activemodel/lib/active_model/serializers/json.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/serializers/json.rb b/activemodel/lib/active_model/serializers/json.rb
new file mode 100644
index 0000000000..60b5cbe948
--- /dev/null
+++ b/activemodel/lib/active_model/serializers/json.rb
@@ -0,0 +1,38 @@
+require 'active_support/json'
+require 'active_support/core_ext/class/attribute_accessors'
+require 'active_support/core_ext/hash/except'
+require 'active_support/core_ext/hash/slice'
+
+module ActiveModel
+ module Serializers
+ module JSON
+ extend ActiveSupport::Concern
+ include ActiveModel::Attributes
+
+ included do
+ cattr_accessor :include_root_in_json, :instance_writer => false
+ end
+
+ def encode_json(encoder)
+ options = encoder.options || {}
+
+ hash = if options[:only]
+ only = Array.wrap(options[:only]).map { |attr| attr.to_s }
+ attributes.slice(*only)
+ elsif options[:except]
+ except = Array.wrap(options[:except]).map { |attr| attr.to_s }
+ attributes.except(*except)
+ else
+ attributes
+ end
+
+ hash = { self.class.model_name.element => hash } if include_root_in_json
+ ActiveSupport::JSON.encode(hash)
+ end
+
+ def as_json(options = nil)
+ self
+ end
+ end
+ end
+end