neo-tmdb 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.markdown CHANGED
@@ -4,6 +4,12 @@
4
4
 
5
5
  Nothing yet.
6
6
 
7
+ ## 0.3.0 (2012-06-25)
8
+
9
+ New features:
10
+
11
+ * Caching support through `Configuration#cache`.
12
+
7
13
  ## 0.2.0 (2012-06-15)
8
14
 
9
15
  New features:
data/README.markdown CHANGED
@@ -1,6 +1,7 @@
1
1
  # Neo TMDb
2
2
 
3
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.
4
5
 
5
6
  [api]: http://help.themoviedb.org/kb/api/about-3
6
7
 
@@ -32,6 +33,44 @@ people.each do |person|
32
33
  end
33
34
  ```
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
+
35
74
  Further [documentation can be found on rdoc.info][docs].
36
75
 
37
76
  [docs]: http://rdoc.info/github/andrewdsmith/neo-tmdb/master/frames
data/lib/neo-tmdb.rb CHANGED
@@ -3,4 +3,5 @@ require 'faraday'
3
3
 
4
4
  require 'tmdb'
5
5
  require 'tmdb/configuration'
6
+ require 'tmdb/null_cache'
6
7
  require 'tmdb/person'
data/lib/tmdb.rb CHANGED
@@ -17,14 +17,16 @@ module TMDb
17
17
  # called directly by client code, instead you should call methods such as
18
18
  # +Person.find+ that return TMDb wrapper objects.
19
19
  def get_api_response(path, params = {})
20
- connection = Faraday.new(:url => 'http://api.themoviedb.org/3/') do |builder|
21
- builder.request :url_encoded
22
- builder.adapter :net_http
20
+ configuration.cache.fetch([path, params]) do
21
+ connection = Faraday.new(:url => 'http://api.themoviedb.org/3/') do |builder|
22
+ builder.request :url_encoded
23
+ builder.adapter :net_http
24
+ end
25
+ response = connection.get(
26
+ path,
27
+ params.merge({ :api_key => TMDb.configuration.api_key })
28
+ )
29
+ JSON.parse(response.body)
23
30
  end
24
- response = connection.get(
25
- path,
26
- params.merge({ :api_key => TMDb.configuration.api_key })
27
- )
28
- JSON.parse(response.body)
29
31
  end
30
32
  end
@@ -1,6 +1,10 @@
1
1
  module TMDb
2
2
  class Configuration
3
- attr_accessor :api_key
3
+ attr_accessor :api_key, :cache
4
+
5
+ def initialize
6
+ @cache = NullCache.new
7
+ end
4
8
 
5
9
  # Returns the base URL for use in constructing image URLs.
6
10
  def image_base_url
@@ -0,0 +1,17 @@
1
+ module TMDb
2
+
3
+ # Looks like a cache but doesn't perform any caching. This helps us avoid
4
+ # checking for whether a cache is configured or not, as per the Null Object
5
+ # pattern: http://en.wikipedia.org/wiki/Null_Object_pattern.
6
+ #
7
+ class NullCache
8
+
9
+ # Returns the value of the yielded block. Assumes that a block is passed;
10
+ # ActiveSupport::Cache::Store#fetch allows for no block but we don't use
11
+ # this internally. Ignores +cache_key+ because no caching is performed.
12
+ #
13
+ def fetch(cache_key)
14
+ yield
15
+ end
16
+ end
17
+ end
data/lib/tmdb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TMDb
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
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.2.0
4
+ version: 0.3.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-06-15 00:00:00.000000000 Z
12
+ date: 2012-06-25 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: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.2'
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: '3.2'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: rspec
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +99,7 @@ extra_rdoc_files: []
83
99
  files:
84
100
  - lib/tmdb.rb
85
101
  - lib/tmdb/configuration.rb
102
+ - lib/tmdb/null_cache.rb
86
103
  - lib/tmdb/person.rb
87
104
  - lib/tmdb/attributes.rb
88
105
  - lib/tmdb/version.rb