the_tvdb 0.0.1 → 0.0.2
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/README.md +8 -2
- data/lib/generators/templates/the_tvdb.rb +3 -0
- data/lib/generators/the_tvdb/install_generator.rb +14 -0
- data/lib/the_tvdb/configuration.rb +8 -6
- data/lib/the_tvdb/episode.rb +9 -1
- data/lib/the_tvdb/gateway.rb +12 -10
- data/lib/the_tvdb/show.rb +10 -6
- data/lib/the_tvdb/version.rb +1 -1
- data/lib/the_tvdb.rb +25 -0
- data/spec/fixtures/tvdb_cassettes/episodes.yml +2 -2
- data/spec/fixtures/tvdb_cassettes/gateway.yml +1445 -0
- data/spec/fixtures/tvdb_cassettes/shows.yml +380 -1
- data/spec/lib/the_tvdb/episode_spec.rb +2 -2
- data/spec/lib/the_tvdb/gateway_spec.rb +33 -0
- data/spec/lib/the_tvdb/show_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -0
- data/the_tvdb.gemspec +1 -4
- metadata +10 -3
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# TheTvdb
|
2
2
|
|
3
|
-
Ruby wrapper for TheTVDB.com
|
3
|
+
Ruby wrapper for [TheTVDB.com](http://thetvdb.com/).
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,9 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
If you are using this in a Rails project, create the initializer:
|
22
|
+
|
23
|
+
rails generate the_tvdb:install
|
22
24
|
|
23
25
|
## Contributing
|
24
26
|
|
@@ -27,3 +29,7 @@ Instructions coming soon!
|
|
27
29
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
30
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
31
|
5. Create new Pull Request
|
32
|
+
|
33
|
+
## License
|
34
|
+
|
35
|
+
This gem is released under the [MIT License](http://www.opensource.org/licenses/MIT). Copyright 2012 freego. http://freegoweb.it
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module TheTvdb
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path("../../templates", __FILE__)
|
5
|
+
|
6
|
+
desc "Creates a TheTvdb initializer and copy locale files to your application."
|
7
|
+
|
8
|
+
def copy_initializer
|
9
|
+
template "the_tvdb.rb", "config/initializers/the_tvdb.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module TheTvdb
|
2
|
-
|
3
|
-
def self.config
|
4
|
-
@config ||= Configuration.new
|
5
|
-
end
|
6
|
-
|
7
2
|
class Configuration
|
8
|
-
|
3
|
+
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
attr_accessor :api_key
|
7
|
+
def initialize
|
8
|
+
@api_key = ENV['TVDBKEY']
|
9
|
+
end
|
10
|
+
|
9
11
|
def dump_path
|
10
12
|
@dump_path ||= default_path
|
11
13
|
FileUtils.mkdir_p("#{@dump_path}/zipfiles") if !File.directory?("#{@dump_path}/zipfiles")
|
data/lib/the_tvdb/episode.rb
CHANGED
@@ -9,7 +9,7 @@ module TheTvdb
|
|
9
9
|
@season_number = info['Combined_season'].to_i
|
10
10
|
@name = info['EpisodeName']
|
11
11
|
@number = info['EpisodeNumber'].to_i
|
12
|
-
@aired_at =
|
12
|
+
@aired_at = info['FirstAired']
|
13
13
|
@description = info['Overview']
|
14
14
|
end
|
15
15
|
|
@@ -17,6 +17,14 @@ module TheTvdb
|
|
17
17
|
info = TheTvdb.gateway.get_episode_details(remote_id)
|
18
18
|
self.new(info)
|
19
19
|
end
|
20
|
+
|
21
|
+
def to_hash
|
22
|
+
{
|
23
|
+
remote_id: @remote_id, name: @name, description: @description,
|
24
|
+
season_remote_id: @season_remote_id, season_number: @season_number,
|
25
|
+
number: @number, aired_at: @aired_at
|
26
|
+
}
|
27
|
+
end
|
20
28
|
|
21
29
|
end
|
22
30
|
end
|
data/lib/the_tvdb/gateway.rb
CHANGED
@@ -5,15 +5,12 @@ require 'zip/zip'
|
|
5
5
|
require 'active_support/core_ext'
|
6
6
|
|
7
7
|
module TheTvdb
|
8
|
-
|
9
|
-
def self.gateway
|
10
|
-
@gateway ||= Gateway.new
|
11
|
-
end
|
12
|
-
|
13
8
|
class Gateway
|
14
9
|
|
10
|
+
include Singleton
|
11
|
+
|
15
12
|
def config
|
16
|
-
TheTvdb.
|
13
|
+
TheTvdb.configuration
|
17
14
|
end
|
18
15
|
|
19
16
|
def zip_path
|
@@ -28,8 +25,8 @@ module TheTvdb
|
|
28
25
|
|
29
26
|
# TODO: setup a reliable env system for apikey
|
30
27
|
def initialize(api_key = nil)
|
31
|
-
@api_key = api_key
|
32
|
-
raise 'No API key was provided. Please set one as environment variable (e.g.: `export TVDBKEY=1234567898765432`).' if !@api_key
|
28
|
+
@api_key = config.api_key
|
29
|
+
raise 'No API key was provided. Please set one as TheTvdb::Configuration.apikey or as an environment variable (e.g.: `export TVDBKEY=1234567898765432`).' if !@api_key
|
33
30
|
@mirror = get_mirror
|
34
31
|
end
|
35
32
|
|
@@ -48,8 +45,13 @@ module TheTvdb
|
|
48
45
|
"#{hash['mirrorpath']}/api/#{@api_key}"
|
49
46
|
end
|
50
47
|
|
51
|
-
def
|
52
|
-
xml_to_hash "#{endpoint}/Updates.php?
|
48
|
+
def update(time)
|
49
|
+
hash = xml_to_hash "#{endpoint}/Updates.php?time=#{time || last_updated}", 'Items'
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_accessor :last_updated
|
53
|
+
def time
|
54
|
+
@last_updated = xml_to_hash "#{endpoint}/Updates.php?type=none", 'Time'
|
53
55
|
end
|
54
56
|
|
55
57
|
def get_series(name)
|
data/lib/the_tvdb/show.rb
CHANGED
@@ -8,19 +8,23 @@ module TheTvdb
|
|
8
8
|
shows.map {|s| self.new(s) }
|
9
9
|
end
|
10
10
|
|
11
|
+
def self.find(remote_id)
|
12
|
+
info = TheTvdb.gateway.get_series_package(remote_id)
|
13
|
+
show = self.new(info['Series'])
|
14
|
+
show.episodes = info['Episode'].map {|e| TheTvdb::Episode.new(e) }
|
15
|
+
show
|
16
|
+
end
|
17
|
+
|
11
18
|
def initialize(info)
|
12
|
-
@remote_id = info['
|
19
|
+
@remote_id = info['id'].to_i
|
13
20
|
@name = info['SeriesName']
|
14
21
|
@banner = info['banner']
|
15
22
|
@description = info['Overview']
|
16
23
|
#@aired_at = info['FirstAired']
|
17
24
|
end
|
18
25
|
|
19
|
-
def
|
20
|
-
|
21
|
-
show = self.new(info['Series'])
|
22
|
-
show.episodes = info['Episode'].map {|e| TheTvdb::Episode.new(e) }
|
23
|
-
show
|
26
|
+
def to_hash
|
27
|
+
{ remote_id: @remote_id, name: @name, banner: @banner, description: @description }
|
24
28
|
end
|
25
29
|
|
26
30
|
end
|
data/lib/the_tvdb/version.rb
CHANGED
data/lib/the_tvdb.rb
CHANGED
@@ -5,5 +5,30 @@ require "the_tvdb/show"
|
|
5
5
|
require "the_tvdb/episode"
|
6
6
|
|
7
7
|
module TheTvdb
|
8
|
+
|
9
|
+
def self.setup
|
10
|
+
yield self.configuration
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.configuration
|
14
|
+
@config ||= Configuration.instance
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.gateway
|
18
|
+
@gateway ||= Gateway.instance
|
19
|
+
end
|
20
|
+
|
21
|
+
# Starting from the last update recorded on the gateway, a hash with the new
|
22
|
+
# update time and the updated shows are returned
|
23
|
+
#
|
24
|
+
# @param [Integer] timestamp the last update timestamp (if not provided the last_updated attribute of the gateway is used instead)
|
25
|
+
# @return [Hash] the new last_updated time and the Shows that have been updated
|
26
|
+
def self.update(time = nil)
|
27
|
+
update_hash = gateway.update(time)
|
28
|
+
result = { time: update_hash['Time'].to_i }
|
29
|
+
result[:shows] = update_hash['Series'].map {|show_remote_id| Show.find(show_remote_id) }
|
30
|
+
gateway.last_updated = result[:time]
|
31
|
+
result
|
32
|
+
end
|
8
33
|
|
9
34
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: http://www.thetvdb.com/api/
|
5
|
+
uri: http://www.thetvdb.com/api/1234567898765432/mirrors.xml
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -48,7 +48,7 @@ http_interactions:
|
|
48
48
|
recorded_at: Thu, 20 Dec 2012 10:48:57 GMT
|
49
49
|
- request:
|
50
50
|
method: get
|
51
|
-
uri: http://thetvdb.com/api/
|
51
|
+
uri: http://thetvdb.com/api/1234567898765432/episodes/4245778/en.xml
|
52
52
|
body:
|
53
53
|
encoding: US-ASCII
|
54
54
|
string: ''
|