44 class AMSModel < ActiveModelSerializers ::Model
55 derive_attributes_from_names_and_fix_accessors
66 end
7+
8+ class AMSMovieType < AMSModel
9+ attributes :id , :name , :movies
10+ end
711 class AMSMovie < AMSModel
8- attributes :id , :name , :release_year , :actors , :owner , :movie_type
12+ attributes :id , :name , :release_year , :actors , :owner , :movie_type , :advertising_campaign
13+
14+ def movie_type
15+ mt = AMSMovieType . new
16+ mt . id = 1
17+ mt . name = 'Episode'
18+ mt . movies = [ self ]
19+ mt
20+ end
21+ end
22+
23+ class AMSAdvertisingCampaign < AMSModel
24+ attributes :id , :name , :movie
25+ end
26+
27+ class AMSAward < AMSModel
28+ attributes :id , :title , :actor
29+ end
30+
31+ class AMSAgency < AMSModel
32+ attributes :id , :name , :actors
933 end
1034
1135 class AMSActor < AMSModel
12- attributes :id , :name , :email
36+ attributes :id , :name , :email , :agency , :awards , :agency_id
37+ def agency
38+ AMSAgency . new . tap do |a |
39+ a . id = agency_id
40+ a . name = "Test Agency #{ agency_id } "
41+ end
42+ end
43+
44+ def award_ids
45+ [ id * 9 , id * 9 + 1 ]
46+ end
47+
48+ def awards
49+ award_ids . map do |i |
50+ AMSAward . new . tap do |a |
51+ a . id = i
52+ a . title = "Test Award #{ i } "
53+ end
54+ end
55+ end
1356 end
1457
1558 class AMSUser < AMSModel
@@ -19,9 +62,22 @@ class AMSMovieType < AMSModel
1962 attributes :id , :name
2063 end
2164 # serializers
65+ class AMSAwardSerializer < ActiveModel ::Serializer
66+ type 'award'
67+ attributes :id , :title
68+ belongs_to :actor
69+ end
70+ class AMSAgencySerializer < ActiveModel ::Serializer
71+ type 'agency'
72+ attributes :id , :name
73+ belongs_to :state
74+ has_many :actors
75+ end
2276 class AMSActorSerializer < ActiveModel ::Serializer
2377 type 'actor'
2478 attributes :name , :email
79+ belongs_to :agency , serializer : ::AMSAgencySerializer
80+ has_many :awards , serializer : ::AMSAwardSerializer
2581 end
2682 class AMSUserSerializer < ActiveModel ::Serializer
2783 type 'user'
@@ -30,13 +86,19 @@ class AMSUserSerializer < ActiveModel::Serializer
3086 class AMSMovieTypeSerializer < ActiveModel ::Serializer
3187 type 'movie_type'
3288 attributes :name
89+ has_many :movies
90+ end
91+ class AMSAdvertisingCampaignSerializer < ActiveModel ::Serializer
92+ type 'advertising_campaign'
93+ attributes :name
3394 end
3495 class AMSMovieSerializer < ActiveModel ::Serializer
3596 type 'movie'
3697 attributes :name , :release_year
3798 has_many :actors
3899 has_one :owner
39100 belongs_to :movie_type
101+ has_one :advertising_campaign
40102 end
41103 end
42104
@@ -53,6 +115,7 @@ class AMSMovieSerializer < ActiveModel::Serializer
53115 a . id = i + 1
54116 a . name = "Test #{ a . id } "
55117 a . email = "test#{ a . id } @test.com"
118+ a . agency_id = i
56119 a
57120 end
58121 end
@@ -70,6 +133,13 @@ class AMSMovieSerializer < ActiveModel::Serializer
70133 ams_movie_type
71134 end
72135
136+ let ( :ams_advertising_campaign ) do
137+ campaign = AMSAdvertisingCampaign . new
138+ campaign . id = 1
139+ campaign . name = "Movie is incredible!!"
140+ campaign
141+ end
142+
73143 def build_ams_movies ( count )
74144 count . times . map do |i |
75145 m = AMSMovie . new
@@ -78,6 +148,7 @@ def build_ams_movies(count)
78148 m . actors = ams_actors
79149 m . owner = ams_user
80150 m . movie_type = ams_movie_type
151+ m . advertising_campaign = ams_advertising_campaign
81152 m
82153 end
83154 end
0 commit comments