ruby-tmdb 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/README.rdoc CHANGED
@@ -1,12 +1,12 @@
1
- == ruby-tmdb
1
+ = ruby-tmdb
2
2
 
3
- ruby-tmdb is an ActiveRecord-style API wrapper for {TheMovieDB.org}[http://www.themoviedb.org/] ({TMDb}[http://www.themoviedb.org/]). ruby-tmdb is designed to make common tasks like retrieving all movies that have a given actor in them and fetching image data much easier than they would be if dealing directly with the URL based API. ruby-tmdb also provides query caching to minimize duplicate remote API queries.
3
+ ruby-tmdb is an ActiveRecord-style API wrapper for {TheMovieDB.org (TMDb)}[http://www.themoviedb.org/]. ruby-tmdb is designed to make common tasks much easier than they would be if dealing directly with the URL based API.
4
4
 
5
5
  === Installation
6
6
 
7
7
  gem install ruby-tmdb
8
8
 
9
- === Usage
9
+ === Example
10
10
 
11
11
  require 'rubygems'
12
12
  require 'ruby-tmdb'
@@ -15,7 +15,7 @@ ruby-tmdb is an ActiveRecord-style API wrapper for {TheMovieDB.org}[http://www.t
15
15
  Tmdb.api_key = "t478f8de5776c799de5a"
16
16
 
17
17
  @movie = TmdbMovie.find(:title => "Iron Man", :limit => 1)
18
- # => <TmdbMovie>
18
+ # => <OpenStruct>
19
19
 
20
20
  @movie.name
21
21
  # => "Iron Man"
@@ -26,31 +26,66 @@ ruby-tmdb is an ActiveRecord-style API wrapper for {TheMovieDB.org}[http://www.t
26
26
  @movie.posters.first.data
27
27
  # => [binary blob representing JPEG]
28
28
 
29
- @movie.cast.first.bio.movies
30
- # => [<TmdbMovie>,<TmdbMovie>,<TmdbMovie>,<TmdbMovie>]
29
+ === Usage
30
+
31
+ ruby-tmdb provides 2 main objects that you will use to query the API
32
+
33
+ TmdbMovie
34
+ TmdbCast
35
+
36
+ These objects provide access to movie and cast listing respectively.
37
+
38
+ Each object provides a find() method which accepts a number of options:
39
+
40
+ TmdbMovie.find(:id => 123, :title => "fight club", :imdb => 'tt0401792', :limit => 10, :expand_results => true)
41
+
42
+
43
+ [:id] specifies an individual movie via it's TMDb id
44
+ [:title] specifies a query string to look for in the movie titles
45
+ [:imdb] specifies an idividual movie via it's IMDB id
46
+ [:limit] specifies the maximum number of results to be returned
47
+ [:expand_results] The TMDb API by default returns only partial info for any API method that can return multiple results. When :expand_results is set to true ruby-tmdb automatically makes extra API calls to fetch the full information for each item. This can result in *very* slow requests though. If you only need basic information for a search listing then set this to false. Defaults to 'true'.
31
48
 
32
- @actor = TmdbCast.find(:name => "Brad Pitt", :limit => 1)
33
- # => <TmdbCast>
49
+
50
+ TmdbCast.find( :id => 123, :name => "Brad", :limit => 1, :expand_results => true)
34
51
 
35
- @actor.birthplace
36
- # => "Shawnee, Oklahoma, United States"
52
+ [:id] specifies an idividual cast member via their TMDb id
53
+ [:name] specifies a query string to look for in the cast names
54
+ [:limit] see TmdbMovie
55
+ [:expand_results] see TmdbMovie
37
56
 
38
- Find all movies whose titles match a given string
57
+
58
+ === Usage Examples
59
+
60
+ Find all movies whose titles match a given string:
39
61
 
40
62
  @movies = TmdbMovie.find(:title => 'Iron Man')
41
63
 
42
- Find the movie most likely to be associated with a given title
64
+ Find the movie most likely to be associated with a given title:
43
65
 
44
66
  @movie = TmdbMovie.find(:title => 'Sin City', :limit => 1)
45
67
 
46
- Find a single movie by it's TMDb ID
68
+ Find a single movie by it's TMDb ID:
47
69
 
48
70
  @movie = TmdbMovie.find(:id => 187)
49
71
 
50
- Find a single movie by it's IMDB ID
72
+ Find a single movie by it's IMDB ID:
51
73
 
52
74
  @movie = TmdbMovie.find(:imdb => 'tt0401792')
53
75
 
76
+ Find all cast members whose names match a given string:
77
+
78
+ @actors = TmdbCast.find(:name => 'Fred')
79
+
80
+ Find an individual cast member via their TMDb ID:
81
+
82
+ @actor = TmdbCast.find(:id => 101)
83
+
84
+
85
+ === Item information
86
+
87
+ To find out more about the information each object offers on retrieved items have a look at the {TMDb API Docs}[http://api.themoviedb.org/2.1]. For the most accurate information about the information available have a look at the data directly through ruby-tmdb by calling @item.raw_data.inspect
88
+
54
89
  === Author & Credits
55
90
 
56
91
  Author:: {Aaron Gough}[mailto:aaron@aarongough.com]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -22,6 +22,7 @@ class Tmdb
22
22
  end
23
23
 
24
24
  def self.api_call(method, data, language = "en")
25
+ raise ArgumentError, "Tmdb.api_key must be set before using the API" if(Tmdb.api_key.nil? || Tmdb.api_key.empty?)
25
26
  url = Tmdb.base_api_url + method + '/' + language + '/yaml/' + Tmdb.api_key + '/' + CGI::escape(data.to_s)
26
27
  response = Tmdb.get_url(url)
27
28
  if(response.code.to_i != 200)
@@ -32,7 +32,9 @@ class TmdbCast
32
32
  end
33
33
 
34
34
  def self.new(raw_data, expand_results = false)
35
- raw_data = Tmdb.api_call('Person.getInfo', raw_data["id"]).first
35
+ # expand the result by calling Person.getInfo unless :expand_results is set to false or the data is already complete
36
+ # (as determined by checking for the 'known_movies' property)
37
+ raw_data = Tmdb.api_call('Person.getInfo', raw_data["id"]).first if(expand_results && !raw_data.has_key?("known_movies"))
36
38
  return Tmdb.data_to_object(raw_data)
37
39
  end
38
40
 
@@ -36,7 +36,9 @@ class TmdbMovie
36
36
  end
37
37
 
38
38
  def self.new(raw_data, expand_results = false)
39
- raw_data = Tmdb.api_call('Movie.getInfo', raw_data["id"]).first if(expand_results)
39
+ # expand the result by calling Movie.getInfo unless :expand_results is false or the data is already complete
40
+ # (as determined by checking for the trailer property in the raw data)
41
+ raw_data = Tmdb.api_call('Movie.getInfo', raw_data["id"]).first if(expand_results && !raw_data.has_key?("trailer"))
40
42
  return Tmdb.data_to_object(raw_data)
41
43
  end
42
44
 
data/ruby-tmdb.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-tmdb}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aaron Gough"]
12
- s.date = %q{2010-08-19}
12
+ s.date = %q{2010-08-20}
13
13
  s.description = %q{An ActiveRecord-style API wrapper for TheMovieDB.org}
14
14
  s.email = %q{aaron@aarongough.com}
15
15
  s.extra_rdoc_files = [
@@ -17,7 +17,8 @@ Gem::Specification.new do |s|
17
17
  "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
- "MIT-LICENSE",
20
+ ".gitignore",
21
+ "MIT-LICENSE",
21
22
  "README.rdoc",
22
23
  "Rakefile",
23
24
  "VERSION",
@@ -36,9 +37,11 @@ Gem::Specification.new do |s|
36
37
  "test/fixtures/person_get_info.txt",
37
38
  "test/fixtures/person_search.txt",
38
39
  "test/setup/.gitignore",
40
+ "test/setup/setup_api_key.rb",
39
41
  "test/setup/test_unit_extensions.rb",
40
42
  "test/setup/url_mocks.rb",
41
43
  "test/test_helper.rb",
44
+ "test/unit/test_direct_require.rb",
42
45
  "test/unit/tmdb_cast_test.rb",
43
46
  "test/unit/tmdb_movie_test.rb",
44
47
  "test/unit/tmdb_test.rb"
@@ -49,9 +52,11 @@ Gem::Specification.new do |s|
49
52
  s.rubygems_version = %q{1.3.7}
50
53
  s.summary = %q{An ActiveRecord-style API wrapper for TheMovieDB.org}
51
54
  s.test_files = [
52
- "test/setup/test_unit_extensions.rb",
55
+ "test/setup/setup_api_key.rb",
56
+ "test/setup/test_unit_extensions.rb",
53
57
  "test/setup/url_mocks.rb",
54
58
  "test/test_helper.rb",
59
+ "test/unit/test_direct_require.rb",
55
60
  "test/unit/tmdb_cast_test.rb",
56
61
  "test/unit/tmdb_movie_test.rb",
57
62
  "test/unit/tmdb_test.rb"
@@ -0,0 +1,3 @@
1
+ File.open(File.join(File.dirname(__FILE__), 'tmdb_api_key.txt')) do |file|
2
+ Tmdb.api_key = file.read
3
+ end
data/test/test_helper.rb CHANGED
@@ -2,8 +2,6 @@ TEST_LIVE_API = false
2
2
 
3
3
  require 'rubygems'
4
4
  require 'test/unit'
5
- require 'yaml'
6
- require 'net/http'
7
5
 
8
6
  unless(TEST_LIVE_API)
9
7
  require 'webmock/test_unit'
@@ -18,6 +16,5 @@ require_files.each do |file|
18
16
  require File.expand_path(file)
19
17
  end
20
18
 
21
- File.open(File.join(File.dirname(__FILE__), 'setup', 'tmdb_api_key.txt')) do |file|
22
- Tmdb.api_key = file.read
23
- end
19
+ #load(File.join('unit', 'test_direct_require.rb'), true)
20
+ system('ruby ' + File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'test_direct_require.rb')))
@@ -0,0 +1,25 @@
1
+ require "test/unit"
2
+
3
+ require_files = []
4
+ require_files << File.join(File.dirname(__FILE__), "..", "..", "lib", "ruby-tmdb.rb")
5
+ require_files.concat Dir[File.join(File.dirname(__FILE__), '..', 'setup', '*.rb')]
6
+
7
+ require_files.each do |file|
8
+ require File.expand_path(file)
9
+ end
10
+
11
+ class DirectRequireTest < Test::Unit::TestCase
12
+
13
+ test "TmdbMovie should not raise exception when directly required without using rubygems" do
14
+ assert_nothing_raised do
15
+ TmdbMovie.find(:id => 187)
16
+ end
17
+ end
18
+
19
+ test "TmdbCast should not raise exception when directly required without using rubygems" do
20
+ assert_nothing_raised do
21
+ TmdbCast.find(:id => 287)
22
+ end
23
+ end
24
+
25
+ end
@@ -28,6 +28,15 @@ class TmdbTest < Test::Unit::TestCase
28
28
  assert_equal 404, test_response.code.to_i
29
29
  end
30
30
 
31
+ test "api_call should raise exception if api_key is not set" do
32
+ old_api_key = Tmdb.api_key
33
+ Tmdb.api_key = ""
34
+ assert_raises ArgumentError do
35
+ Tmdb.api_call('Movie.search', 'Transformers')
36
+ end
37
+ Tmdb.api_key = old_api_key
38
+ end
39
+
31
40
  test "should perform Movie.search API call and return array of results" do
32
41
  movies = Tmdb.api_call('Movie.search', 'Transformers')
33
42
  assert_kind_of Array, movies
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aaron Gough
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-19 00:00:00 -04:00
17
+ date: 2010-08-20 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -53,6 +53,7 @@ extra_rdoc_files:
53
53
  - MIT-LICENSE
54
54
  - README.rdoc
55
55
  files:
56
+ - .gitignore
56
57
  - MIT-LICENSE
57
58
  - README.rdoc
58
59
  - Rakefile
@@ -72,9 +73,11 @@ files:
72
73
  - test/fixtures/person_get_info.txt
73
74
  - test/fixtures/person_search.txt
74
75
  - test/setup/.gitignore
76
+ - test/setup/setup_api_key.rb
75
77
  - test/setup/test_unit_extensions.rb
76
78
  - test/setup/url_mocks.rb
77
79
  - test/test_helper.rb
80
+ - test/unit/test_direct_require.rb
78
81
  - test/unit/tmdb_cast_test.rb
79
82
  - test/unit/tmdb_movie_test.rb
80
83
  - test/unit/tmdb_test.rb
@@ -113,9 +116,11 @@ signing_key:
113
116
  specification_version: 3
114
117
  summary: An ActiveRecord-style API wrapper for TheMovieDB.org
115
118
  test_files:
119
+ - test/setup/setup_api_key.rb
116
120
  - test/setup/test_unit_extensions.rb
117
121
  - test/setup/url_mocks.rb
118
122
  - test/test_helper.rb
123
+ - test/unit/test_direct_require.rb
119
124
  - test/unit/tmdb_cast_test.rb
120
125
  - test/unit/tmdb_movie_test.rb
121
126
  - test/unit/tmdb_test.rb