test/fixtures/poro.rb in active_model_serializers-0.9.0 vs test/fixtures/poro.rb in active_model_serializers-0.9.1

- old
+ new

@@ -1,13 +1,15 @@ class Model - def initialize(hash={}) + def initialize(hash = {}) @attributes = hash end def read_attribute_for_serialization(name) if name == :id || name == 'id' object_id + elsif respond_to?(name) + send name else @attributes[name] end end end @@ -20,50 +22,108 @@ def profile @profile ||= Profile.new(name: 'N1', description: 'D1') end end +class UserInfo < Model + def user + @user ||= User.new(name: 'N1', email: 'E1') + end +end + class Profile < Model end +class Category < Model + def posts + @posts ||= [Post.new(title: 'T1', body: 'B1'), + Post.new(title: 'T2', body: 'B2')] + end +end + class Post < Model def comments @comments ||= [Comment.new(content: 'C1'), Comment.new(content: 'C2')] end end +class SpecialPost < Post + def special_comment + @speical_comment ||= Comment.new(content: 'special') + end +end + class Comment < Model end class WebLog < Model end +class Interview < Model + def attachment + @attachment ||= Image.new(url: 'U1') + end +end + +class Mail < Model + def attachments + @attachments ||= [Image.new(url: 'U1'), + Video.new(html: 'H1')] + end +end + +class Image < Model +end + +class Video < Model +end + ### ## Serializers ### class UserSerializer < ActiveModel::Serializer attributes :name, :email has_one :profile end +class UserInfoSerializer < ActiveModel::Serializer + has_one :user +end + class ProfileSerializer < ActiveModel::Serializer def description description = object.read_attribute_for_serialization(:description) scope ? "#{description} - #{scope}" : description end attributes :name, :description end +class DifferentProfileSerializer < ActiveModel::Serializer + attributes :name +end + +class CategorySerializer < ActiveModel::Serializer + attributes :name + + has_many :posts +end + class PostSerializer < ActiveModel::Serializer attributes :title, :body has_many :comments end +class SpecialPostSerializer < ActiveModel::Serializer + attributes :title, :body + has_many :comments, root: :comments, embed_in_root: true, embed: :ids + has_one :special_comment, root: :comments, embed_in_root: true, embed: :ids +end + class CommentSerializer < ActiveModel::Serializer attributes :content end class WebLogSerializer < ActiveModel::Serializer @@ -71,5 +131,54 @@ end class WebLogLowerCamelSerializer < WebLogSerializer format_keys :lower_camel end + +class InterviewSerializer < ActiveModel::Serializer + attributes :text + + has_one :attachment, polymorphic: true +end + +class MailSerializer < ActiveModel::Serializer + attributes :body + + has_many :attachments, polymorphic: true +end + +class ImageSerializer < ActiveModel::Serializer + attributes :url +end + +class VideoSerializer < ActiveModel::Serializer + attributes :html +end + +class ShortProfileSerializer < ::ProfileSerializer; end + +module TestNamespace + class ProfileSerializer < ::ProfileSerializer; end + class UserSerializer < ::UserSerializer; end +end + +ActiveModel::Serializer.setup do |config| + config.default_key_type = :name +end + +class NameKeyUserSerializer < ActiveModel::Serializer + attributes :name, :email + + has_one :profile +end + +class NameKeyPostSerializer < ActiveModel::Serializer + attributes :title, :body + + has_many :comments +end + +ActiveModel::Serializer.setup do |config| + config.default_key_type = nil +end + +