aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test/cases/serializer_test.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2011-11-23 23:18:13 +0000
committerJosé Valim <jose.valim@gmail.com>2011-11-23 23:18:15 +0000
commit8896b4fdc8a543157cdf4dfc378607ebf6c10ab0 (patch)
tree5deca0d54d2c103d0a9e6167a756d638fc25e9ec /activemodel/test/cases/serializer_test.rb
parent0536ea8c7855222111fad6df71d0d09b77ea4317 (diff)
downloadrails-8896b4fdc8a543157cdf4dfc378607ebf6c10ab0.tar.gz
rails-8896b4fdc8a543157cdf4dfc378607ebf6c10ab0.tar.bz2
rails-8896b4fdc8a543157cdf4dfc378607ebf6c10ab0.zip
Implement ArraySerializer and move old serialization API to a new namespace.
The following constants were renamed: ActiveModel::Serialization => ActiveModel::Serializable ActiveModel::Serializers::JSON => ActiveModel::Serializable::JSON ActiveModel::Serializers::Xml => ActiveModel::Serializable::XML The main motivation for such a change is that `ActiveModel::Serializers::JSON` was not actually a serializer, but a module that when included allows the target to be serializable to JSON. With such changes, we were able to clean up the namespace to add true serializers as the ArraySerializer.
Diffstat (limited to 'activemodel/test/cases/serializer_test.rb')
-rw-r--r--activemodel/test/cases/serializer_test.rb65
1 files changed, 62 insertions, 3 deletions
diff --git a/activemodel/test/cases/serializer_test.rb b/activemodel/test/cases/serializer_test.rb
index 00d519dc1a..e99b3692ec 100644
--- a/activemodel/test/cases/serializer_test.rb
+++ b/activemodel/test/cases/serializer_test.rb
@@ -9,18 +9,34 @@ class SerializerTest < ActiveModel::TestCase
def read_attribute_for_serialization(name)
@attributes[name]
end
+
+ def as_json(*)
+ { :model => "Model" }
+ end
end
- class User < Model
+ class User
+ include ActiveModel::Serializable
+
attr_accessor :superuser
+ attr_writer :model_serializer
def initialize(hash={})
- super hash.merge(:first_name => "Jose", :last_name => "Valim", :password => "oh noes yugive my password")
+ @model_serializer = nil
+ @attributes = hash.merge(:first_name => "Jose", :last_name => "Valim", :password => "oh noes yugive my password")
+ end
+
+ def read_attribute_for_serialization(name)
+ @attributes[name]
end
def super_user?
@superuser
end
+
+ def model_serializer
+ @model_serializer || super
+ end
end
class Post < Model
@@ -403,4 +419,47 @@ class SerializerTest < ActiveModel::TestCase
}
}, serializer.as_json)
end
-end
+
+ def test_array_serializer
+ model = Model.new
+ user = User.new
+ post = Post.new(:title => "New Post", :body => "Body of new post", :email => "tenderlove@tenderlove.com")
+ comments = Comment.new(:title => "Comment1", :id => 1)
+ post.comments = []
+
+ array = [model, post, comments]
+ serializer = ActiveModel::Serializer::Finder.find(array, user).new(array, user)
+ assert_equal([
+ { :model => "Model" },
+ { :post => { :body => "Body of new post", :comments => [], :title => "New Post" } },
+ { :comment => { :title => "Comment1" } }
+ ], serializer.as_json)
+ end
+
+ def test_array_serializer_respects_model_serializer
+ user = User.new(:first_name => "Jose", :last_name => "Valim")
+ user.model_serializer = User2Serializer
+
+ array = [user]
+ serializer = ActiveModel::Serializer::Finder.find(array, user).new(array, {})
+ assert_equal([
+ { :user2 => { :last_name => "Valim", :first_name => "Jose", :ok => true } },
+ ], serializer.as_json)
+ end
+
+ def test_finder_respects_model_serializer
+ user = User.new(:first_name => "Jose", :last_name => "Valim")
+ assert_equal UserSerializer, user.model_serializer
+
+ serializer = ActiveModel::Serializer::Finder.find(user, self).new(user, {})
+ assert_equal({
+ :user => { :last_name => "Valim", :first_name => "Jose"},
+ }, serializer.as_json)
+
+ user.model_serializer = User2Serializer
+ serializer = ActiveModel::Serializer::Finder.find(user, self).new(user, {})
+ assert_equal({
+ :user2 => { :last_name => "Valim", :first_name => "Jose", :ok => true },
+ }, serializer.as_json)
+ end
+end \ No newline at end of file