ruby-tmdb3 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +3 -2
- data/VERSION +1 -1
- data/lib/ruby-tmdb3/tmdb.rb +30 -23
- data/lib/ruby-tmdb3/tmdb_movie.rb +15 -7
- data/ruby-tmdb3.gemspec +6 -3
- data/test/fixtures/movie_casts.txt +15 -0
- data/test/fixtures/movie_get_info.txt +1 -1
- data/test/fixtures/movie_imdb_lookup.txt +1 -1
- data/test/fixtures/movie_posters.txt +15 -0
- data/test/fixtures/movie_releases.txt +15 -0
- data/test/setup/setup_api_key.rb +2 -2
- data/test/setup/url_mocks.rb +19 -7
- data/test/unit/tmdb_movie_test.rb +7 -4
- data/test/unit/tmdb_test.rb +13 -7
- metadata +5 -2
data/README.rdoc
CHANGED
@@ -98,8 +98,9 @@ To find out more about the information each object offers on retrieved items hav
|
|
98
98
|
|
99
99
|
=== Author & Credits
|
100
100
|
|
101
|
-
|
102
|
-
Contributors:: {Alex Hayes}[https://github.com/alexhayes], {Alvaro Pereyra Rabanal}[https://github.com/xenda], {Linus Oleander}[https://github.com/oleander], {aristides}[https://github.com/aristides], {Robin Boutros}[https://github.com/niuage]
|
101
|
+
Authors:: {Irio Irineu Musskopf Junior}[mailto:iirineu@gmail.com], {Aaron Gough}[mailto:aaron@aarongough.com]
|
102
|
+
Contributors:: {Alex Hayes}[https://github.com/alexhayes], {Alvaro Pereyra Rabanal}[https://github.com/xenda], {Linus Oleander}[https://github.com/oleander], {aristides}[https://github.com/aristides], {Robin Boutros}[https://github.com/niuage], {Loïc Guitaut}[https://github.com/Flink]
|
103
103
|
|
104
104
|
Copyright (c) 2012 {Irio Irineu Musskopf Junior}[http://irio.posterous.com/] ({irio.posterous.com}[http://irio.posterous.com/])
|
105
|
+
|
105
106
|
Copyright (c) 2010 {Aaron Gough}[http://thingsaaronmade.com/] ({thingsaaronmade.com}[http://thingsaaronmade.com/]), released under the MIT license
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/lib/ruby-tmdb3/tmdb.rb
CHANGED
@@ -10,6 +10,17 @@ class Tmdb
|
|
10
10
|
@@api_key = ""
|
11
11
|
@@default_language = "en"
|
12
12
|
@@api_response = {}
|
13
|
+
|
14
|
+
# TODO: Should be refreshed and cached from API
|
15
|
+
CONFIGURATION = DeepOpenStruct.load({ "images" =>
|
16
|
+
{
|
17
|
+
"base_url" => "http://cf2.imgobject.com/t/p/",
|
18
|
+
"posters_sizes" => ["w92", "w154", "w185", "w342", "w500", "original"],
|
19
|
+
"backdrops_sizes" => ["w300", "w780", "w1280", "original"],
|
20
|
+
"profiles_sizes" => ["w45", "w185", "h632", "original"],
|
21
|
+
"logos_sizes" => ["w45", "w92", "w154", "w185", "w300", "w500", "original"]
|
22
|
+
}
|
23
|
+
})
|
13
24
|
|
14
25
|
def self.api_key
|
15
26
|
@@api_key
|
@@ -28,13 +39,15 @@ class Tmdb
|
|
28
39
|
end
|
29
40
|
|
30
41
|
def self.base_api_url
|
31
|
-
"http://api.themoviedb.org/3
|
42
|
+
"http://api.themoviedb.org/3"
|
32
43
|
end
|
33
44
|
|
34
45
|
def self.api_call(method, data, language = @@default_language)
|
35
46
|
raise ArgumentError, "Tmdb.api_key must be set before using the API" if(Tmdb.api_key.nil? || Tmdb.api_key.empty?)
|
36
47
|
raise ArgumentError, "Invalid data." if(data.nil? || (data.class != Hash))
|
37
48
|
|
49
|
+
method, action = method.split '/'
|
50
|
+
|
38
51
|
data = {
|
39
52
|
api_key: Tmdb.api_key,
|
40
53
|
language: language
|
@@ -55,21 +68,17 @@ class Tmdb
|
|
55
68
|
# Construct URL for queries with id
|
56
69
|
if data.has_key?(:id)
|
57
70
|
uri.query_values = query_values
|
58
|
-
|
59
|
-
url = Tmdb.base_api_url + method + "/" + data[:id].to_s + "?" + uri.query
|
60
|
-
|
61
71
|
# Construct URL other queries
|
62
72
|
else
|
63
73
|
query_values = {
|
64
74
|
query: CGI::escape(data[:query])
|
65
75
|
}.merge(query_values)
|
66
|
-
|
67
76
|
uri.query_values = query_values
|
68
|
-
|
69
|
-
url = Tmdb.base_api_url + method + "?" + uri.query
|
70
77
|
end
|
78
|
+
url = [Tmdb.base_api_url, method, data[:id], action].compact.join '/'
|
79
|
+
url_with_query = [url, uri.query].compact.join '?'
|
71
80
|
|
72
|
-
response = Tmdb.get_url(
|
81
|
+
response = Tmdb.get_url(url_with_query)
|
73
82
|
if(response.code.to_i != 200)
|
74
83
|
raise RuntimeError, "Tmdb API returned status code '#{response.code}' for URL: '#{url}'"
|
75
84
|
end
|
@@ -100,22 +109,20 @@ class Tmdb
|
|
100
109
|
end
|
101
110
|
|
102
111
|
def self.data_to_object(data)
|
103
|
-
object
|
112
|
+
object = DeepOpenStruct.load(data)
|
104
113
|
object.raw_data = data
|
105
|
-
["posters", "backdrops"
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
114
|
+
["posters", "backdrops"].each do |image_array_name|
|
115
|
+
image_array = Array object.send(image_array_name)
|
116
|
+
single_name = image_array_name.slice 0..-2 # singularize name
|
117
|
+
single_path = object.send "#{single_name}_path" # default poster/backdrop image
|
118
|
+
image_array << object.send("#{image_array_name.slice 0..-2}=", DeepOpenStruct.load({file_path: single_path}))
|
119
|
+
# build a struct containing availables sizes with their urls
|
120
|
+
image_array.each do |image|
|
121
|
+
urls = CONFIGURATION.images.send("#{image_array_name}_sizes").inject({}) do |hash, size|
|
122
|
+
hash[size] = {'url' => [CONFIGURATION.images.base_url, size, image.file_path].join}
|
123
|
+
hash
|
115
124
|
end
|
116
|
-
|
117
|
-
if(object.profile)
|
118
|
-
object.profiles = object.profile
|
125
|
+
image.sizes = DeepOpenStruct.load urls
|
119
126
|
end
|
120
127
|
end
|
121
128
|
unless(object.cast.nil?)
|
@@ -130,4 +137,4 @@ class Tmdb
|
|
130
137
|
return object
|
131
138
|
end
|
132
139
|
|
133
|
-
end
|
140
|
+
end
|
@@ -40,14 +40,22 @@ class TmdbMovie
|
|
40
40
|
|
41
41
|
def self.new(raw_data, expand_results = false, language = nil)
|
42
42
|
# expand the result by calling movie unless :expand_results is false or the data is already complete
|
43
|
-
# (as determined by checking for the
|
44
|
-
if(expand_results && !raw_data.has_key?("
|
43
|
+
# (as determined by checking for the posters property in the raw data)
|
44
|
+
if(expand_results && (!raw_data.has_key?("posters") || !raw_data['releases'] || !raw_data['cast']))
|
45
45
|
begin
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
movie_id = raw_data['id']
|
47
|
+
raw_data = Tmdb.api_call 'movie', { id: movie_id }, language
|
48
|
+
@images_data = Tmdb.api_call("movie/images", {id: movie_id}, language)
|
49
|
+
@releases_data = Tmdb.api_call('movie/releases', {id: movie_id}, language)
|
50
|
+
@cast_data = Tmdb.api_call('movie/casts', {id: movie_id}, language)
|
51
|
+
raw_data['posters'] = @images_data['posters']
|
52
|
+
raw_data['backdrops'] = @images_data['backdrops']
|
53
|
+
raw_data['releases'] = @releases_data['countries']
|
54
|
+
raw_data['cast'] = @cast_data['cast']
|
55
|
+
raw_data['crew'] = @cast_data['crew']
|
56
|
+
rescue => e
|
57
|
+
raise ArgumentError, "Unable to fetch expanded infos for Movie ID: '#{movie_id}'" if @images_data.nil? || @releases_data.nil? || @cast_data.nil?
|
49
58
|
end
|
50
|
-
raw_data = expanded_data
|
51
59
|
end
|
52
60
|
return Tmdb.data_to_object(raw_data)
|
53
61
|
end
|
@@ -57,4 +65,4 @@ class TmdbMovie
|
|
57
65
|
return @raw_data == other.raw_data
|
58
66
|
end
|
59
67
|
|
60
|
-
end
|
68
|
+
end
|
data/ruby-tmdb3.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ruby-tmdb3"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Irio Irineu Musskopf Junior", "Aaron Gough"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-07-11"
|
13
13
|
s.description = "An ActiveRecord-style API wrapper for TheMovieDB.org"
|
14
14
|
s.email = "iirineu@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,8 +30,11 @@ Gem::Specification.new do |s|
|
|
30
30
|
"test/fixtures/example_com.txt",
|
31
31
|
"test/fixtures/image.jpg",
|
32
32
|
"test/fixtures/incorrect_api_url.txt",
|
33
|
+
"test/fixtures/movie_casts.txt",
|
33
34
|
"test/fixtures/movie_get_info.txt",
|
34
35
|
"test/fixtures/movie_imdb_lookup.txt",
|
36
|
+
"test/fixtures/movie_posters.txt",
|
37
|
+
"test/fixtures/movie_releases.txt",
|
35
38
|
"test/fixtures/movie_search.txt",
|
36
39
|
"test/fixtures/person_get_info.txt",
|
37
40
|
"test/fixtures/person_search.txt",
|
@@ -47,7 +50,7 @@ Gem::Specification.new do |s|
|
|
47
50
|
s.homepage = "https://github.com/Irio/ruby-tmdb"
|
48
51
|
s.rdoc_options = ["--line-numbers", "--inline-source"]
|
49
52
|
s.require_paths = ["lib"]
|
50
|
-
s.rubygems_version = "1.8.
|
53
|
+
s.rubygems_version = "1.8.24"
|
51
54
|
s.summary = "An ActiveRecord-style API wrapper for TheMovieDB.org"
|
52
55
|
|
53
56
|
if s.respond_to? :specification_version then
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx
|
3
|
+
Date: Mon, 23 Aug 2010 16:45:21 GMT
|
4
|
+
Content-Type: text/json; charset=utf-8
|
5
|
+
Transfer-Encoding: chunked
|
6
|
+
Connection: keep-alive
|
7
|
+
Keep-Alive: timeout=20
|
8
|
+
Status: 200 OK
|
9
|
+
Cache-Control: public, max-age=21600
|
10
|
+
X-Varnish: 2542127928 2542059531
|
11
|
+
Age: 1000
|
12
|
+
Via: 1.1 varnish
|
13
|
+
X-Cache: HIT
|
14
|
+
|
15
|
+
{"id":49517,"cast":[{"id":5472,"name":"Colin Firth","character":"Bill Haydon","order":0,"profile_path":"/gqcM1rKobitst1mZ999fRmXPjru.jpg"},{"id":2983,"name":"Mark Strong","character":"Jim Prideaux","order":1,"profile_path":"/vC1a35KBxx8f2rkMKyaik7bTOud.jpg"},{"id":2524,"name":"Tom Hardy","character":"Ricki Tarr","order":2,"profile_path":"/aYWIZ7ywOFzyK7B1HHCQj2nq8s4.jpg"},{"id":64,"name":"Gary Oldman","character":"George Smiley","order":3,"profile_path":"/kCWUeBkZ2sf8LObSpUFgRngawQb.jpg"},{"id":71580,"name":"Benedict Cumberbatch","character":"Peter Guillam","order":4,"profile_path":"/pFNkVEjlgls3e9r4PwKuN0VBLQN.jpg"},{"id":13014,"name":"Toby Jones","character":"Percy Alleline","order":5,"profile_path":"/8HDeyCbDzjeylqfDIIs8Bmv40vX.jpg"},{"id":93236,"name":"David Dencik","character":"Toby Esterhase","order":6,"profile_path":null},{"id":8785,"name":"Ciarán Hinds","character":"Roy Bland","order":7,"profile_path":"/8kOafsmtTjY5IxdDUAhFrHKALK5.jpg"},{"id":5049,"name":"John Hurt","character":"Control","order":8,"profile_path":"/zUQ7WL3xg9C532Aa8hftcJUnk9j.jpg"},{"id":42069,"name":"Zoltán Mucsi","character":"Magyar","order":9,"profile_path":"/z4S9Bg4f8gDvBtduEV3vdieHQey.jpg"},{"id":89645,"name":"Péter Kálloy Molnár","character":"Hungarian Waiter","order":10,"profile_path":null},{"id":933031,"name":"Ilona Kassai","character":"Woman in Window","order":11,"profile_path":null},{"id":82364,"name":"Imre Csuja","character":"KGB Agent","order":12,"profile_path":null},{"id":37759,"name":"Kathy Burke","character":"Connie Sachs","order":13,"profile_path":"/vqCHCywlp7HfoKBW6ZzCuQmnJx9.jpg"},{"id":1115,"name":"Stephen Graham","character":"Jerry Westerby","order":14,"profile_path":"/81VZiCA6w8nXG0UjqXCgSJare5N.jpg"},{"id":186275,"name":"Arthur Nightingale","character":"Bryant","order":15,"profile_path":null},{"id":16358,"name":"Simon McBurney","character":"Oliver Lacon","order":16,"profile_path":"/3SMFfBtmoDQncXBtICD61plB04W.jpg"},{"id":235837,"name":"Amanda Fairbank-Hynes","character":"Belinda","order":17,"profile_path":"/127xlkSaLK92NaYdStJQxWkqR1I.jpg"}],"crew":[{"id":74396,"name":"Tomas Alfredson","department":"Directing","job":"Director","profile_path":"/sRl6QzCtO7SlLspfFSvnv8u7ITi.jpg"},{"id":20422,"name":"John le Carré","department":"Writing","job":"Novel","profile_path":null},{"id":64814,"name":"Peter Straughan","department":"Writing","job":"Screenplay","profile_path":null},{"id":227094,"name":"Bridget O'Connor","department":"Writing","job":"Screenplay","profile_path":null}]}
|
@@ -12,4 +12,4 @@ Age: 1000
|
|
12
12
|
Via: 1.1 varnish
|
13
13
|
X-Cache: HIT
|
14
14
|
|
15
|
-
{"adult":false,"backdrop_path":"/
|
15
|
+
{"adult":false,"backdrop_path":"/hqLNDL7ugQzAbK79uvzjIkmfDN2.jpg","belongs_to_collection":{"id":86311,"name":"The Avengers Theatrical Movie Collection","poster_path":"/hiLkVTP34V24JtzOQ22r7Uu8eMc.jpg","backdrop_path":"/xCbb3hIID1AnEOBxPzsnBXG3n2h.jpg"},"budget":140000000,"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},{"id":878,"name":"Science Fiction"},{"id":53,"name":"Thriller"}],"homepage":"http://www.ironmanmovie.com/","id":1726,"imdb_id":"tt0371746","original_title":"Iron Man","overview":"After escaping from kidnappers using makeshift power armor, an ultrarich inventor and weapons maker turns his creation into a force for good by using it to fight crime. But his skills are stretched to the limit when he must face the evil Iron Monger.","popularity":68803.606,"poster_path":"/s2IG9qXfhJYxIttKyroYFBsHwzQ.jpg","production_companies":[{"name":"Marvel Studios","id":420}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"release_date":"2008-05-02","revenue":585174222,"runtime":126,"spoken_languages":[{"iso_639_1":"en","name":"English"}],"tagline":"Heroes aren't born. They're built.","title":"Iron Man","vote_average":8.4,"vote_count":103}
|
@@ -12,4 +12,4 @@ Age: 0
|
|
12
12
|
Via: 1.1 varnish
|
13
13
|
X-Cache: MISS
|
14
14
|
|
15
|
-
{"adult":false,"backdrop_path":"/
|
15
|
+
{"adult":false,"backdrop_path":"/hqLNDL7ugQzAbK79uvzjIkmfDN2.jpg","belongs_to_collection":{"id":86311,"name":"The Avengers Theatrical Movie Collection","poster_path":"/hiLkVTP34V24JtzOQ22r7Uu8eMc.jpg","backdrop_path":"/xCbb3hIID1AnEOBxPzsnBXG3n2h.jpg"},"budget":140000000,"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},{"id":878,"name":"Science Fiction"},{"id":53,"name":"Thriller"}],"homepage":"http://www.ironmanmovie.com/","id":1726,"imdb_id":"tt0371746","original_title":"Iron Man","overview":"After escaping from kidnappers using makeshift power armor, an ultrarich inventor and weapons maker turns his creation into a force for good by using it to fight crime. But his skills are stretched to the limit when he must face the evil Iron Monger.","popularity":68803.606,"poster_path":"/s2IG9qXfhJYxIttKyroYFBsHwzQ.jpg","production_companies":[{"name":"Marvel Studios","id":420}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"release_date":"2008-05-02","revenue":585174222,"runtime":126,"spoken_languages":[{"iso_639_1":"en","name":"English"}],"tagline":"Heroes aren't born. They're built.","title":"Iron Man","vote_average":8.4,"vote_count":103}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx
|
3
|
+
Date: Mon, 23 Aug 2010 16:45:21 GMT
|
4
|
+
Content-Type: text/json; charset=utf-8
|
5
|
+
Transfer-Encoding: chunked
|
6
|
+
Connection: keep-alive
|
7
|
+
Keep-Alive: timeout=20
|
8
|
+
Status: 200 OK
|
9
|
+
Cache-Control: public, max-age=21600
|
10
|
+
X-Varnish: 2542127928 2542059531
|
11
|
+
Age: 1000
|
12
|
+
Via: 1.1 varnish
|
13
|
+
X-Cache: HIT
|
14
|
+
|
15
|
+
{"id":49517,"backdrops":[{"file_path":"/4rYvCgyPx8eOEMLSaeuDOPdyQvB.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":8.0,"vote_count":3},{"file_path":"/jFhMjUmxSEh9vKMgHiViEqQCmiM.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":7.5,"vote_count":1},{"file_path":"/lRrYvUwR2vwxR6Fs8PKWIOSVLkp.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":6.75,"vote_count":2},{"file_path":"/97ib91kLwDlyB31pbqPtVYLzr2N.jpg","width":1600,"height":900,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":6.625,"vote_count":4},{"file_path":"/5oS5Qx6yAkdQCzLMXl5BQSCFhBI.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":6.5,"vote_count":5},{"file_path":"/dk6vIA6sWY11YHqIZWVlnp3CUhK.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":6.1,"vote_count":5},{"file_path":"/9M7aadoZIM1Atz3tToDjxJ6EJGa.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":5.833333333333333,"vote_count":6},{"file_path":"/kP09gF5nPu3OTIrhrl2x0w2LUD8.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":5.5,"vote_count":1},{"file_path":"/eDidONF03foKowW6MxJz7LTrLd1.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":5.166666666666667,"vote_count":3},{"file_path":"/68Hkre0dyPaz1FYEHvYWV3HoVM1.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":4.5,"vote_count":2},{"file_path":"/cXrJJLDQLKS5wsMjG4wS00tJ3Dn.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":4.0,"vote_count":1},{"file_path":"/cbcOWRsiMcAXGMxOu6klv4B20mp.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":3.0,"vote_count":1},{"file_path":"/8enB6zxS4ZoOoQ52TveIgJNEnAa.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.5,"vote_count":1},{"file_path":"/i1Kl77Z2Gio4ZEVZOMLjxWhBHtI.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/me1lCjal7vHNN5J0OefN5wmaNpp.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/wCcvWWzFUSQw1dUshp53wd71eKk.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/7mrdovWse6N66LC1XqlvkLsE2sP.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/l7N9SraMyj7MtGacoGnuR0bTJNG.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/eEKCDuZAsnugIBsksNTsPjnvI4x.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":2.0,"vote_count":1},{"file_path":"/4smv3B2gorWogu5ahMJTAjG7QG1.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":1.0,"vote_count":1},{"file_path":"/okvKba6NLBW78K5UT0qtL0wwy4K.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":0.0,"vote_count":0},{"file_path":"/ugaaNPbKF2sQAqzIOhlnSpkNpRx.jpg","width":1280,"height":720,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":0.0,"vote_count":0},{"file_path":"/6y5YQMb38aTNdAi6Li9SWtXm2IG.jpg","width":1920,"height":1080,"iso_639_1":null,"aspect_ratio":1.78,"vote_average":0.0,"vote_count":0}],"posters":[{"file_path":"/2N3P730TYXEcNL0BO8WBuMc6yJz.jpg","width":1000,"height":1500,"iso_639_1":"en","aspect_ratio":0.67,"vote_average":7.5,"vote_count":8},{"file_path":"/xXkkNXJRGEHD0QjPjHgaTtuhbZV.jpg","width":4051,"height":6001,"iso_639_1":"en","aspect_ratio":0.68,"vote_average":7.35,"vote_count":20},{"file_path":"/ggu2lYqxSAObuK82wk1TmEyyWGr.jpg","width":1000,"height":1500,"iso_639_1":"en","aspect_ratio":0.67,"vote_average":6.809523809523809,"vote_count":21},{"file_path":"/u2HlQA0VFeeNBfHesLSPoWZodwe.jpg","width":1131,"height":1600,"iso_639_1":"en","aspect_ratio":0.71,"vote_average":6.690476190476191,"vote_count":21},{"file_path":"/imDQdA47IfWOL13BiRLyDu6Q2b1.jpg","width":800,"height":1200,"iso_639_1":"ru","aspect_ratio":0.67,"vote_average":5.25,"vote_count":4},{"file_path":"/3sjSl5uaNLeIa7fySK5Cz1fF5Fz.jpg","width":1400,"height":2240,"iso_639_1":"en","aspect_ratio":0.63,"vote_average":5.125,"vote_count":8},{"file_path":"/ypCnGGSgIS93aLx0GcL8DPUbTZX.jpg","width":740,"height":1046,"iso_639_1":"de","aspect_ratio":0.71,"vote_average":4.5,"vote_count":3},{"file_path":"/49ohCbedmB4S1IgpN09Fv08B5Bf.jpg","width":420,"height":600,"iso_639_1":"it","aspect_ratio":0.7,"vote_average":4.125,"vote_count":4},{"file_path":"/aADb4oVjxeTujuisL7S25Ge4J0z.jpg","width":1181,"height":1757,"iso_639_1":"pt","aspect_ratio":0.67,"vote_average":3.75,"vote_count":2},{"file_path":"/xSFqKRbhXWMOsbDMqljwntJekue.jpg","width":1012,"height":1500,"iso_639_1":"en","aspect_ratio":0.67,"vote_average":2.4,"vote_count":5},{"file_path":"/t2gAZJuTZGTbMP4ymXyVFVmhh7R.jpg","width":1012,"height":1500,"iso_639_1":"en","aspect_ratio":0.67,"vote_average":2.0,"vote_count":4},{"file_path":"/dVaaL1NwEgKXcmlMxIOab49iuya.jpg","width":1455,"height":2081,"iso_639_1":"hu","aspect_ratio":0.7,"vote_average":1.0,"vote_count":1},{"file_path":"/5rONpcG54LqtDFcLrRrfbeUilto.jpg","width":1013,"height":1500,"iso_639_1":"en","aspect_ratio":0.68,"vote_average":0.5,"vote_count":2},{"file_path":"/1fudfIPnLOFl7jJFsRYbOPisoV6.jpg","width":1500,"height":2000,"iso_639_1":"fr","aspect_ratio":0.75,"vote_average":0.0,"vote_count":0},{"file_path":"/ozKFQ9uCyxqGxeYfJfrwkPq93r9.jpg","width":800,"height":1200,"iso_639_1":"en","aspect_ratio":0.67,"vote_average":0.0,"vote_count":0},{"file_path":"/5msUg8U2S64eFBhaVfziLpnlc2i.jpg","width":423,"height":630,"iso_639_1":"da","aspect_ratio":0.67,"vote_average":0.0,"vote_count":0},{"file_path":"/tHvYtrRU9iORz96GYlxqk98FTSN.jpg","width":458,"height":660,"iso_639_1":"es","aspect_ratio":0.69,"vote_average":0.0,"vote_count":0},{"file_path":"/qwzs6DKqb00aD7GkNbyCEQQ1CES.jpg","width":600,"height":800,"iso_639_1":"fr","aspect_ratio":0.75,"vote_average":0.0,"vote_count":0}]}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx
|
3
|
+
Date: Mon, 23 Aug 2010 16:45:21 GMT
|
4
|
+
Content-Type: text/json; charset=utf-8
|
5
|
+
Transfer-Encoding: chunked
|
6
|
+
Connection: keep-alive
|
7
|
+
Keep-Alive: timeout=20
|
8
|
+
Status: 200 OK
|
9
|
+
Cache-Control: public, max-age=21600
|
10
|
+
X-Varnish: 2542127928 2542059531
|
11
|
+
Age: 1000
|
12
|
+
Via: 1.1 varnish
|
13
|
+
X-Cache: HIT
|
14
|
+
|
15
|
+
{"id":49517,"countries":[{"iso_3166_1":"GB","certification":"15","release_date":"2011-09-16"},{"iso_3166_1":"US","certification":"R","release_date":"2011-12-09"},{"iso_3166_1":"IE","certification":"","release_date":"2011-09-16"},{"iso_3166_1":"AU","certification":"","release_date":"2011-10-27"},{"iso_3166_1":"DE","certification":"12","release_date":"2011-11-10"},{"iso_3166_1":"SE","certification":"","release_date":"2011-12-25"},{"iso_3166_1":"FR","certification":"","release_date":"2012-02-08"},{"iso_3166_1":"HU","certification":"16 éven aluliak számára nem ajánlott","release_date":"2012-01-26"},{"iso_3166_1":"CZ","certification":"","release_date":"2012-02-02"},{"iso_3166_1":"PT","certification":"M12","release_date":"2011-12-22"},{"iso_3166_1":"IT","certification":"","release_date":"2011-09-05"},{"iso_3166_1":"AT","certification":"","release_date":"2012-02-02"}]}
|
data/test/setup/setup_api_key.rb
CHANGED
@@ -2,9 +2,9 @@ begin
|
|
2
2
|
file_path = File.absolute_path('tmdb_api_key.txt', File.dirname(__FILE__))
|
3
3
|
|
4
4
|
File.open(file_path) do |file|
|
5
|
-
Tmdb.api_key = file.read
|
5
|
+
Tmdb.api_key = file.read.chomp
|
6
6
|
end
|
7
7
|
rescue Errno::ENOENT => e
|
8
8
|
$stderr.puts "You need place your api key in #{file_path}"
|
9
9
|
exit
|
10
|
-
end
|
10
|
+
end
|
data/test/setup/url_mocks.rb
CHANGED
@@ -2,27 +2,39 @@ def register_api_url_stubs
|
|
2
2
|
unless(TEST_LIVE_API)
|
3
3
|
|
4
4
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_search.txt")) do |file|
|
5
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "search/movie" + ".*")).to_return(file)
|
5
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/search/movie" + ".*")).to_return(file)
|
6
6
|
end
|
7
7
|
|
8
8
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_get_info.txt")) do |file|
|
9
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "movie/" + ".*")).to_return(file)
|
9
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/movie/" + ".*")).to_return(file)
|
10
|
+
end
|
11
|
+
|
12
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_posters.txt")) do |file|
|
13
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + '/movie/\d+/images')).to_return(file)
|
14
|
+
end
|
15
|
+
|
16
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_releases.txt")) do |file|
|
17
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + '/movie/\d+/releases')).to_return(file)
|
18
|
+
end
|
19
|
+
|
20
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_casts.txt")) do |file|
|
21
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + '/movie/\d+/casts')).to_return(file)
|
10
22
|
end
|
11
23
|
|
12
24
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_imdb_lookup.txt")) do |file|
|
13
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "movie/tt" + ".*")).to_return(file)
|
25
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/movie/tt" + ".*")).to_return(file)
|
14
26
|
end
|
15
27
|
|
16
28
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_get_info.txt")) do |file|
|
17
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "person/" + ".*")).to_return(file)
|
29
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/person/" + ".*")).to_return(file)
|
18
30
|
end
|
19
31
|
|
20
32
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_search.txt")) do |file|
|
21
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "search/person" + ".*")).to_return(file)
|
33
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/search/person" + ".*")).to_return(file)
|
22
34
|
end
|
23
35
|
|
24
36
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "incorrect_api_url.txt")) do |file|
|
25
|
-
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.blarg/" + ".*")).to_return(file)
|
37
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "/Movie.blarg/" + ".*")).to_return(file)
|
26
38
|
end
|
27
39
|
|
28
40
|
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "example_com.txt")) do |file|
|
@@ -43,4 +55,4 @@ def register_api_url_stubs
|
|
43
55
|
|
44
56
|
stub_request(:get, 'http://thisisaurlthatdoesntexist.co.nz').to_return(:body => "", :status => 404, :headers => {'content-length' => 0})
|
45
57
|
end
|
46
|
-
end
|
58
|
+
end
|
@@ -35,8 +35,8 @@ class TmdbMovieTest < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
test "find by title should return the full movie data when expand_results set to true" do
|
38
|
-
movie = TmdbMovie.find(:title => "
|
39
|
-
assert_movie_methodized(movie,
|
38
|
+
movie = TmdbMovie.find(:title => "Iron Man", :limit => 1, :expand_results => true)
|
39
|
+
assert_movie_methodized(movie, 1726)
|
40
40
|
end
|
41
41
|
|
42
42
|
test "should raise exception if no arguments supplied to find" do
|
@@ -105,7 +105,10 @@ class TmdbMovieTest < Test::Unit::TestCase
|
|
105
105
|
end
|
106
106
|
|
107
107
|
test "TmdbMovie.new should raise error if supplied with raw data for movie that doesn't exist" do
|
108
|
-
Tmdb.expects(:api_call).with("movie", {id:
|
108
|
+
Tmdb.expects(:api_call).with("movie", {id: 999999999999}, nil).returns(nil)
|
109
|
+
Tmdb.expects(:api_call).with("movie/images", {id: 999999999999}, nil).returns(nil)
|
110
|
+
Tmdb.expects(:api_call).with("movie/releases", {id: 999999999999}, nil).returns(nil)
|
111
|
+
Tmdb.expects(:api_call).with("movie/casts", {id: 999999999999}, nil).returns(nil)
|
109
112
|
assert_raise ArgumentError do
|
110
113
|
TmdbMovie.new({"id" => 999999999999}, true)
|
111
114
|
end
|
@@ -155,4 +158,4 @@ class TmdbMovieTest < Test::Unit::TestCase
|
|
155
158
|
end
|
156
159
|
end
|
157
160
|
|
158
|
-
end
|
161
|
+
end
|
data/test/unit/tmdb_test.rb
CHANGED
@@ -31,7 +31,7 @@ class TmdbTest < Test::Unit::TestCase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
test "should return base API url" do
|
34
|
-
assert_equal "http://api.themoviedb.org/3
|
34
|
+
assert_equal "http://api.themoviedb.org/3", Tmdb.base_api_url
|
35
35
|
end
|
36
36
|
|
37
37
|
test "get url returns a response object" do
|
@@ -48,7 +48,7 @@ class TmdbTest < Test::Unit::TestCase
|
|
48
48
|
method = "search/movie"
|
49
49
|
data = "hello"
|
50
50
|
Tmdb.default_language = "es"
|
51
|
-
url = Tmdb.base_api_url + method + '?api_key=' + Tmdb.api_key + '&language=' + Tmdb.default_language + '&query=' + CGI::escape(data.to_s)
|
51
|
+
url = Tmdb.base_api_url + '/' + method + '?api_key=' + Tmdb.api_key + '&language=' + Tmdb.default_language + '&query=' + CGI::escape(data.to_s)
|
52
52
|
mock_response = stub(:code => "200", :body => '{"page":1,"results":[],"total_pages":0,"total_results":0}')
|
53
53
|
Tmdb.expects(:get_url).with(url).returns(mock_response)
|
54
54
|
Tmdb.api_call(method, {query: data})
|
@@ -58,7 +58,7 @@ class TmdbTest < Test::Unit::TestCase
|
|
58
58
|
method = "movie"
|
59
59
|
data = "hello"
|
60
60
|
language = "blah"
|
61
|
-
url = Tmdb.base_api_url + method + "?api_key=" + Tmdb.api_key + "&language=" + language + '&query=' + CGI::escape(data.to_s)
|
61
|
+
url = Tmdb.base_api_url + '/' + method + "?api_key=" + Tmdb.api_key + "&language=" + language + '&query=' + CGI::escape(data.to_s)
|
62
62
|
mock_response = stub(:code => "200", :body => '{"page":1,"results":[],"total_pages":0,"total_results":0}')
|
63
63
|
Tmdb.expects(:get_url).with(url).returns(mock_response)
|
64
64
|
Tmdb.api_call(method, {query: data}, language)
|
@@ -92,6 +92,14 @@ class TmdbTest < Test::Unit::TestCase
|
|
92
92
|
assert_not_nil result[item]
|
93
93
|
end
|
94
94
|
end
|
95
|
+
|
96
|
+
test "should perform movie API call with an action and return a single result" do
|
97
|
+
result = Tmdb.api_call("movie/images", {id: "187"})
|
98
|
+
assert_kind_of Hash, result
|
99
|
+
%w(posters id).each do |item|
|
100
|
+
assert_not_nil result[item]
|
101
|
+
end
|
102
|
+
end
|
95
103
|
|
96
104
|
test "should perform Movie.imdbLookup API call and return a single result" do
|
97
105
|
result = Tmdb.api_call("movie", {id: "tt0401792"})
|
@@ -165,9 +173,7 @@ class TmdbTest < Test::Unit::TestCase
|
|
165
173
|
test_data = {
|
166
174
|
"backdrops" => [
|
167
175
|
{
|
168
|
-
|
169
|
-
:test => 1
|
170
|
-
}
|
176
|
+
:test => 1
|
171
177
|
}
|
172
178
|
]
|
173
179
|
}
|
@@ -177,4 +183,4 @@ class TmdbTest < Test::Unit::TestCase
|
|
177
183
|
end
|
178
184
|
end
|
179
185
|
|
180
|
-
end
|
186
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-tmdb3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-07-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: deepopenstruct
|
@@ -97,8 +97,11 @@ files:
|
|
97
97
|
- test/fixtures/example_com.txt
|
98
98
|
- test/fixtures/image.jpg
|
99
99
|
- test/fixtures/incorrect_api_url.txt
|
100
|
+
- test/fixtures/movie_casts.txt
|
100
101
|
- test/fixtures/movie_get_info.txt
|
101
102
|
- test/fixtures/movie_imdb_lookup.txt
|
103
|
+
- test/fixtures/movie_posters.txt
|
104
|
+
- test/fixtures/movie_releases.txt
|
102
105
|
- test/fixtures/movie_search.txt
|
103
106
|
- test/fixtures/person_get_info.txt
|
104
107
|
- test/fixtures/person_search.txt
|