thetvdb_mapper 0.0.1

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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +41 -0
  7. data/Rakefile +1 -0
  8. data/lib/thetvdb_mapper/actors.rb +13 -0
  9. data/lib/thetvdb_mapper/banners.rb +13 -0
  10. data/lib/thetvdb_mapper/base.rb +11 -0
  11. data/lib/thetvdb_mapper/episode.rb +9 -0
  12. data/lib/thetvdb_mapper/fetcher.rb +25 -0
  13. data/lib/thetvdb_mapper/full_series.rb +37 -0
  14. data/lib/thetvdb_mapper/mapping/actor.rb +11 -0
  15. data/lib/thetvdb_mapper/mapping/banner.rb +17 -0
  16. data/lib/thetvdb_mapper/mapping/base.rb +17 -0
  17. data/lib/thetvdb_mapper/mapping/episode.rb +45 -0
  18. data/lib/thetvdb_mapper/mapping/series.rb +36 -0
  19. data/lib/thetvdb_mapper/mapping/string_list.rb +5 -0
  20. data/lib/thetvdb_mapper/series.rb +9 -0
  21. data/lib/thetvdb_mapper/version.rb +3 -0
  22. data/lib/thetvdb_mapper.rb +18 -0
  23. data/spec/functionals/mapping/actor_spec.rb +31 -0
  24. data/spec/functionals/mapping/banner_spec.rb +56 -0
  25. data/spec/functionals/mapping/episode_spec.rb +135 -0
  26. data/spec/functionals/mapping/series_spec.rb +105 -0
  27. data/spec/integrations/classes/actors_spec.rb +11 -0
  28. data/spec/integrations/classes/banners_spec.rb +11 -0
  29. data/spec/integrations/classes/episode_spec.rb +11 -0
  30. data/spec/integrations/classes/fetcher_spec.rb +35 -0
  31. data/spec/integrations/classes/full_series_spec.rb +11 -0
  32. data/spec/integrations/classes/series_spec.rb +11 -0
  33. data/spec/integrations/integration_spec_helper.rb +2 -0
  34. data/spec/integrations/support/.keep +0 -0
  35. data/spec/spec_helper.rb +10 -0
  36. data/spec/units/actors_spec.rb +33 -0
  37. data/spec/units/banners_spec.rb +33 -0
  38. data/spec/units/base_spec.rb +15 -0
  39. data/spec/units/episode_spec.rb +26 -0
  40. data/spec/units/fetcher_spec.rb +67 -0
  41. data/spec/units/full_series_spec.rb +109 -0
  42. data/spec/units/mapping/actor_spec.rb +27 -0
  43. data/spec/units/mapping/banner_spec.rb +51 -0
  44. data/spec/units/mapping/base_spec.rb +29 -0
  45. data/spec/units/mapping/episode_spec.rb +141 -0
  46. data/spec/units/mapping/series_spec.rb +113 -0
  47. data/spec/units/mapping/string_list_spec.rb +11 -0
  48. data/spec/units/series_spec.rb +26 -0
  49. data/thetvdb_mapper.gemspec +27 -0
  50. metadata +188 -0
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Mapping::Series do
4
+ let(:klass) { ThetvdbMapper::Mapping::Series }
5
+
6
+ describe '#map' do
7
+ it 'should return specific keys' do
8
+ klass.map({}).keys.sort.should == [:id, :airs_day_of_week, :airs_time, :content_rating, :first_aired, :genres,
9
+ :imdb_id, :language, :network, :network_id, :overview, :rating, :rating_count, :runtime, :name, :status,
10
+ :added_at, :added_by, :banner_path, :fanart_path, :last_updated_at, :poster_path, :zap2it_id].sort
11
+ end
12
+
13
+ it 'should map id' do
14
+ klass.map('id' => 1234)[:id].should == 1234
15
+ end
16
+
17
+ it 'should map Airs_DayOfWeek' do
18
+ klass.map('Airs_DayOfWeek' => 'Monday')[:airs_day_of_week].should == 'Monday'
19
+ end
20
+
21
+ it 'should map Airs_Time' do
22
+ klass.map('Airs_Time' => '8:00 AM')[:airs_time].should == '8:00 AM'
23
+ end
24
+
25
+ it 'should map ContentRating' do
26
+ klass.map('ContentRating' => 'TV-PG')[:content_rating].should == 'TV-PG'
27
+ end
28
+
29
+ it 'should map FirstAired' do
30
+ klass.map('FirstAired' => '1997-07-01')[:first_aired].should == '1997-07-01'
31
+ end
32
+
33
+ it 'should map genre' do
34
+ klass.map('genre' => '|comedy|')[:genres].should == ['comedy']
35
+ end
36
+
37
+ it 'should map IMDB_ID' do
38
+ klass.map('IMDB_ID' => 'tt0118480')[:imdb_id].should == 'tt0118480'
39
+ end
40
+
41
+ it 'should map Language' do
42
+ klass.map('Language' => 'en')[:language].should == 'en'
43
+ end
44
+
45
+ it 'should map Network' do
46
+ klass.map('Network' => 'SciFi')[:network].should == 'SciFi'
47
+ end
48
+
49
+ it 'should map NetworkID' do
50
+ klass.map('NetworkID' => '1')[:network_id].should == '1'
51
+ end
52
+
53
+ it 'should map Overview' do
54
+ klass.map('Overview' => 'example overview')[:overview].should == 'example overview'
55
+ end
56
+
57
+ it 'should map Rating' do
58
+ klass.map('Rating' => '1.0')[:rating].should == '1.0'
59
+ end
60
+
61
+ it 'should map RatingCount' do
62
+ klass.map('RatingCount' => '1')[:rating_count].should == '1'
63
+ end
64
+
65
+ it 'should map Runtime' do
66
+ klass.map('Runtime' => '45')[:runtime].should == '45'
67
+ end
68
+
69
+ it 'should map SeriesName' do
70
+ klass.map('SeriesName' => 'Stargate SG-1')[:name].should == 'Stargate SG-1'
71
+ end
72
+
73
+ it 'should map Status' do
74
+ klass.map('Status' => 'Ended')[:status].should == 'Ended'
75
+ end
76
+
77
+ it 'should map added' do
78
+ klass.map('added' => '1')[:added_at].should == '1'
79
+ end
80
+
81
+ it 'should map added_by' do
82
+ klass.map('added_by' => '1')[:added_by].should == '1'
83
+ end
84
+
85
+ it 'should map banner' do
86
+ klass.map('banner' => 'PATH')[:banner_path].should == 'PATH'
87
+ end
88
+
89
+ it 'should map fanart' do
90
+ klass.map('fanart' => 'PATH')[:fanart_path].should == 'PATH'
91
+ end
92
+
93
+ it 'should map lastupdated' do
94
+ klass.map('lastupdated' => '1234')[:last_updated_at].should == Time.at(1234)
95
+ end
96
+
97
+ it 'should map poster' do
98
+ klass.map('poster' => 'PATH')[:poster_path].should == 'PATH'
99
+ end
100
+
101
+ it 'should map zap2it_id' do
102
+ klass.map('zap2it_id' => '1234')[:zap2it_id].should == '1234'
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,11 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::Actors do
4
+ let(:model) { ThetvdbMapper::Actors.new(80348) }
5
+
6
+ describe '.data' do
7
+ it 'should return array' do
8
+ model.data.class.should == Array
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::Banners do
4
+ let(:model) { ThetvdbMapper::Banners.new(80348) }
5
+
6
+ describe '.data' do
7
+ it 'should return array' do
8
+ model.data.class.should == Array
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::Episode do
4
+ let(:model) { ThetvdbMapper::Episode.new(332179) }
5
+
6
+ describe '.data' do
7
+ it 'should return array' do
8
+ model.data.class.should == Hash
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::Fetcher do
4
+ let(:model) { ThetvdbMapper::Fetcher.new }
5
+
6
+ describe '.series' do
7
+ it 'should return hash' do
8
+ model.series(80348).body.class.should == Hash
9
+ end
10
+ end
11
+
12
+ describe '.full_series' do
13
+ it 'should return hash' do
14
+ model.full_series(80348).body.class.should == Hash
15
+ end
16
+ end
17
+
18
+ describe '.actors' do
19
+ it 'should return array' do
20
+ model.actors(80348).body.class.should == Array
21
+ end
22
+ end
23
+
24
+ describe '.banners' do
25
+ it 'should return array' do
26
+ model.banners(80348).body.class.should == Array
27
+ end
28
+ end
29
+
30
+ describe '.episode' do
31
+ it 'should return hash' do
32
+ model.episode(332179).body.class.should == Hash
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::FullSeries do
4
+ let(:model) { ThetvdbMapper::FullSeries.new(80348) }
5
+
6
+ describe '.data' do
7
+ it 'should return array' do
8
+ model.data.class.should == Hash
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'integrations/integration_spec_helper'
2
+
3
+ describe ThetvdbMapper::Series do
4
+ let(:model) { ThetvdbMapper::Series.new(80348) }
5
+
6
+ describe '.data' do
7
+ it 'should return array' do
8
+ model.data.class.should == Hash
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'spec_helper'
2
+ require 'integrations/support/thetvdb_api'
File without changes
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'coveralls'
4
+ Coveralls.wear!
5
+
6
+ require 'thetvdb_api'
7
+ require 'thetvdb_mapper'
8
+
9
+ RSpec.configure do |config|
10
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Actors do
4
+ let(:model) { ThetvdbMapper::Actors.new(1) }
5
+
6
+ describe '.data' do
7
+ before do
8
+ model.stub_chain(:fetcher, :actors, :body).and_return([{}])
9
+ end
10
+
11
+ it 'should call map' do
12
+ model.should_receive(:map)
13
+ model.data
14
+ end
15
+ end
16
+
17
+ describe '.map' do
18
+ it 'should call map on mapping class' do
19
+ ThetvdbMapper::Mapping::Actor.should_receive(:map).with(sample: true)
20
+ model.map(sample: true)
21
+ end
22
+ end
23
+
24
+ describe '.inspect' do
25
+ before do
26
+ model.stub(:data).and_return('DATA')
27
+ end
28
+
29
+ it 'should return correct string' do
30
+ model.inspect.should == '<ThetvdbMapper::Actors data=DATA >'
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Banners do
4
+ let(:model) { ThetvdbMapper::Banners.new(1) }
5
+
6
+ describe '.data' do
7
+ before do
8
+ model.stub_chain(:fetcher, :banners, :body).and_return([{}])
9
+ end
10
+
11
+ it 'should call map' do
12
+ model.should_receive(:map)
13
+ model.data
14
+ end
15
+ end
16
+
17
+ describe '.map' do
18
+ it 'should call map on mapping class' do
19
+ ThetvdbMapper::Mapping::Banner.should_receive(:map).with(sample: true)
20
+ model.map(sample: true)
21
+ end
22
+ end
23
+
24
+ describe '.inspect' do
25
+ before do
26
+ model.stub(:data).and_return('DATA')
27
+ end
28
+
29
+ it 'should return correct string' do
30
+ model.inspect.should == '<ThetvdbMapper::Banners data=DATA >'
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ class ExampleClass < ThetvdbMapper::Base
4
+ end
5
+
6
+ describe ThetvdbMapper::Base do
7
+ let(:model) { ExampleClass.new(1) }
8
+
9
+ describe '.fetcher' do
10
+ it 'should call map' do
11
+ ThetvdbMapper::Fetcher.should_receive(:new)
12
+ model.fetcher
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Episode do
4
+ let(:model) { ThetvdbMapper::Episode.new(1) }
5
+
6
+ describe '.data' do
7
+ before do
8
+ model.stub_chain(:fetcher, :episode, :body).and_return(sample: true)
9
+ end
10
+
11
+ it 'should call map on mapping class' do
12
+ ThetvdbMapper::Mapping::Episode.should_receive(:map).with(sample: true)
13
+ model.data
14
+ end
15
+ end
16
+
17
+ describe '.inspect' do
18
+ before do
19
+ model.stub(:data).and_return('DATA')
20
+ end
21
+
22
+ it 'should return correct string' do
23
+ model.inspect.should == '<ThetvdbMapper::Episode data=DATA >'
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Fetcher do
4
+ let(:model) { ThetvdbMapper::Fetcher.new }
5
+
6
+ describe '.series' do
7
+ before do
8
+ model.stub_chain(:client, :series).and_return(double(find: true))
9
+ end
10
+
11
+ it 'should call series find' do
12
+ model.client.series.should_receive(:find).with(1, mapping: true)
13
+ model.series(1)
14
+ end
15
+ end
16
+
17
+ describe '.full_series' do
18
+ before do
19
+ model.stub_chain(:client, :series).and_return(double(find_full: true))
20
+ end
21
+
22
+ it 'should call series find_full' do
23
+ model.client.series.should_receive(:find_full).with(1, mapping: true)
24
+ model.full_series(1)
25
+ end
26
+ end
27
+
28
+ describe '.actors' do
29
+ before do
30
+ model.stub_chain(:client, :actor).and_return(double(find: true))
31
+ end
32
+
33
+ it 'should call actor all' do
34
+ model.client.actor.should_receive(:find).with(1, mapping: true)
35
+ model.actors(1)
36
+ end
37
+ end
38
+
39
+ describe '.banners' do
40
+ before do
41
+ model.stub_chain(:client, :banner).and_return(double(find: true))
42
+ end
43
+
44
+ it 'should call banner all' do
45
+ model.client.banner.should_receive(:find).with(1, mapping: true)
46
+ model.banners(1)
47
+ end
48
+ end
49
+
50
+ describe '.episode' do
51
+ before do
52
+ model.stub_chain(:client, :episode).and_return(double(find: true))
53
+ end
54
+
55
+ it 'should call episode find_by_default_order' do
56
+ model.client.episode.should_receive(:find).with(1, mapping: true)
57
+ model.episode(1)
58
+ end
59
+ end
60
+
61
+ describe '.client' do
62
+ it 'should create ThetvdbApi::Client instance' do
63
+ ThetvdbApi::Client.should_receive(:new)
64
+ model.client
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::FullSeries do
4
+ let(:model) { ThetvdbMapper::FullSeries.new(1) }
5
+
6
+ describe '.data' do
7
+ before do
8
+ model.stub(:series).and_return({})
9
+ model.stub(:episodes).and_return([])
10
+ model.stub(:actors).and_return([])
11
+ model.stub(:banners).and_return([])
12
+ end
13
+
14
+ it 'should call series' do
15
+ model.stub(:series).and_return(sample: true)
16
+ model.data[:sample].should be_true
17
+ end
18
+
19
+ it 'should store episodes in data hash' do
20
+ model.stub(:episodes).and_return([{ sample: true }])
21
+ model.data[:episodes].should == [{ sample: true }]
22
+ end
23
+
24
+ it 'should store actors in data hash' do
25
+ model.stub(:actors).and_return([{ sample: true }])
26
+ model.data[:actors].should == [{ sample: true }]
27
+ end
28
+
29
+ it 'should store banners in data hash' do
30
+ model.stub(:banners).and_return([{ sample: true }])
31
+ model.data[:banners].should == [{ sample: true }]
32
+ end
33
+ end
34
+
35
+ describe '.series' do
36
+ before do
37
+ model.stub_chain(:fetcher, :full_series, :body).and_return({ 'Series' => { sample: true } })
38
+ end
39
+
40
+ it 'should map series' do
41
+ ThetvdbMapper::Mapping::Series.should_receive(:map).with(sample: true)
42
+ model.series
43
+ end
44
+ end
45
+
46
+ describe '.episodes' do
47
+ before do
48
+ model.stub_chain(:fetcher, :full_series, :body).and_return({ 'Episode' => [{ sample: true }] })
49
+ end
50
+
51
+ it 'should map episode' do
52
+ model.should_receive(:map_episode).with(sample: true)
53
+ model.episodes
54
+ end
55
+ end
56
+
57
+ describe '.map_episode' do
58
+ it 'should map episode' do
59
+ ThetvdbMapper::Mapping::Episode.should_receive(:map).with(sample: true)
60
+ model.map_episode(sample: true)
61
+ end
62
+ end
63
+
64
+ describe '.actors' do
65
+ before do
66
+ model.stub_chain(:fetcher, :actors, :body).and_return([{ sample: true }])
67
+ end
68
+
69
+ it 'should map actor' do
70
+ model.should_receive(:map_actor).with(sample: true)
71
+ model.actors
72
+ end
73
+ end
74
+
75
+ describe '.map_actor' do
76
+ it 'should map actor' do
77
+ ThetvdbMapper::Mapping::Actor.should_receive(:map).with(sample: true)
78
+ model.map_actor(sample: true)
79
+ end
80
+ end
81
+
82
+ describe '.banners' do
83
+ before do
84
+ model.stub_chain(:fetcher, :banners, :body).and_return([{ sample: true }])
85
+ end
86
+
87
+ it 'should map banner' do
88
+ model.should_receive(:map_banner).with(sample: true)
89
+ model.banners
90
+ end
91
+ end
92
+
93
+ describe '.map_banner' do
94
+ it 'should map banner' do
95
+ ThetvdbMapper::Mapping::Banner.should_receive(:map).with(sample: true)
96
+ model.map_banner(sample: true)
97
+ end
98
+ end
99
+
100
+ describe '.inspect' do
101
+ before do
102
+ model.stub(:data).and_return('DATA')
103
+ end
104
+
105
+ it 'should return correct string' do
106
+ model.inspect.should == '<ThetvdbMapper::FullSeries data=DATA >'
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Mapping::Actor do
4
+ let(:klass) { ThetvdbMapper::Mapping::Actor }
5
+
6
+ describe '#rules' do
7
+ it 'should map id' do
8
+ klass.rules['id'].should == :id
9
+ end
10
+
11
+ it 'should map Image' do
12
+ klass.rules['Image'].should == :image_path
13
+ end
14
+
15
+ it 'should map Name' do
16
+ klass.rules['Name'].should == :name
17
+ end
18
+
19
+ it 'should map Role' do
20
+ klass.rules['Role'].should == :role
21
+ end
22
+
23
+ it 'should map SortOrder' do
24
+ klass.rules['SortOrder'].should == :sort_order
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThetvdbMapper::Mapping::Banner do
4
+ let(:klass) { ThetvdbMapper::Mapping::Banner }
5
+
6
+ describe '#rules' do
7
+ it 'should map BannerPath' do
8
+ klass.rules['BannerPath'].should == :path
9
+ end
10
+
11
+ it 'should map ThumbnailPath' do
12
+ klass.rules['ThumbnailPath'].should == :thumbnail_path
13
+ end
14
+
15
+ it 'should map VignettePath' do
16
+ klass.rules['VignettePath'].should == :vignette_path
17
+ end
18
+
19
+ it 'should map BannerType' do
20
+ klass.rules['BannerType'].should == :type
21
+ end
22
+
23
+ it 'should map BannerType2' do
24
+ klass.rules['BannerType2'].should == :type2
25
+ end
26
+
27
+ it 'should map Language' do
28
+ klass.rules['Language'].should == :language
29
+ end
30
+
31
+ it 'should map Season' do
32
+ klass.rules['Season'].should == :season
33
+ end
34
+
35
+ it 'should map Rating' do
36
+ klass.rules['Rating'].should == :rating
37
+ end
38
+
39
+ it 'should map RatingCount' do
40
+ klass.rules['RatingCount'].should == :rating_count
41
+ end
42
+
43
+ it 'should map SeriesName' do
44
+ klass.rules['SeriesName'].should == :series_name
45
+ end
46
+
47
+ it 'should map Colors' do
48
+ klass.rules['Colors'].should == :colors
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,29 @@
1
+ class MappingExample < ThetvdbMapper::Mapping::Base
2
+ end
3
+
4
+ describe ThetvdbMapper::Mapping::Banner do
5
+ let(:klass) { MappingExample }
6
+
7
+ describe '#map' do
8
+ before do
9
+ klass.stub(:rules).and_return(sample: :example)
10
+ end
11
+
12
+ it 'should convert hash' do
13
+ klass.map(sample: 'test').should == { example: 'test' }
14
+ end
15
+
16
+ it 'should call convert method if exists' do
17
+ klass.stub(:respond_to?).with(:convert).and_return(true)
18
+ klass.should_receive(:convert)
19
+ klass.map(sample: 'test')
20
+ end
21
+ end
22
+
23
+ describe '#convert_to_list' do
24
+ it 'should return correct hash' do
25
+ ThetvdbMapper::Mapping::StringList.should_receive(:map).with('test')
26
+ klass.convert_to_list('test')
27
+ end
28
+ end
29
+ end