tvdbr 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Gemfile.lock +13 -10
- data/README.md +20 -3
- data/examples/demo.rb +15 -15
- data/examples/demo2.rb +28 -0
- data/lib/tvdbr.rb +1 -0
- data/lib/tvdbr/client.rb +46 -8
- data/lib/tvdbr/data_set.rb +1 -1
- data/lib/tvdbr/retryable.rb +36 -0
- data/lib/tvdbr/version.rb +1 -1
- data/tvdbr.gemspec +1 -1
- metadata +64 -75
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,19 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tvdbr (0.0
|
5
|
-
activesupport
|
4
|
+
tvdbr (0.1.0)
|
6
5
|
hashie
|
7
|
-
httparty
|
6
|
+
httparty (>= 0.8.0)
|
8
7
|
|
9
8
|
GEM
|
10
9
|
remote: http://rubygems.org/
|
11
10
|
specs:
|
12
|
-
activesupport (3.0.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
activesupport (3.0.0)
|
12
|
+
hashie (1.2.0)
|
13
|
+
httparty (0.8.1)
|
14
|
+
multi_json (~> 1.0)
|
15
|
+
multi_xml
|
16
|
+
i18n (0.6.1)
|
17
|
+
multi_json (1.3.6)
|
18
|
+
multi_xml (0.5.1)
|
19
|
+
nokogiri (1.5.5)
|
17
20
|
rake (0.8.7)
|
18
21
|
|
19
22
|
PLATFORMS
|
@@ -21,7 +24,7 @@ PLATFORMS
|
|
21
24
|
|
22
25
|
DEPENDENCIES
|
23
26
|
activesupport
|
24
|
-
|
25
|
-
|
27
|
+
i18n
|
28
|
+
nokogiri
|
26
29
|
rake
|
27
30
|
tvdbr!
|
data/README.md
CHANGED
@@ -8,7 +8,8 @@ Yes, there are a lot of libraries out there for this. I needed a few things that
|
|
8
8
|
* An easy way to get all updates since a certain time, to keep our database synced
|
9
9
|
* Easy helpers for accessing episodes from a series and the objects conceptually mapped to our existing schema.
|
10
10
|
|
11
|
-
Please reference the [TVDB APIs](http://thetvdb.com/wiki/index.php?title=Programmers_API) to
|
11
|
+
Please reference the [TVDB APIs](http://thetvdb.com/wiki/index.php?title=Programmers_API) to
|
12
|
+
become familiar with the available actions and properties.
|
12
13
|
|
13
14
|
## Installation
|
14
15
|
|
@@ -24,10 +25,18 @@ Get a series based on the id:
|
|
24
25
|
|
25
26
|
series = tvdb.find_series_by_id('1234')
|
26
27
|
|
28
|
+
Get a series based on a remote (IMDB) id:
|
29
|
+
|
30
|
+
series = tvdb.find_series_by_remote_id('tt0290978')
|
31
|
+
|
27
32
|
Get an episode based on the id:
|
28
33
|
|
29
34
|
episode = tvdb.find_episode_by_id('5678')
|
30
35
|
|
36
|
+
Get an episode based on the seriesid and airdate:
|
37
|
+
|
38
|
+
episode = tvdb.find_episode_by_airdate(80348, '2007-09-24')
|
39
|
+
|
31
40
|
Fetch a series based on the title:
|
32
41
|
|
33
42
|
dexter = tvdb.fetch_series_from_data(:title => "Dexter")
|
@@ -48,8 +57,8 @@ Get the episodes for a series:
|
|
48
57
|
Get the updated series since a given timestamp:
|
49
58
|
|
50
59
|
tvdb.each_updated_series(:since => 1.day.ago) do |series|
|
51
|
-
|
52
|
-
|
60
|
+
puts "#{series.id} - #{series.title}"
|
61
|
+
end
|
53
62
|
|
54
63
|
Get the updated episodes since a given timestamp:
|
55
64
|
|
@@ -57,6 +66,14 @@ Get the updated episodes since a given timestamp:
|
|
57
66
|
puts "#{episode.id} - #{episode.name} - #{episode.seriesid}"
|
58
67
|
end
|
59
68
|
|
69
|
+
You can also query using the newer static updates, by providing a 'period':
|
70
|
+
|
71
|
+
tvdb.each_updated_episode(:period => :day) do |episode|
|
72
|
+
puts "#{episode.id} - #{episode.name} - #{episode.seriesid}"
|
73
|
+
end
|
74
|
+
|
75
|
+
You can provide `day`, `week`, or `month` to get complete data for that range of time.
|
76
|
+
|
60
77
|
## Known Issues
|
61
78
|
|
62
79
|
* None so far, but the gem is very young.
|
data/examples/demo.rb
CHANGED
@@ -2,16 +2,16 @@ require 'rubygems'
|
|
2
2
|
require 'tvdbr'
|
3
3
|
require 'active_support/all'
|
4
4
|
|
5
|
-
tvdb = Tvdbr::Client.new('
|
5
|
+
tvdb = Tvdbr::Client.new('5FEC454623154441')
|
6
6
|
|
7
7
|
# Fetch series based on title and starring
|
8
8
|
series_wrong = tvdb.fetch_series_from_data(:title => "Dexter",
|
9
|
-
:starring => "Adewale Akinnuoye-Agbaje, Sam Anderson, Naveen Andrews, L. Scott Caldwell, Nestor Carbonell,
|
9
|
+
:starring => "Adewale Akinnuoye-Agbaje, Sam Anderson, Naveen Andrews, L. Scott Caldwell, Nestor Carbonell, Francois Chau, Henry Ian Cusick, Jeremy Davies, Emilie de Ravin, Michael Emerson, Jeff Fahey, Fionnula Flanagan, Matthew Fox, Jorge Garcia, Maggie Grace, Josh Holloway, Malcolm David Kelley, Daniel Dae Kim, Yunjin Kim, Ken Leung, Evangeline Lilly, Rebecca Mader, Elizabeth Mitchell, Dominic Monaghan, Terry O'Quinn, Harold Perrineau, Zuleikha Robinson, Michelle Rodriguez, Kiele Sanchez,Rodrigo Santoro, Ian Somerhalder, John Terry, Sonya Walger, Cynthia Watros")
|
10
10
|
puts "Wrong Match: #{series_wrong.inspect}"
|
11
11
|
|
12
12
|
# Fetch series based on title and starring
|
13
13
|
series_right = tvdb.fetch_series_from_data(:title => "Lost",
|
14
|
-
:starring => "Adewale Akinnuoye-Agbaje, Sam Anderson, Naveen Andrews, L. Scott Caldwell, Nestor Carbonell,
|
14
|
+
:starring => "Adewale Akinnuoye-Agbaje, Sam Anderson, Naveen Andrews, L. Scott Caldwell, Nestor Carbonell, Francois Chau, Henry Ian Cusick, Jeremy Davies, Emilie de Ravin, Michael Emerson, Jeff Fahey, Fionnula Flanagan, Matthew Fox, Jorge Garcia, Maggie Grace, Josh Holloway, Malcolm David Kelley, Daniel Dae Kim, Yunjin Kim, Ken Leung, Evangeline Lilly, Rebecca Mader, Elizabeth Mitchell, Dominic Monaghan, Terry O'Quinn, Harold Perrineau, Zuleikha Robinson, Michelle Rodriguez, Kiele Sanchez,Rodrigo Santoro, Ian Somerhalder, John Terry, Sonya Walger, Cynthia Watros")
|
15
15
|
puts "Right Match: #{series_right.inspect}"
|
16
16
|
|
17
17
|
puts "\n\n"
|
@@ -28,16 +28,16 @@ series.episodes.each do |e|
|
|
28
28
|
puts e.name + " (S#{e.season_num}E#{e.episode_num})"
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
# Fetch series updates since given timestamp
|
32
|
+
time = 10.minutes.ago
|
33
|
+
results = tvdb.find_updates_since(time)
|
34
|
+
puts "\n\nUpdated series since 10 mins ago: #{results[:series].size} series\n\n"
|
35
|
+
tvdb.each_updated_series(:since => time) do |series|
|
36
|
+
puts "#{series.id} - #{series.title}"
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
# Fetch episode udpates since given timestamp
|
40
|
+
puts "\nUpdated episodes since 10 mins ago: #{results[:episodes].size} episodes\n\n"
|
41
|
+
tvdb.each_updated_episode(:since => time) do |episode|
|
42
|
+
puts "#{episode.id} - #{episode.name} - #{episode.seriesid}"
|
43
|
+
end
|
data/examples/demo2.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'tvdbr'
|
3
|
+
require 'active_support/all'
|
4
|
+
|
5
|
+
# Updated APIs circa 10/05/2012
|
6
|
+
tvdb = Tvdbr::Client.new('5FEC454623154441')
|
7
|
+
|
8
|
+
# Find episode with airdate
|
9
|
+
episode = tvdb.find_episode_by_airdate(80348, '2007-09-24')
|
10
|
+
puts episode.inspect
|
11
|
+
|
12
|
+
# Find with remote id
|
13
|
+
series = tvdb.find_series_by_remote_id('tt0290978')
|
14
|
+
puts series.inspect
|
15
|
+
|
16
|
+
# Fetch using static updates instead of since
|
17
|
+
# Fetch series updates since given timestamp
|
18
|
+
results = tvdb.find_static_updates(:day)
|
19
|
+
puts "\n\nUpdated series today: #{results[:series].size} series\n\n"
|
20
|
+
tvdb.each_updated_series(:period => :day) do |series|
|
21
|
+
puts "#{series.id} - #{series.title}"
|
22
|
+
end
|
23
|
+
|
24
|
+
# Fetch episode udpates since given timestamp
|
25
|
+
puts "\nUpdated episodes since 10 mins ago: #{results[:episodes].size} episodes\n\n"
|
26
|
+
tvdb.each_updated_episode(:period => :day) do |episode|
|
27
|
+
puts "#{episode.id} - #{episode.name} - #{episode.seriesid}"
|
28
|
+
end
|
data/lib/tvdbr.rb
CHANGED
data/lib/tvdbr/client.rb
CHANGED
@@ -6,6 +6,8 @@ module Tvdbr
|
|
6
6
|
format :xml
|
7
7
|
base_uri "http://www.thetvdb.com/api/"
|
8
8
|
|
9
|
+
attr_reader :api_key
|
10
|
+
|
9
11
|
# Creates an instance of the TVDB interface
|
10
12
|
# Tvdb.new('some_key')
|
11
13
|
def initialize(api_key)
|
@@ -26,8 +28,9 @@ module Tvdbr
|
|
26
28
|
|
27
29
|
# Yields the block for every updated series
|
28
30
|
# tvdb.each_updated_series(:since => 1.day.ago) { |s| Media.find_by_tvdb_id(s.id).title = s.title }
|
31
|
+
# tvdb.each_updated_series(:period => :day) { |s| Media.find_by_tvdb_id(s.id).title = s.title }
|
29
32
|
def each_updated_series(options={}, &block)
|
30
|
-
updates =
|
33
|
+
updates = options[:since] ? find_updates_since(options[:since]) : find_static_updates(options[:period])
|
31
34
|
updates[:series].each do |series_id|
|
32
35
|
series = self.find_series_by_id(series_id)
|
33
36
|
block.call(series) if series && series.title
|
@@ -36,8 +39,9 @@ module Tvdbr
|
|
36
39
|
|
37
40
|
# Yields the block for every updated episode
|
38
41
|
# tvdb.each_updated_episode(:since => 1.day.ago) { |s| Episode.find_by_tvdb_id(s.id).title = s.title }
|
42
|
+
# tvdb.each_updated_episode(:period => :day) { |s| Episode.find_by_tvdb_id(s.id).title = s.title }
|
39
43
|
def each_updated_episode(options={}, &block)
|
40
|
-
updates =
|
44
|
+
updates = options[:since] ? find_updates_since(options[:since]) : find_static_updates(options[:period])
|
41
45
|
updates[:episodes].each do |episode_id|
|
42
46
|
episode = self.find_episode_by_id(episode_id)
|
43
47
|
block.call(episode) if episode && episode.name
|
@@ -52,7 +56,7 @@ module Tvdbr
|
|
52
56
|
return [] if result.blank? || result['Series'].blank?
|
53
57
|
result = result['Series'].is_a?(Array) ? result['Series'] : [result['Series']]
|
54
58
|
result.first(5).map { |s| self.find_series_by_id(s['seriesid']) }
|
55
|
-
rescue
|
59
|
+
rescue MultiXml::ParseError => e
|
56
60
|
puts "Result for title '#{title}' could not be parsed!"
|
57
61
|
return []
|
58
62
|
end
|
@@ -90,6 +94,25 @@ module Tvdbr
|
|
90
94
|
Episode.new(self, result["Episode"])
|
91
95
|
end
|
92
96
|
|
97
|
+
# Returns an Episode data by airdate
|
98
|
+
# tvdb.find_episode_by_airdate(80348, '2007-09-24')
|
99
|
+
def find_episode_by_airdate(series_id, airdate)
|
100
|
+
base_url = "/GetEpisodeByAirDate.php"
|
101
|
+
query_params = { :apikey => @api_key, :seriesid => series_id, :airdate => airdate }
|
102
|
+
result = self.class.get(base_url, :query => query_params)['Data']
|
103
|
+
return nil unless result && result['Episode']
|
104
|
+
Episode.new(self, result['Episode'])
|
105
|
+
end
|
106
|
+
|
107
|
+
# Returns series data for a given series by specified remote id
|
108
|
+
# tvdb.find_series_by_remote_id('tt0290978', 'imdbid')
|
109
|
+
def find_series_by_remote_id(remote_id, remote_source="imdbid")
|
110
|
+
remote_base_url = "/GetSeriesByRemoteID.php"
|
111
|
+
result = self.class.get(remote_base_url, :query => { remote_source => remote_id })['Data']
|
112
|
+
return nil unless result && result['Series']
|
113
|
+
Series.new(self, result['Series'])
|
114
|
+
end
|
115
|
+
|
93
116
|
# Returns the list of TVDB mirror_urls
|
94
117
|
# => ["http://thetvdb.com", ...]
|
95
118
|
def mirror_urls
|
@@ -107,7 +130,20 @@ module Tvdbr
|
|
107
130
|
def find_updates_since(time)
|
108
131
|
stamp = time.to_i # Get timestamp
|
109
132
|
result = self.class.get("/Updates.php?type=all&time=#{stamp}")['Items']
|
110
|
-
{ :series => result['Series'],
|
133
|
+
{ :series => result['Series'],
|
134
|
+
:episodes => result['Episode'],
|
135
|
+
:time => result['Time'] }
|
136
|
+
end
|
137
|
+
|
138
|
+
# Returns static updates for the given period
|
139
|
+
# find_static_updates(:day) # :week or :month
|
140
|
+
# { :series => [1,2,3], :episodes => [1,2,3], :time => '<stamp>' }
|
141
|
+
def find_static_updates(period)
|
142
|
+
update_url = "/updates/updates_#{period}.xml"
|
143
|
+
result = self.get_with_key(update_url)['Data']
|
144
|
+
{ :series => result['Series'].map { |u| u["id"] },
|
145
|
+
:episodes => result['Episode'].map { |u| u["id"] },
|
146
|
+
:time => result['time'] }
|
111
147
|
end
|
112
148
|
|
113
149
|
protected
|
@@ -117,8 +153,10 @@ module Tvdbr
|
|
117
153
|
def get_with_key(*args)
|
118
154
|
args[0] = "/#{@api_key}/" + args[0]
|
119
155
|
begin
|
120
|
-
|
121
|
-
|
156
|
+
Tvdbr::Retryable.retry(:on => MultiXml::ParseError) do
|
157
|
+
self.class.get(*args).parsed_response
|
158
|
+
end
|
159
|
+
rescue Tvdbr::RetryableError => e
|
122
160
|
{ 'Data' => nil }
|
123
161
|
end
|
124
162
|
end
|
@@ -126,8 +164,8 @@ module Tvdbr
|
|
126
164
|
# Checks if the api key works by retrieving mirrors
|
127
165
|
def check_api_key!
|
128
166
|
self.mirror_urls
|
129
|
-
rescue
|
130
|
-
raise "Please check your TVDB API Key!"
|
167
|
+
rescue Exception => e
|
168
|
+
raise "Please check your TVDB API Key, '#{self.api_key}' seems invalid!"
|
131
169
|
end
|
132
170
|
end
|
133
171
|
end
|
data/lib/tvdbr/data_set.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Tvdbr
|
2
|
+
class RetryableError < StandardError; end
|
3
|
+
class Retryable
|
4
|
+
# Code originally by Chu Yeow, see
|
5
|
+
# http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
|
6
|
+
# Slightly rewritten to allow for passing of more than just type of exception.
|
7
|
+
# retryable(:tries => 5, :on => Timeout::Error) do
|
8
|
+
# open('http://example.com/flaky_api')
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# Tvdbr::Retryable.retry(:on => :timeout) { open('http://someplace.com/somefile.xml') }
|
12
|
+
# Tvdbr::Retryable.retry(:on => MultiXml::ParseError) { parse("some/xml") }
|
13
|
+
#
|
14
|
+
def self.retry( options = {}, &block )
|
15
|
+
opts = { :tries => 3, :on => Exception, :ignore => RetryableError, :log => false, :reraise => true }.merge(options)
|
16
|
+
return nil if opts[:tries] == 0
|
17
|
+
retry_exception, ignore_exception, tries = [ opts[:on] ].flatten, [ opts[:ignore] ].flatten, opts[:tries]
|
18
|
+
|
19
|
+
begin
|
20
|
+
return yield
|
21
|
+
rescue *retry_exception => e
|
22
|
+
puts "Error occurred - #{$!.class}: #{$!.message} [#{$!}], retrying..." if opts[:log]
|
23
|
+
if (tries -= 1) > 0 # more tries
|
24
|
+
retry
|
25
|
+
elsif opts[:reraise] # failed too many times, raise
|
26
|
+
raise RetryableError.new("#{e.to_s}: #{e.message} -- #{e.inspect}")
|
27
|
+
end
|
28
|
+
rescue *ignore_exception
|
29
|
+
puts "Ignored occurred - #{$!.class}: #{$!.message} [#{$!}], Ignoring..." if opts[:log]
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
|
33
|
+
yield
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/tvdbr/version.rb
CHANGED
data/tvdbr.gemspec
CHANGED
metadata
CHANGED
@@ -1,76 +1,73 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: tvdbr
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 0.1.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Miso
|
14
9
|
- Nathan Esquenazi
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-10-05 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
23
16
|
name: hashie
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
26
18
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
34
23
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: httparty
|
38
24
|
prerelease: false
|
39
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
26
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: httparty
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 0.8.0
|
48
39
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rake
|
52
40
|
prerelease: false
|
53
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
42
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.8.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
62
55
|
type: :development
|
63
|
-
|
64
|
-
|
65
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
description: Utilize the TVDB API from Ruby to fetch shows, track updates to the tvdb
|
64
|
+
and sync your media database
|
65
|
+
email:
|
66
66
|
- nesquena@gmail.com
|
67
67
|
executables: []
|
68
|
-
|
69
68
|
extensions: []
|
70
|
-
|
71
69
|
extra_rdoc_files: []
|
72
|
-
|
73
|
-
files:
|
70
|
+
files:
|
74
71
|
- .gitignore
|
75
72
|
- Gemfile
|
76
73
|
- Gemfile.lock
|
@@ -78,47 +75,39 @@ files:
|
|
78
75
|
- README.md
|
79
76
|
- Rakefile
|
80
77
|
- examples/demo.rb
|
78
|
+
- examples/demo2.rb
|
81
79
|
- lib/tvdbr.rb
|
82
80
|
- lib/tvdbr/client.rb
|
83
81
|
- lib/tvdbr/data_set.rb
|
84
82
|
- lib/tvdbr/episode.rb
|
83
|
+
- lib/tvdbr/retryable.rb
|
85
84
|
- lib/tvdbr/series.rb
|
86
85
|
- lib/tvdbr/version.rb
|
87
86
|
- spec/.gitkeep
|
88
87
|
- tvdbr.gemspec
|
89
|
-
has_rdoc: true
|
90
88
|
homepage: https://github.com/bazaarlabs/tvdbr
|
91
89
|
licenses: []
|
92
|
-
|
93
90
|
post_install_message:
|
94
91
|
rdoc_options: []
|
95
|
-
|
96
|
-
require_paths:
|
92
|
+
require_paths:
|
97
93
|
- lib
|
98
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
95
|
none: false
|
100
|
-
requirements:
|
101
|
-
- -
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
|
104
|
-
|
105
|
-
- 0
|
106
|
-
version: "0"
|
107
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
101
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
|
113
|
-
segments:
|
114
|
-
- 0
|
115
|
-
version: "0"
|
102
|
+
requirements:
|
103
|
+
- - ! '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
116
106
|
requirements: []
|
117
|
-
|
118
107
|
rubyforge_project: tvdbr
|
119
|
-
rubygems_version: 1.
|
108
|
+
rubygems_version: 1.8.24
|
120
109
|
signing_key:
|
121
110
|
specification_version: 3
|
122
111
|
summary: Use the TVDB API from Ruby
|
123
|
-
test_files:
|
112
|
+
test_files:
|
124
113
|
- spec/.gitkeep
|