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 CHANGED
@@ -1,4 +1,8 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'i18n'
4
+ gem 'activesupport'
5
+ gem 'nokogiri'
6
+
3
7
  # Specify your gem's dependencies in tvdbr.gemspec
4
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,19 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tvdbr (0.0.1)
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.3)
13
- crack (0.1.8)
14
- hashie (0.4.0)
15
- httparty (0.6.1)
16
- crack (= 0.1.8)
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
- hashie
25
- httparty
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 become familiar with the available actions and properties.
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
- puts "#{series.id} - #{series.title}"
52
- end
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('YOUR_API_KEY')
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, François 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")
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, François 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")
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
- # 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
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
- # 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
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
@@ -1,4 +1,5 @@
1
1
  module Tvdbr
2
+ autoload :Retryable, 'tvdbr/retryable'
2
3
  autoload :Client, 'tvdbr/client'
3
4
  autoload :DataSet, 'tvdbr/data_set'
4
5
  autoload :Series, 'tvdbr/series'
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 = self.find_updates_since(options[:since])
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 = self.find_updates_since(options[:since])
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 StandardError => e
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'], :episodes => result['Episode'], :time => result['Time'] }
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
- self.class.get(*args)
121
- rescue Exception => e
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
@@ -1,4 +1,4 @@
1
- require 'Hashie' unless defined?(Hashie)
1
+ require 'hashie' unless defined?(Hashie)
2
2
 
3
3
  module Tvdbr
4
4
  class DataSet < Hashie::Mash
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Tvdbr
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/tvdbr.gemspec CHANGED
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  s.add_dependency "hashie"
21
- s.add_dependency "httparty"
21
+ s.add_dependency "httparty", '>= 0.8.0'
22
22
  s.add_development_dependency "rake"
23
23
  end
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
- hash: 27
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
- date: 2011-12-30 00:00:00 -08:00
20
- default_executable:
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
- prerelease: false
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
- hash: 3
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
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
40
26
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
54
42
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
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
- version_requirements: *id003
64
- description: Utilize the TVDB API from Ruby to fetch shows, track updates to the tvdb and sync your media database
65
- email:
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
- hash: 3
104
- segments:
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
- hash: 3
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.6.2
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