neo-tmdb 0.3.1 → 0.4.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.
- data/lib/neo-tmdb.rb +1 -0
- data/lib/tmdb.rb +13 -1
- data/lib/tmdb/attributes.rb +4 -0
- data/lib/tmdb/configuration.rb +6 -1
- data/lib/tmdb/null_person.rb +15 -0
- data/lib/tmdb/person.rb +9 -4
- data/lib/tmdb/version.rb +1 -1
- metadata +35 -4
- data/Changelog.markdown +0 -39
- data/README.markdown +0 -91
data/lib/neo-tmdb.rb
CHANGED
data/lib/tmdb.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
module TMDb
|
2
2
|
extend self
|
3
3
|
|
4
|
+
class ServiceUnavailable < StandardError; end
|
5
|
+
|
4
6
|
# Returns the global TMDb configuration.
|
7
|
+
#
|
5
8
|
def configuration
|
6
9
|
@configuration ||= Configuration.new
|
7
10
|
end
|
8
11
|
|
9
12
|
# Configure TMDb by calling this method.
|
13
|
+
#
|
10
14
|
def configure
|
11
15
|
yield configuration
|
12
16
|
end
|
@@ -16,6 +20,10 @@ module TMDb
|
|
16
20
|
# hash (parsed from the original JSON). This method is not intended to be
|
17
21
|
# called directly by client code, instead you should call methods such as
|
18
22
|
# +Person.find+ that return TMDb wrapper objects.
|
23
|
+
#
|
24
|
+
# Raises a +TMDb::ServiceUnavailable+ error if the service is unavailable or
|
25
|
+
# the API request limits have been exceeded.
|
26
|
+
#
|
19
27
|
def get_api_response(path, params = {})
|
20
28
|
configuration.cache.fetch([path, params]) do
|
21
29
|
connection = Faraday.new(:url => 'http://api.themoviedb.org/3/') do |builder|
|
@@ -26,7 +34,11 @@ module TMDb
|
|
26
34
|
path,
|
27
35
|
params.merge({ :api_key => TMDb.configuration.api_key })
|
28
36
|
)
|
29
|
-
|
37
|
+
if response.status == 503
|
38
|
+
raise ServiceUnavailable
|
39
|
+
else
|
40
|
+
JSON.parse(response.body)
|
41
|
+
end
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
data/lib/tmdb/attributes.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
module TMDb
|
2
|
+
|
2
3
|
# A module for managing TMDb-derived attributes of a class.
|
4
|
+
#
|
3
5
|
module Attributes
|
6
|
+
|
4
7
|
# Adds an attribute reader with the given +name+ (symbol) that delegates to
|
5
8
|
# the instance's +@tmdb_attrs+ hash entry of the same name.
|
9
|
+
#
|
6
10
|
def tmdb_attr(name)
|
7
11
|
define_method(name) { @tmdb_attrs[name.to_s] }
|
8
12
|
end
|
data/lib/tmdb/configuration.rb
CHANGED
@@ -1,30 +1,35 @@
|
|
1
1
|
module TMDb
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :api_key, :cache
|
3
|
+
attr_accessor :api_key, :cache, :null_person
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@cache = NullCache.new
|
7
|
+
@null_person = NullPerson.new
|
7
8
|
end
|
8
9
|
|
9
10
|
# Returns the base URL for use in constructing image URLs.
|
11
|
+
#
|
10
12
|
def image_base_url
|
11
13
|
tmdb_config_images['base_url']
|
12
14
|
end
|
13
15
|
|
14
16
|
# Returns the list of film backdrop image sizes for use in constructing
|
15
17
|
# image URLs.
|
18
|
+
#
|
16
19
|
def image_backdrop_sizes
|
17
20
|
tmdb_config_images['backdrop_sizes']
|
18
21
|
end
|
19
22
|
|
20
23
|
# Returns the list of film poster image sizes for use in constructing image
|
21
24
|
# URLs.
|
25
|
+
#
|
22
26
|
def image_poster_sizes
|
23
27
|
tmdb_config_images['poster_sizes']
|
24
28
|
end
|
25
29
|
|
26
30
|
# Returns the list of person profile image sizes for use in constructing
|
27
31
|
# image URLs.
|
32
|
+
#
|
28
33
|
def image_profile_sizes
|
29
34
|
tmdb_config_images['profile_sizes']
|
30
35
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module TMDb
|
2
|
+
|
3
|
+
# This class is a Null Object version of the +Person+ class.
|
4
|
+
#
|
5
|
+
class NullPerson
|
6
|
+
attr_accessor :adult, :also_known_as, :biography, :birthday,
|
7
|
+
:deathday, :homepage, :id, :name, :place_of_birth, :profile_path
|
8
|
+
|
9
|
+
attr_writer :profile_image_url
|
10
|
+
|
11
|
+
def profile_image_url(size)
|
12
|
+
@profile_image_url
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/tmdb/person.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'tmdb/attributes'
|
2
|
+
require 'tmdb/null_person'
|
2
3
|
|
3
4
|
module TMDb
|
4
5
|
class Person
|
@@ -22,21 +23,25 @@ module TMDb
|
|
22
23
|
# Returns the person with TMDb id of +id+.
|
23
24
|
#
|
24
25
|
def self.find(id)
|
25
|
-
|
26
|
-
|
26
|
+
begin
|
27
|
+
response = TMDb.get_api_response("person/#{id}")
|
28
|
+
new(response)
|
29
|
+
rescue ServiceUnavailable
|
30
|
+
TMDb.configuration.null_person || raise
|
31
|
+
end
|
27
32
|
end
|
28
33
|
|
29
34
|
# Returns an enumerable containing all the people matching the
|
30
35
|
# condition hash. Currently the only condition that can be specified
|
31
36
|
# is name, e.g.
|
32
37
|
#
|
33
|
-
# people = Person.where(:name =>
|
38
|
+
# people = Person.where(:name => 'Reeves')
|
34
39
|
#
|
35
40
|
# Only the first page of results (20 people) are returned.
|
36
41
|
#
|
37
42
|
def self.where(args)
|
38
43
|
response = TMDb.get_api_response('search/person', :query => args[:name])
|
39
|
-
response[
|
44
|
+
response['results'].map {|attrs| new(attrs) }
|
40
45
|
end
|
41
46
|
|
42
47
|
# Returns a URL for the person's profile image at the given +size+. Valid
|
data/lib/tmdb/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo-tmdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.8.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: aruba
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0.4'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.4'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: activesupport
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +59,22 @@ dependencies:
|
|
43
59
|
- - ~>
|
44
60
|
- !ruby/object:Gem::Version
|
45
61
|
version: '3.2'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: cucumber
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.2'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.2'
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
79
|
name: rspec
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,10 +135,9 @@ files:
|
|
103
135
|
- lib/tmdb/person.rb
|
104
136
|
- lib/tmdb/attributes.rb
|
105
137
|
- lib/tmdb/version.rb
|
138
|
+
- lib/tmdb/null_person.rb
|
106
139
|
- lib/neo-tmdb.rb
|
107
140
|
- LICENSE
|
108
|
-
- Changelog.markdown
|
109
|
-
- README.markdown
|
110
141
|
homepage: https://github.com/andrewdsmith/neo-tmdb
|
111
142
|
licenses:
|
112
143
|
- MIT
|
data/Changelog.markdown
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# Changelog
|
2
|
-
|
3
|
-
## In git master branch
|
4
|
-
|
5
|
-
Nothing yet.
|
6
|
-
|
7
|
-
## 0.3.1 (2012-06-27)
|
8
|
-
|
9
|
-
Fixes:
|
10
|
-
|
11
|
-
* Return nil from `Person#profile_image_url` when `Person#profile_path` is nil.
|
12
|
-
|
13
|
-
## 0.3.0 (2012-06-25)
|
14
|
-
|
15
|
-
New features:
|
16
|
-
|
17
|
-
* Caching support through `Configuration#cache`.
|
18
|
-
|
19
|
-
## 0.2.0 (2012-06-15)
|
20
|
-
|
21
|
-
New features:
|
22
|
-
|
23
|
-
* The `Person#profile_image_url` method, which uses the base image URL fetched
|
24
|
-
from the TMDb configuration.
|
25
|
-
* Methods on `Configuration` for fetching and caching the [TMDb
|
26
|
-
configuration][], which can be used to build image URLs from a
|
27
|
-
`Person#profile_path`.
|
28
|
-
* An initial implementation of the `Person.find` method for getting a person by
|
29
|
-
their TMDb id.
|
30
|
-
|
31
|
-
[TMDb configuration]: http://help.themoviedb.org/kb/api/configuration
|
32
|
-
|
33
|
-
## 0.1.0 (2012-06-05)
|
34
|
-
|
35
|
-
New features:
|
36
|
-
|
37
|
-
* An initial implementation of the `Person.where` method that searches for
|
38
|
-
people on TMDb by name.
|
39
|
-
|
data/README.markdown
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
# Neo TMDb
|
2
|
-
|
3
|
-
Neo TMDb is a Ruby wrapper for the v3 [TMDb API][api] from www.themoviedb.org.
|
4
|
-
It provides read-only access with caching.
|
5
|
-
|
6
|
-
[api]: http://help.themoviedb.org/kb/api/about-3
|
7
|
-
|
8
|
-
## Use
|
9
|
-
|
10
|
-
Currently you can find people by their TMDb id or search for people.
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
require 'neo-tmdb'
|
14
|
-
|
15
|
-
TMDb.configure do |config|
|
16
|
-
# You must configure this library with a TMDb API key before you can use it.
|
17
|
-
config.api_key = 'my-tmdb-api-key-here'
|
18
|
-
end
|
19
|
-
|
20
|
-
person = TMDb::Person.find(6384)
|
21
|
-
puts "#{person.name}, born #{person.birthday} in #{person.place_of_birth}"
|
22
|
-
# => Keanu Reeves, born 1964-09-02 in Beirut, Lebanon
|
23
|
-
|
24
|
-
smallest = TMDb.configuration.image_profile_sizes.first
|
25
|
-
puts person.profile_image_url(smallest)
|
26
|
-
# => http://cf2.imgobject.com/t/p/w45/jmjeALlAVaPB8SonLR3qBN5myjc.jpg
|
27
|
-
|
28
|
-
# Note: Only the first 20 results are returned.
|
29
|
-
people = TMDb::Person.where(:name => "Reeves")
|
30
|
-
people.each do |person|
|
31
|
-
# Note: Only attributes available in the search API will be populated here.
|
32
|
-
puts "#{person.name} has TMDb id #{person.id}"
|
33
|
-
end
|
34
|
-
```
|
35
|
-
|
36
|
-
### Configure caching
|
37
|
-
|
38
|
-
You can configure caching so that duplicate requests for the same person are
|
39
|
-
read from the cache rather than directly from the TMDb servers. This helps
|
40
|
-
improve the performance of you application but also prevents it from exceeding
|
41
|
-
the [API request limits][limits] on the TMDb servers.
|
42
|
-
|
43
|
-
[limits]: http://help.themoviedb.org/kb/general/api-request-limits
|
44
|
-
|
45
|
-
```ruby
|
46
|
-
require 'active_support'
|
47
|
-
require 'benchmark'
|
48
|
-
require 'neo-tmdb'
|
49
|
-
|
50
|
-
TMDb.configure do |config|
|
51
|
-
config.api_key = 'my-tmdb-api-key-here'
|
52
|
-
# You should configure your cache to expire entries after an appropriate
|
53
|
-
# period. Note that MemoryStore may not be the best choice for your
|
54
|
-
# application.
|
55
|
-
config.cache = ActiveSupport::Cache::MemoryStore.new
|
56
|
-
end
|
57
|
-
|
58
|
-
# Note in the following how the first request takes considerable longer than
|
59
|
-
# the subsequent cached requests.
|
60
|
-
100.times do |n|
|
61
|
-
Benchmark.benchmark('find ') do |b|
|
62
|
-
b.report(n.to_s) do
|
63
|
-
person = TMDb::Person.find(6384)
|
64
|
-
puts " #{person.name} load #{n}"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
```
|
69
|
-
|
70
|
-
You can use any cache that implements ActiveSupport's `Cache` interface.
|
71
|
-
|
72
|
-
### Documentation
|
73
|
-
|
74
|
-
Further [documentation can be found on rdoc.info][docs].
|
75
|
-
|
76
|
-
[docs]: http://rdoc.info/github/andrewdsmith/neo-tmdb/master/frames
|
77
|
-
|
78
|
-
## Contribute
|
79
|
-
|
80
|
-
* Source hosted on [GitHub][].
|
81
|
-
* Report issues on [GitHub Issues][].
|
82
|
-
* Pull requests are very welcome! Please include spec coverage for every patch
|
83
|
-
and create a topic branch for every separate change you make.
|
84
|
-
|
85
|
-
[GitHub]: https://github.com/andrewdsmith/neo-tmdb
|
86
|
-
[GitHub Issues]: https://github.com/andrewdsmith/neo-tmdb/issues
|
87
|
-
|
88
|
-
## Copyright
|
89
|
-
|
90
|
-
See LICENSE for details.
|
91
|
-
|