themoviedb-api 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +90 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +64 -0
  8. data/README.md +6 -0
  9. data/lib/tmdb.rb +62 -0
  10. data/lib/tmdb/account.rb +4 -0
  11. data/lib/tmdb/api.rb +26 -0
  12. data/lib/tmdb/authentication.rb +4 -0
  13. data/lib/tmdb/backdrop.rb +4 -0
  14. data/lib/tmdb/certification.rb +27 -0
  15. data/lib/tmdb/change.rb +44 -0
  16. data/lib/tmdb/change_item.rb +4 -0
  17. data/lib/tmdb/collection.rb +32 -0
  18. data/lib/tmdb/company.rb +21 -0
  19. data/lib/tmdb/configuration.rb +10 -0
  20. data/lib/tmdb/country.rb +4 -0
  21. data/lib/tmdb/credit.rb +26 -0
  22. data/lib/tmdb/discover.rb +27 -0
  23. data/lib/tmdb/error.rb +4 -0
  24. data/lib/tmdb/find.rb +47 -0
  25. data/lib/tmdb/genre.rb +32 -0
  26. data/lib/tmdb/image.rb +25 -0
  27. data/lib/tmdb/job.rb +13 -0
  28. data/lib/tmdb/keyword.rb +21 -0
  29. data/lib/tmdb/language.rb +4 -0
  30. data/lib/tmdb/list.rb +4 -0
  31. data/lib/tmdb/media.rb +4 -0
  32. data/lib/tmdb/movie.rb +173 -0
  33. data/lib/tmdb/multi.rb +4 -0
  34. data/lib/tmdb/network.rb +10 -0
  35. data/lib/tmdb/person.rb +91 -0
  36. data/lib/tmdb/poster.rb +4 -0
  37. data/lib/tmdb/rating.rb +4 -0
  38. data/lib/tmdb/release.rb +4 -0
  39. data/lib/tmdb/resource.rb +30 -0
  40. data/lib/tmdb/review.rb +10 -0
  41. data/lib/tmdb/search.rb +69 -0
  42. data/lib/tmdb/struct.rb +30 -0
  43. data/lib/tmdb/translation.rb +4 -0
  44. data/lib/tmdb/tv.rb +165 -0
  45. data/lib/tmdb/tv/episode.rb +89 -0
  46. data/lib/tmdb/tv/season.rb +91 -0
  47. data/lib/tmdb/utils.rb +50 -0
  48. data/lib/tmdb/version.rb +3 -0
  49. data/lib/tmdb/video.rb +4 -0
  50. data/spec/api_spec.rb +44 -0
  51. data/spec/certification_spec.rb +62 -0
  52. data/spec/change_spec.rb +71 -0
  53. data/spec/collection_spec.rb +69 -0
  54. data/spec/company_spec.rb +50 -0
  55. data/spec/configuration_spec.rb +43 -0
  56. data/spec/credit_spec.rb +49 -0
  57. data/spec/discover_spec.rb +54 -0
  58. data/spec/find_spec.rb +105 -0
  59. data/spec/genre_spec.rb +75 -0
  60. data/spec/job_spec.rb +39 -0
  61. data/spec/keyword_spec.rb +52 -0
  62. data/spec/movie_spec.rb +362 -0
  63. data/spec/network_spec.rb +33 -0
  64. data/spec/person_spec.rb +201 -0
  65. data/spec/resource_spec.rb +47 -0
  66. data/spec/review_spec.rb +33 -0
  67. data/spec/search_spec.rb +161 -0
  68. data/spec/spec_helper.rb +37 -0
  69. data/spec/tv/episode_spec.rb +154 -0
  70. data/spec/tv/season_spec.rb +144 -0
  71. data/spec/tv_spec.rb +352 -0
  72. data/spec/vcr/certification/movie_list.yml +305 -0
  73. data/spec/vcr/certification/tv_list.yml +318 -0
  74. data/spec/vcr/change/movie.yml +58 -0
  75. data/spec/vcr/change/person.yml +58 -0
  76. data/spec/vcr/change/tv.yml +58 -0
  77. data/spec/vcr/collection/backdrops.yml +58 -0
  78. data/spec/vcr/collection/detail.yml +73 -0
  79. data/spec/vcr/collection/posters.yml +58 -0
  80. data/spec/vcr/company/detail.yml +56 -0
  81. data/spec/vcr/company/movies.yml +363 -0
  82. data/spec/vcr/configuration/get.yml +50 -0
  83. data/spec/vcr/credit/detail.yml +61 -0
  84. data/spec/vcr/discover/movie.yml +361 -0
  85. data/spec/vcr/discover/tv.yml +401 -0
  86. data/spec/vcr/find/movie.yml +64 -0
  87. data/spec/vcr/find/people.yml +114 -0
  88. data/spec/vcr/find/tv_episode.yml +66 -0
  89. data/spec/vcr/find/tv_season.yml +66 -0
  90. data/spec/vcr/find/tv_serie.yml +79 -0
  91. data/spec/vcr/genre/movie_list.yml +57 -0
  92. data/spec/vcr/genre/movies.yml +330 -0
  93. data/spec/vcr/genre/tv_list.yml +58 -0
  94. data/spec/vcr/job/list.yml +128 -0
  95. data/spec/vcr/keyword/detail.yml +56 -0
  96. data/spec/vcr/keyword/movies.yml +344 -0
  97. data/spec/vcr/movie/alternative_titles.yml +69 -0
  98. data/spec/vcr/movie/backdrops.yml +58 -0
  99. data/spec/vcr/movie/cast.yml +225 -0
  100. data/spec/vcr/movie/changes.yml +57 -0
  101. data/spec/vcr/movie/crew.yml +225 -0
  102. data/spec/vcr/movie/detail.yml +69 -0
  103. data/spec/vcr/movie/director.yml +225 -0
  104. data/spec/vcr/movie/keywords.yml +57 -0
  105. data/spec/vcr/movie/latest.yml +60 -0
  106. data/spec/vcr/movie/lists.yml +157 -0
  107. data/spec/vcr/movie/now_playing.yml +331 -0
  108. data/spec/vcr/movie/popular.yml +361 -0
  109. data/spec/vcr/movie/posters.yml +58 -0
  110. data/spec/vcr/movie/releases.yml +57 -0
  111. data/spec/vcr/movie/reviews.yml +56 -0
  112. data/spec/vcr/movie/similar.yml +354 -0
  113. data/spec/vcr/movie/top_rated.yml +343 -0
  114. data/spec/vcr/movie/translations.yml +96 -0
  115. data/spec/vcr/movie/upcoming.yml +313 -0
  116. data/spec/vcr/movie/videos.yml +57 -0
  117. data/spec/vcr/network/detail.yml +56 -0
  118. data/spec/vcr/person/changes.yml +61 -0
  119. data/spec/vcr/person/combined_credits.yml +317 -0
  120. data/spec/vcr/person/detail.yml +72 -0
  121. data/spec/vcr/person/external_ids.yml +56 -0
  122. data/spec/vcr/person/images.yml +56 -0
  123. data/spec/vcr/person/latest.yml +61 -0
  124. data/spec/vcr/person/movie_credits.yml +293 -0
  125. data/spec/vcr/person/popular.yml +1116 -0
  126. data/spec/vcr/person/tagged_images.yml +458 -0
  127. data/spec/vcr/person/tv_credits.yml +82 -0
  128. data/spec/vcr/resource/configuration_get.yml +50 -0
  129. data/spec/vcr/review/detail.yml +66 -0
  130. data/spec/vcr/search/collection.yml +58 -0
  131. data/spec/vcr/search/company.yml +70 -0
  132. data/spec/vcr/search/keyword.yml +61 -0
  133. data/spec/vcr/search/list.yml +70 -0
  134. data/spec/vcr/search/movie.yml +335 -0
  135. data/spec/vcr/search/multi.yml +219 -0
  136. data/spec/vcr/search/person.yml +117 -0
  137. data/spec/vcr/search/tv.yml +300 -0
  138. data/spec/vcr/tv/airing_today.yml +503 -0
  139. data/spec/vcr/tv/alternative_titles.yml +59 -0
  140. data/spec/vcr/tv/backdrops.yml +58 -0
  141. data/spec/vcr/tv/cast.yml +86 -0
  142. data/spec/vcr/tv/changes.yml +58 -0
  143. data/spec/vcr/tv/content_ratings.yml +56 -0
  144. data/spec/vcr/tv/crew.yml +86 -0
  145. data/spec/vcr/tv/detail.yml +71 -0
  146. data/spec/vcr/tv/episode/cast.yml +70 -0
  147. data/spec/vcr/tv/episode/changes.yml +66 -0
  148. data/spec/vcr/tv/episode/crew.yml +70 -0
  149. data/spec/vcr/tv/episode/detail.yml +68 -0
  150. data/spec/vcr/tv/episode/external_ids.yml +56 -0
  151. data/spec/vcr/tv/episode/guest_stars.yml +70 -0
  152. data/spec/vcr/tv/episode/posters.yml +58 -0
  153. data/spec/vcr/tv/episode/videos.yml +56 -0
  154. data/spec/vcr/tv/external_ids.yml +56 -0
  155. data/spec/vcr/tv/keywords.yml +59 -0
  156. data/spec/vcr/tv/latest.yml +97 -0
  157. data/spec/vcr/tv/on_the_air.yml +421 -0
  158. data/spec/vcr/tv/popular.yml +401 -0
  159. data/spec/vcr/tv/posters.yml +58 -0
  160. data/spec/vcr/tv/season/cast.yml +69 -0
  161. data/spec/vcr/tv/season/changes.yml +69 -0
  162. data/spec/vcr/tv/season/crew.yml +69 -0
  163. data/spec/vcr/tv/season/detail.yml +649 -0
  164. data/spec/vcr/tv/season/external_ids.yml +56 -0
  165. data/spec/vcr/tv/season/posters.yml +58 -0
  166. data/spec/vcr/tv/season/videos.yml +72 -0
  167. data/spec/vcr/tv/similar.yml +441 -0
  168. data/spec/vcr/tv/top_rated.yml +454 -0
  169. data/spec/vcr/tv/translations.yml +95 -0
  170. data/spec/vcr/tv/videos.yml +57 -0
  171. data/themoviedb-api.gemspec +30 -0
  172. metadata +433 -0
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class Country < Struct
3
+ end
4
+ end
@@ -0,0 +1,26 @@
1
+ module Tmdb
2
+ class Credit < Struct
3
+
4
+ def self.detail(id, filters={})
5
+ result = Resource.new("/credit/#{id}", filters).get
6
+
7
+ media = result['media']
8
+
9
+ credit = self.new(result.except('media', 'person'))
10
+ credit.media = Media.new(media.except('episodes', 'seasons'))
11
+
12
+ credit.media.episodes = media['episodes'].map do |episode|
13
+ Tv::Episode.new(episode)
14
+ end
15
+
16
+ credit.media.seasons = media['seasons'].map do |season|
17
+ Tv::Season.new(season)
18
+ end
19
+
20
+ credit.person = Person.new(result['person'])
21
+
22
+ credit
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module Tmdb
2
+ class Discover < Struct
3
+
4
+ def self.movie(filters={})
5
+ result = Resource.new('/discover/movie', filters).get
6
+
7
+ discover = self.new(result.except('results'))
8
+ discover.results = result['results'].map do |result|
9
+ Movie.new(result)
10
+ end
11
+
12
+ discover
13
+ end
14
+
15
+ def self.tv(filters={})
16
+ result = Resource.new('/discover/tv', filters).get
17
+
18
+ discover = self.new(result.except('results'))
19
+ discover.results = result['results'].map do |result|
20
+ TV.new(result)
21
+ end
22
+
23
+ discover
24
+ end
25
+
26
+ end
27
+ end
data/lib/tmdb/error.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class Error < ::StandardError
3
+ end
4
+ end
data/lib/tmdb/find.rb ADDED
@@ -0,0 +1,47 @@
1
+ module Tmdb
2
+ class Find < Struct
3
+
4
+ def self.movie(id, filters={})
5
+ result = Resource.new("/find/#{id}", filters).get
6
+
7
+ result['movie_results'].map do |entry|
8
+ Movie.new(entry)
9
+ end
10
+ end
11
+
12
+ def self.people(id, filters={})
13
+ result = Resource.new("/find/#{id}", filters).get
14
+
15
+ result['person_results'].map do |entry|
16
+ person = Person.new(entry)
17
+ person.convert_known_for!
18
+ person
19
+ end
20
+ end
21
+
22
+ def self.tv_serie(id, filters={})
23
+ result = Resource.new("/find/#{id}", filters).get
24
+
25
+ result['tv_results'].map do |entry|
26
+ TV.new(entry)
27
+ end
28
+ end
29
+
30
+ def self.tv_season(id, filters={})
31
+ result = Resource.new("/find/#{id}", filters).get
32
+
33
+ result['tv_episode_results'].map do |entry|
34
+ TV.new(entry)
35
+ end
36
+ end
37
+
38
+ def self.tv_episode(id, filters={})
39
+ result = Resource.new("/find/#{id}", filters).get
40
+
41
+ result['tv_season_results'].map do |entry|
42
+ TV.new(entry)
43
+ end
44
+ end
45
+
46
+ end
47
+ end
data/lib/tmdb/genre.rb ADDED
@@ -0,0 +1,32 @@
1
+ module Tmdb
2
+ class Genre < Struct
3
+
4
+ def self.movie_list(filters={})
5
+ result = Resource.new('/genre/movie/list', filters).get
6
+
7
+ result['genres'].map do |genre|
8
+ self.new(genre)
9
+ end
10
+ end
11
+
12
+ def self.tv_list(filters={})
13
+ result = Resource.new('/genre/tv/list', filters).get
14
+
15
+ result['genres'].map do |genre|
16
+ self.new(genre)
17
+ end
18
+ end
19
+
20
+ def self.movies(genre_id, filters={})
21
+ result = Resource.new("/genre/#{genre_id}/movies", filters).get
22
+
23
+ genre = self.new(result.except('results'))
24
+ genre.results = result['results'].map do |movie|
25
+ Movie.new(movie)
26
+ end
27
+
28
+ genre
29
+ end
30
+
31
+ end
32
+ end
data/lib/tmdb/image.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Tmdb
2
+ class Image < Struct
3
+
4
+ def convert_media_multiple!
5
+ results.each do |result|
6
+ media_type = find_media_type(result)
7
+ result.media = media_type.new(result.media.to_h)
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def find_media_type(obj)
14
+ case obj.media_type
15
+ when 'movie'
16
+ Movie
17
+ when 'tv'
18
+ TV
19
+ else
20
+ Multi
21
+ end
22
+ end
23
+
24
+ end
25
+ end
data/lib/tmdb/job.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Tmdb
2
+ class Job < Struct
3
+
4
+ def self.list(filters={})
5
+ result = Resource.new('/job/list', filters).get
6
+
7
+ result['jobs'].map do |job|
8
+ self.new(job)
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ module Tmdb
2
+ class Keyword < Struct
3
+
4
+ def self.detail(keyword_id, filters={})
5
+ result = Resource.new("/keyword/#{keyword_id}", filters).get
6
+ self.new(result)
7
+ end
8
+
9
+ def self.movies(keyword_id, filters={})
10
+ result = Resource.new("/keyword/#{keyword_id}/movies", filters).get
11
+
12
+ keyword = self.new(result.except('results'))
13
+ keyword.results = result['results'].map do |movie|
14
+ Movie.new(movie)
15
+ end
16
+
17
+ keyword
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class Language < Struct
3
+ end
4
+ end
data/lib/tmdb/list.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class List < Struct
3
+ end
4
+ end
data/lib/tmdb/media.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class Media < Struct
3
+ end
4
+ end
data/lib/tmdb/movie.rb ADDED
@@ -0,0 +1,173 @@
1
+ module Tmdb
2
+ class Movie < Struct
3
+
4
+ def self.detail(id, filters={})
5
+ result = Resource.new("/movie/#{id}", filters).get
6
+
7
+ create_new_instance_with_normalized_data(result)
8
+ end
9
+
10
+ def self.alternative_titles(id, filters={})
11
+ result = Resource.new("/movie/#{id}/alternative_titles", filters).get
12
+
13
+ result['titles'].map do |entry|
14
+ self.new(entry)
15
+ end
16
+ end
17
+
18
+ def self.cast(id, filters={})
19
+ result = Resource.new("/movie/#{id}/credits", filters).get
20
+
21
+ result['cast'].map do |entry|
22
+ Person.new(entry)
23
+ end
24
+ end
25
+
26
+ def self.crew(id, filters={})
27
+ result = Resource.new("/movie/#{id}/credits", filters).get
28
+
29
+ result['crew'].map do |entry|
30
+ Person.new(entry)
31
+ end
32
+ end
33
+
34
+ def self.director(id, filters={})
35
+ result = Resource.new("/movie/#{id}/credits", filters).get
36
+
37
+ result['crew'].select{ |x| x['job'] == 'Director' }.map do |entry|
38
+ Person.new(entry)
39
+ end
40
+ end
41
+
42
+ def self.backdrops(id, filters={})
43
+ result = Resource.new("/movie/#{id}/images", filters).get
44
+
45
+ result['backdrops'].map do |entry|
46
+ Backdrop.new(entry)
47
+ end
48
+ end
49
+
50
+ def self.posters(id, filters={})
51
+ result = Resource.new("/movie/#{id}/images", filters).get
52
+
53
+ result['posters'].map do |entry|
54
+ Poster.new(entry)
55
+ end
56
+ end
57
+
58
+ def self.videos(id, filters={})
59
+ result = Resource.new("/movie/#{id}/videos", filters).get
60
+
61
+ result['results'].map do |entry|
62
+ Video.new(entry)
63
+ end
64
+ end
65
+
66
+ def self.keywords(id, filters={})
67
+ result = Resource.new("/movie/#{id}/keywords", filters).get
68
+
69
+ result['keywords'].map do |entry|
70
+ Keyword.new(entry)
71
+ end
72
+ end
73
+
74
+ def self.releases(id, filters={})
75
+ result = Resource.new("/movie/#{id}/releases", filters).get
76
+
77
+ result['countries'].map do |entry|
78
+ Release.new(entry)
79
+ end
80
+ end
81
+
82
+ def self.translations(id, filters={})
83
+ result = Resource.new("/movie/#{id}/translations", filters).get
84
+
85
+ result['translations'].map do |entry|
86
+ Translation.new(entry)
87
+ end
88
+ end
89
+
90
+ def self.similar(id, filters={})
91
+ result = Resource.new("/movie/#{id}/similar", filters).get
92
+ self.new(result)
93
+ end
94
+
95
+ def self.reviews(id, filters={})
96
+ result = Resource.new("/movie/#{id}/reviews", filters).get
97
+ Review.new(result)
98
+ end
99
+
100
+ def self.lists(id, filters={})
101
+ result = Resource.new("/movie/#{id}/lists", filters).get
102
+ Tmdb::List.new(result)
103
+ end
104
+
105
+ def self.changes(id, filters={})
106
+ result = Resource.new("/movie/#{id}/changes", filters).get
107
+
108
+ result['changes'].map do |entry|
109
+ change = Change.new(entry)
110
+ change.convert_items!
111
+ change
112
+ end
113
+ end
114
+
115
+ def self.latest(filters={})
116
+ result = Resource.new('/movie/latest', filters).get
117
+
118
+ create_new_instance_with_normalized_data(result)
119
+ end
120
+
121
+ def self.upcoming(filters={})
122
+ result = Resource.new('/movie/upcoming', filters).get
123
+ self.new(result)
124
+ end
125
+
126
+ def self.now_playing(filters={})
127
+ result = Resource.new('/movie/now_playing', filters).get
128
+ self.new(result)
129
+ end
130
+
131
+ def self.popular(filters={})
132
+ result = Resource.new('/movie/popular', filters).get
133
+ self.new(result)
134
+ end
135
+
136
+ def self.top_rated(filters={})
137
+ result = Resource.new('/movie/top_rated', filters).get
138
+ self.new(result)
139
+ end
140
+
141
+ def self.create_new_instance_with_normalized_data(result)
142
+ movie = self.new(
143
+ result.except(
144
+ 'genres',
145
+ 'production_companies',
146
+ 'production_countries',
147
+ 'spoken_languages'
148
+ )
149
+ )
150
+
151
+ movie.genres = result['genres'].map do |genre|
152
+ Genre.new(genre)
153
+ end
154
+
155
+ movie.production_companies = result['production_companies'].map do |company|
156
+ Company.new(company)
157
+ end
158
+
159
+ movie.production_countries = result['production_countries'].map do |country|
160
+ Country.new(country)
161
+ end
162
+
163
+ movie.spoken_languages = result['spoken_languages'].map do |language|
164
+ Language.new(language)
165
+ end
166
+
167
+ movie
168
+ end
169
+
170
+ private_class_method :create_new_instance_with_normalized_data
171
+
172
+ end
173
+ end
data/lib/tmdb/multi.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Tmdb
2
+ class Multi < Struct
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ module Tmdb
2
+ class Network < Struct
3
+
4
+ def self.detail(id, filters={})
5
+ result = Resource.new("/network/#{id}", filters).get
6
+ self.new(result)
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,91 @@
1
+ module Tmdb
2
+ class Person < Struct
3
+
4
+ def self.detail(id, filters={})
5
+ result = Resource.new("/person/#{id}", filters).get
6
+ self.new(result)
7
+ end
8
+
9
+ def self.movie_credits(id, filters={})
10
+ result = Resource.new("/person/#{id}/movie_credits", filters).get
11
+ self.new(result)
12
+ end
13
+
14
+ def self.tv_credits(id, filters={})
15
+ result = Resource.new("/person/#{id}/tv_credits", filters).get
16
+ self.new(result)
17
+ end
18
+
19
+ def self.combined_credits(id, filters={})
20
+ result = Resource.new("/person/#{id}/combined_credits", filters).get
21
+ self.new(result)
22
+ end
23
+
24
+ def self.external_ids(id, filters={})
25
+ result = Resource.new("/person/#{id}/external_ids", filters).get
26
+ self.new(result)
27
+ end
28
+
29
+ def self.images(id, filters={})
30
+ result = Resource.new("/person/#{id}/images", filters).get
31
+ Image.new(result)
32
+ end
33
+
34
+ def self.tagged_images(id, filters={})
35
+ result = Resource.new("/person/#{id}/tagged_images", filters).get
36
+ image = Image.new(result)
37
+ image.convert_media_multiple!
38
+ image
39
+ end
40
+
41
+ def self.changes(id, filters={})
42
+ result = Resource.new("/person/#{id}/changes", filters).get
43
+
44
+ result['changes'].map do |entry|
45
+ change = Change.new(entry)
46
+ change.convert_items!
47
+ change
48
+ end
49
+ end
50
+
51
+ def self.popular(filters={})
52
+ result = Resource.new('/person/popular', filters).get
53
+ person = self.new(result)
54
+ person.convert_known_for_multiple!
55
+ person
56
+ end
57
+
58
+ def self.latest(filters={})
59
+ result = Resource.new('/person/latest', filters).get
60
+ self.new(result)
61
+ end
62
+
63
+ def convert_known_for!
64
+ known_for.map! do |multi|
65
+ known_person_reference(multi)
66
+ end
67
+ end
68
+
69
+ def convert_known_for_multiple!
70
+ results.each do |result|
71
+ result.known_for.map! do |multi|
72
+ known_person_reference(multi)
73
+ end
74
+ end
75
+ end
76
+
77
+ private
78
+
79
+ def known_person_reference(obj)
80
+ case obj.media_type
81
+ when 'movie'
82
+ Movie.new(obj.to_h)
83
+ when 'tv'
84
+ TV.new(obj.to_h)
85
+ else
86
+ Multi.new(obj.to_h)
87
+ end
88
+ end
89
+
90
+ end
91
+ end