From 72652ce37e4a6fe538c5eb9afe3af9e6591121d8 Mon Sep 17 00:00:00 2001 From: Matt Rogish Date: Tue, 11 Dec 2012 10:33:17 -0500 Subject: [PATCH] Adding info to the readme on how to specify the type, adding an additional test to cover a computed property without a type --- README.md | 14 ++++++++++++++ test/serializer_test.rb | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2d70c71a..d44f9d25 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,20 @@ class PostSerializer < ActiveModel::Serializer end ``` +The type of a computed attribute (like :full_name above) is not easily +calculated without some sophisticated static code analysis. To specify the +type of a computed attribute: + +```ruby +class PersonSerializer < ActiveModel::Serializer + attributes :first_name, :last_name, {:full_name => :string} + + def full_name + "#{object.first_name} #{object.last_name}" + end +end +``` + If you would like the key in the outputted JSON to be different from its name in ActiveRecord, you can use the `:key` option to customize it: diff --git a/test/serializer_test.rb b/test/serializer_test.rb index 2a944a05..389e2772 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -491,16 +491,17 @@ class SerializerTest < ActiveModel::TestCase # Computed attributes (not real columns or associations). def can_edit; end + def can_view; end def drafts; end - attributes :name, :age, :can_edit => :boolean + attributes :name, :age, {:can_edit => :boolean}, :can_view has_many :posts, :serializer => Class.new has_many :drafts, :serializer => Class.new has_one :parent, :serializer => Class.new end assert_equal serializer.schema, { - :attributes => { :name => :string, :age => :integer, :can_edit => :boolean }, + :attributes => { :name => :string, :age => :integer, :can_edit => :boolean, :can_view => nil }, :associations => { :posts => { :has_many => :posts }, :drafts => nil,