changes to be able to specify multiple attributes with keys

This commit is contained in:
Ismael Abreu 2013-02-16 02:06:25 +00:00
parent 1c28577280
commit 2d2094b588
3 changed files with 44 additions and 1 deletions

View File

@ -69,10 +69,15 @@ module ActiveModel
class << self
# Define attributes to be used in the serialization.
def attributes(*attrs)
self._attributes = _attributes.dup
attrs.each do |attr|
attribute attr
if Hash === attr
attr.each {|attr_real, key| attribute attr_real, :key => key }
else
attribute attr
end
end
end

View File

@ -29,6 +29,28 @@ class SerializerTest < ActiveModel::TestCase
}, hash)
end
def test_attributes_method_specifying_keys
user = User.new
user_serializer = UserAttributesWithKeySerializer.new(user, :scope => {})
hash = user_serializer.as_json
assert_equal({
:user_attributes_with_key => { :f_name => "Jose", :l_name => "Valim", :ok => true }
}, hash)
end
def test_attributes_method_specifying_some_keys
user = User.new
user_serializer = UserAttributesWithSomeKeySerializer.new(user, :scope => {})
hash = user_serializer.as_json
assert_equal({
:user_attributes_with_some_key => { :first_name => "Jose", :l_name => "Valim", :ok => true }
}, hash)
end
def test_attribute_method_with_name_as_serializer_prefix
object = SomeObject.new("something")
object_serializer = SomeSerializer.new(object, {})

View File

@ -54,6 +54,22 @@ class UserSerializer < ActiveModel::Serializer
end
end
class UserAttributesWithKeySerializer < ActiveModel::Serializer
attributes :first_name => :f_name, :last_name => :l_name
def serializable_hash
attributes.merge(:ok => true).merge(options[:scope])
end
end
class UserAttributesWithSomeKeySerializer < ActiveModel::Serializer
attributes :first_name, :last_name => :l_name
def serializable_hash
attributes.merge(:ok => true).merge(options[:scope])
end
end
class DefaultUserSerializer < ActiveModel::Serializer
attributes :first_name, :last_name
end