sofa 0.1.0

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 (64) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/.yardopts +6 -0
  4. data/LICENSE +20 -0
  5. data/README.md +72 -0
  6. data/Rakefile +76 -0
  7. data/doc/Sofa.html +85 -0
  8. data/doc/Sofa/Mapping.html +168 -0
  9. data/doc/Sofa/Mapping/ClassMethods.html +314 -0
  10. data/doc/Sofa/Mapping/InstanceMethods.html +358 -0
  11. data/doc/Sofa/TVRage.html +85 -0
  12. data/doc/Sofa/TVRage/Episode.html +358 -0
  13. data/doc/Sofa/TVRage/Schedule.html +207 -0
  14. data/doc/Sofa/TVRage/Season.html +236 -0
  15. data/doc/Sofa/TVRage/Show.html +904 -0
  16. data/doc/Sofa/TVRage/Show/ShowNotFound.html +92 -0
  17. data/doc/Sofa/Version.html +100 -0
  18. data/doc/_index.html +206 -0
  19. data/doc/class_list.html +137 -0
  20. data/doc/css/common.css +1 -0
  21. data/doc/css/full_list.css +23 -0
  22. data/doc/css/style.css +261 -0
  23. data/doc/file.README.html +120 -0
  24. data/doc/file_list.html +29 -0
  25. data/doc/index.html +120 -0
  26. data/doc/js/app.js +91 -0
  27. data/doc/js/full_list.js +39 -0
  28. data/doc/js/jquery.js +19 -0
  29. data/doc/method_list.html +192 -0
  30. data/doc/top-level-namespace.html +80 -0
  31. data/lib/sofa.rb +5 -0
  32. data/lib/sofa/mapping.rb +108 -0
  33. data/lib/sofa/tvrage.rb +10 -0
  34. data/lib/sofa/tvrage/episode.rb +39 -0
  35. data/lib/sofa/tvrage/schedule.rb +25 -0
  36. data/lib/sofa/tvrage/season.rb +36 -0
  37. data/lib/sofa/tvrage/show.rb +132 -0
  38. data/lib/sofa/version.rb +8 -0
  39. data/sofa.gemspec +126 -0
  40. data/spec/fixtures/tvrage/cases/castle.xml +228 -0
  41. data/spec/fixtures/tvrage/cases/community.xml +109 -0
  42. data/spec/fixtures/tvrage/cases/live_with_regis_and_kelly.xml +56237 -0
  43. data/spec/fixtures/tvrage/episode_list.xml +1183 -0
  44. data/spec/fixtures/tvrage/episode_list_one_season.xml +17 -0
  45. data/spec/fixtures/tvrage/episode_list_two_episodes.xml +25 -0
  46. data/spec/fixtures/tvrage/full_schedule.xml +4731 -0
  47. data/spec/fixtures/tvrage/full_show_info.xml +1291 -0
  48. data/spec/fixtures/tvrage/quickinfo.html +17 -0
  49. data/spec/fixtures/tvrage/quickinfo_missing.html +1 -0
  50. data/spec/fixtures/tvrage/search.xml +151 -0
  51. data/spec/fixtures/tvrage/show_info.xml +42 -0
  52. data/spec/fixtures/tvrage/show_info_blank.xml +3 -0
  53. data/spec/fixtures/tvrage/single_episode.xml +8 -0
  54. data/spec/sofa/mapping_spec.rb +82 -0
  55. data/spec/sofa/tvrage/cases_spec.rb +29 -0
  56. data/spec/sofa/tvrage/episode_spec.rb +45 -0
  57. data/spec/sofa/tvrage/schedule_spec.rb +17 -0
  58. data/spec/sofa/tvrage/season_spec.rb +61 -0
  59. data/spec/sofa/tvrage/show_spec.rb +162 -0
  60. data/spec/sofa/version_spec.rb +11 -0
  61. data/spec/sofa_spec.rb +5 -0
  62. data/spec/spec.opts +1 -0
  63. data/spec/spec_helper.rb +14 -0
  64. metadata +175 -0
@@ -0,0 +1,17 @@
1
+ <pre>Show ID@6715
2
+ Show Name@The Colbert Report
3
+ Show URL@http://www.tvrage.com/The_Colbert_Report
4
+ Premiered@2005
5
+ Started@Oct/17/2005
6
+ Ended@
7
+ Latest Episode@05x146^Woody Harrelson^Nov/12/2009
8
+ Next Episode@05x147^Paul Goldberger^Nov/16/2009
9
+ RFC3339@2009-11-16T23:30:00-5:00
10
+ GMT+0 NODST@1258428600
11
+ Country@USA
12
+ Status@Returning Series
13
+ Classification@Talk Shows
14
+ Genres@Comedy
15
+ Network@Comedy Central
16
+ Airtime@Monday, Tuesday, Wednesday, Thursday at 11:30 pm
17
+ Runtime@30
@@ -0,0 +1 @@
1
+ No Show Results Were Found For "missing show"
@@ -0,0 +1,151 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Results>
3
+ <show>
4
+ <showid>15614</showid>
5
+ <name>Chuck</name>
6
+ <link>http://www.tvrage.com/Chuck</link>
7
+ <country>US</country>
8
+ <started>2007</started>
9
+ <ended>0</ended>
10
+ <seasons>3</seasons>
11
+ <status>Returning Series</status>
12
+ <classification>Scripted</classification>
13
+ <genres>
14
+ <genre01>Action</genre01>
15
+ <genre02>Comedy</genre02>
16
+ <genre03>Drama</genre03>
17
+ </genres>
18
+ </show>
19
+ <show>
20
+ <showid>11005</showid>
21
+ <name>The ChuckleHounds</name>
22
+ <link>http://www.tvrage.com/shows/id-11005</link>
23
+ <country>UK</country>
24
+ <started>1985</started>
25
+ <ended>1986</ended>
26
+ <seasons>1</seasons>
27
+ <status>Canceled/Ended</status>
28
+ <classification>Variety</classification>
29
+ <genres>
30
+ <genre01>Children</genre01>
31
+ </genres>
32
+ </show>
33
+ <show>
34
+ <showid>10223</showid>
35
+ <name>Chuck Norris: Karate Kommandos</name>
36
+ <link>http://www.tvrage.com/Chuck_Norris-Karate_Kommandos</link>
37
+ <country>US</country>
38
+ <started>1986</started>
39
+ <ended>1986</ended>
40
+ <seasons>1</seasons>
41
+ <status>Canceled/Ended</status>
42
+ <classification>Animation</classification>
43
+ <genres>
44
+ <genre01>Children Cartoons</genre01>
45
+ <genre02>Action</genre02>
46
+ <genre03>Adventure</genre03>
47
+ </genres>
48
+ </show>
49
+ <show>
50
+ <showid>919</showid>
51
+ <name>Chuck Finn</name>
52
+ <link>http://www.tvrage.com/shows/id-919</link>
53
+ <country>AU</country>
54
+ <started>1999</started>
55
+ <ended>2000</ended>
56
+ <seasons>2</seasons>
57
+ <status>Canceled/Ended</status>
58
+ <classification>Scripted</classification>
59
+ <genres>
60
+ <genre01>Adventure</genre01>
61
+ <genre02>Children</genre02>
62
+ <genre03>Fantasy</genre03>
63
+ </genres>
64
+ </show>
65
+ <show>
66
+ <showid>3063</showid>
67
+ <name>Chuck Woolery: Naturally Stoned</name>
68
+ <link>http://www.tvrage.com/shows/id-3063</link>
69
+ <country>US</country>
70
+ <started>2003</started>
71
+ <ended>2003</ended>
72
+ <seasons>1</seasons>
73
+ <status>Canceled/Ended</status>
74
+ <classification>Reality</classification>
75
+ <genres/>
76
+ </show>
77
+ <show>
78
+ <showid>1079</showid>
79
+ <name>The Chuck McCann Show</name>
80
+ <link>http://www.tvrage.com/shows/id-1079</link>
81
+ <country>US</country>
82
+ <started>1963</started>
83
+ <ended>1966</ended>
84
+ <seasons>0</seasons>
85
+ <status>Canceled/Ended</status>
86
+ <classification>0</classification>
87
+ <genres/>
88
+ </show>
89
+ <show>
90
+ <showid>10722</showid>
91
+ <name>Burns Chuckwagon From The Stampede Coral</name>
92
+ <link>http://www.tvrage.com/shows/id-10722</link>
93
+ <country>CA</country>
94
+ <started>1954</started>
95
+ <ended>1955</ended>
96
+ <seasons>0</seasons>
97
+ <status>Canceled/Ended</status>
98
+ <classification>Variety</classification>
99
+ <genres/>
100
+ </show>
101
+ <show>
102
+ <showid>19191</showid>
103
+ <name>The Chuck Barris Rah-Rah Show</name>
104
+ <link>http://www.tvrage.com/shows/id-19191</link>
105
+ <country>US</country>
106
+ <started>1978</started>
107
+ <ended>1978</ended>
108
+ <seasons>1</seasons>
109
+ <status>Canceled/Ended</status>
110
+ <classification>Variety</classification>
111
+ <genres>
112
+ <genre01>Celebrities</genre01>
113
+ <genre02>Comedy</genre02>
114
+ <genre03>Family</genre03>
115
+ <genre04>Music</genre04>
116
+ <genre05>Talent</genre05>
117
+ </genres>
118
+ </show>
119
+ <show>
120
+ <showid>14003</showid>
121
+ <name>Rinjin wa Hisoki Warau</name>
122
+ <link>http://www.tvrage.com/shows/id-14003</link>
123
+ <country>JP</country>
124
+ <started>1999</started>
125
+ <ended>1999</ended>
126
+ <seasons>1</seasons>
127
+ <status>Canceled/Ended</status>
128
+ <classification>Scripted</classification>
129
+ <genres>
130
+ <genre01>Crime</genre01>
131
+ <genre02>Drama</genre02>
132
+ <genre03>Mystery</genre03>
133
+ <genre04>Thriller</genre04>
134
+ </genres>
135
+ </show>
136
+ <show>
137
+ <showid>3062</showid>
138
+ <name>ChuckleVision</name>
139
+ <link>http://www.tvrage.com/shows/id-3062</link>
140
+ <country>UK</country>
141
+ <started>1987</started>
142
+ <ended>2008</ended>
143
+ <seasons>20</seasons>
144
+ <status>Canceled/Ended</status>
145
+ <classification>Scripted</classification>
146
+ <genres>
147
+ <genre01>Children</genre01>
148
+ <genre02>Comedy</genre02>
149
+ </genres>
150
+ </show>
151
+ </Results>
@@ -0,0 +1,42 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Showinfo>
3
+ <showid>2930</showid>
4
+ <showname>Buffy the Vampire Slayer</showname>
5
+ <showlink>http://tvrage.com/Buffy_The_Vampire_Slayer</showlink>
6
+ <seasons>7</seasons>
7
+ <started>1997</started>
8
+ <startdate>Mar/10/1997</startdate>
9
+ <ended>May/20/2003</ended>
10
+ <origin_country>US</origin_country>
11
+ <status>Canceled/Ended</status>
12
+ <classification>Scripted</classification>
13
+ <genres>
14
+ <genre>Action</genre>
15
+ <genre>Adventure</genre>
16
+ <genre>Comedy</genre>
17
+ <genre>Drama</genre>
18
+ <genre>Mystery</genre>
19
+ <genre>Sci-Fi</genre>
20
+ </genres>
21
+ <runtime>60</runtime>
22
+ <network country="US">UPN</network>
23
+ <airtime>20:00</airtime>
24
+ <airday>Tuesday</airday>
25
+ <timezone>GMT-5 -DST</timezone>
26
+ <akas>
27
+ <aka country="SE">Buffy &amp; vampyrerna</aka>
28
+ <aka country="DE">Buffy - Im Bann der Dämonen</aka>
29
+ <aka country="NO">Buffy - Vampyrenes skrekk</aka>
30
+ <aka country="HU">Buffy a vámpírok réme</aka>
31
+ <aka country="FR">Buffy Contre les Vampires</aka>
32
+ <aka country="IT">Buffy l'Ammazza Vampiri</aka>
33
+ <aka country="PL">Buffy postrach wampirów</aka>
34
+ <aka country="BR">Buffy, a Caça-Vampiros</aka>
35
+ <aka country="PT">Buffy, a Caçadora de Vampiros</aka>
36
+ <aka country="ES">Buffy, Cazavampiros</aka>
37
+ <aka country="HR">Buffy, ubojica vampira</aka>
38
+ <aka country="FI">Buffy, vampyyrintappaja</aka>
39
+ <aka country="EE">Vampiiritapja Buffy</aka>
40
+ <aka country="IS">Vampírubaninn Buffy</aka>
41
+ </akas>
42
+ </Showinfo>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Showinfo>
3
+ </Showinfo>
@@ -0,0 +1,8 @@
1
+ <episode>
2
+ <epnum>1</epnum>
3
+ <seasonnum>01</seasonnum>
4
+ <prodnum>4V01</prodnum>
5
+ <airdate>1997-03-10</airdate>
6
+ <link>http://www.tvrage.com/Buffy_The_Vampire_Slayer/episodes/28077</link>
7
+ <title>Welcome to the Hellmouth (1)</title>
8
+ </episode>
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Mapped Object" do
4
+ before do
5
+ class MappedObject
6
+ include Sofa::Mapping
7
+
8
+ maps(:a => nil)
9
+ maps(:B => :b)
10
+ maps(:c => nil) do |c|
11
+ c * 2
12
+ end
13
+ end
14
+ @obj = MappedObject.new
15
+ @value = mock()
16
+ end
17
+
18
+ it "should respond to #a" do
19
+ @obj.should respond_to(:a)
20
+ end
21
+
22
+ it "should respond to #b" do
23
+ @obj.should respond_to(:b)
24
+ end
25
+
26
+ it "should update @a" do
27
+ @obj.update_with_mapping(:a => @value)
28
+ @obj.a.should == @value
29
+ end
30
+
31
+ it "should update @b" do
32
+ @obj.update_with_mapping(:B => @value)
33
+ @obj.b.should == @value
34
+ end
35
+
36
+ it "should update @c" do
37
+ @obj.update_with_mapping(:c => 1)
38
+ @obj.c.should == 2
39
+ end
40
+
41
+ it "should not update @d" do
42
+ @obj.update_with_mapping(:d => @value)
43
+ @obj.instance_variable_get("@").should_not == @value
44
+ end
45
+
46
+ it "should not update keys that don't respond to :to_sym" do
47
+ lambda {
48
+ @obj.update_with_mapping(mock() => @value)
49
+ }.should_not raise_error
50
+ end
51
+
52
+ it "should get attributes as keys and their values as values" do
53
+ a, b = mock, mock
54
+ @obj.update_with_mapping(:a => a, :B => b)
55
+ @obj.attributes.should == {:a => a, :b => b, :c => nil}
56
+ end
57
+
58
+ context "and another Mapped Object" do
59
+ before do
60
+ @other = MappedObject.new
61
+ @obj.update_with_mapping(:a => @value)
62
+ @other.update_with_mapping(:a => @value)
63
+ end
64
+
65
+ it "should be #eql" do
66
+ @obj.should == @other
67
+ end
68
+
69
+ it "should not be #equal" do
70
+ @obj.should_not equal(@other)
71
+ end
72
+
73
+ it "should not be #eql with different params" do
74
+ @other.update_with_mapping(:B => mock())
75
+ @obj.should_not == @other
76
+ end
77
+
78
+ it "should not be #eql to different class" do
79
+ @obj.should_not == mock()
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ if ENV["CASES"]
4
+
5
+ describe "Cases" do
6
+ Dir["spec/fixtures/tvrage/cases/*.xml"].each do |file|
7
+ describe "with #{file}" do
8
+ before do
9
+ @id = "22323"
10
+ @show_xml = File.read(file)
11
+ FakeWeb.register_uri(:get, "http://services.tvrage.com/feeds/full_show_info.php?sid=#{@id}", :body => @show_xml)
12
+ end
13
+
14
+ it "should not raise error" do
15
+ lambda {
16
+ show = Sofa::TVRage::Show.new(@id, :greedy => true)
17
+ show.episode_list.should_not include(nil)
18
+ }.should_not raise_error
19
+ end
20
+
21
+ it "should have name" do
22
+ show = Sofa::TVRage::Show.new(@id, :greedy => true)
23
+ show.name.should_not be_nil
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ module Sofa::TVRage
4
+
5
+ describe Episode do
6
+ before do
7
+ @info = Crack::XML.parse(File.read("spec/fixtures/tvrage/single_episode.xml"))["episode"]
8
+ end
9
+
10
+ subject { Episode.new(@info) }
11
+
12
+ { :num => "1",
13
+ :num_in_season => "01",
14
+ :prod_num => "4V01",
15
+ :air_date => "1997-03-10",
16
+ :link => "http://www.tvrage.com/Buffy_The_Vampire_Slayer/episodes/28077",
17
+ :title => "Welcome to the Hellmouth (1)"
18
+ }.each do |attr, value|
19
+ it "should get ##{attr}" do
20
+ subject.send(attr).should == value
21
+ end
22
+ end
23
+
24
+ it "should have season number" do
25
+ subject.should respond_to(:season_num)
26
+ end
27
+
28
+ it "should be #eql to episode with same attributes" do
29
+ other = Episode.new(@info)
30
+ subject.should == other
31
+ end
32
+
33
+ it "should not be #eql to episode with different attributes" do
34
+ other = Episode.new(@info.merge("epnum" => "4"))
35
+ subject.num.should_not == other.num
36
+ subject.should_not == other
37
+ end
38
+
39
+ it "should not be #equal to episode with same attributes" do
40
+ other = Episode.new(@info)
41
+ subject.should_not equal(other)
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ module Sofa::TVRage
4
+
5
+ describe Schedule do
6
+ before do
7
+ @country = "US"
8
+ @xml = File.read("spec/fixtures/tvrage/full_schedule.xml")
9
+ FakeWeb.register_uri(:get, "http://services.tvrage.com/feeds/fullschedule.php?country=#{@country}", :body => @xml)
10
+ end
11
+
12
+ it "should get full US schedule" do
13
+ Schedule.full(@country).should == Crack::XML.parse(@xml)["schedule"]
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ module Sofa::TVRage
4
+
5
+ describe Season do
6
+ describe "with 1 episode" do
7
+ before do
8
+ @info = Crack::XML.parse(File.read("spec/fixtures/tvrage/episode_list_one_season.xml"))["Show"]["Episodelist"]["Season"]
9
+ @episodes = [Episode.new(@info["episode"])]
10
+ end
11
+
12
+ subject { Season.new(@info) }
13
+
14
+ it "should have #no" do
15
+ subject.no.should == "0"
16
+ end
17
+
18
+ it "should have episode" do
19
+ subject.episodes.should == @episodes
20
+ subject.episodes.size.should == 1
21
+ end
22
+
23
+ it "should be #eql to season with same attributes" do
24
+ other = Season.new(@info)
25
+ subject.should == other
26
+ end
27
+
28
+ it "should not be #eql to season with different attributes" do
29
+ other = Season.new(@info.merge("no" => "23"))
30
+ subject.should_not == other
31
+ end
32
+
33
+ it "should not be #equal to season with same attributes" do
34
+ other = Season.new(@info)
35
+ subject.should_not equal(other)
36
+ end
37
+ end
38
+
39
+ describe "with 2 episodes" do
40
+ before do
41
+ @info = Crack::XML.parse(File.read("spec/fixtures/tvrage/episode_list_two_episodes.xml"))["Show"]["Episodelist"]["Season"]
42
+ @episodes = []
43
+ @info["episode"].each do |episode|
44
+ @episodes << Episode.new(episode)
45
+ end
46
+ end
47
+
48
+ subject { Season.new(@info) }
49
+
50
+ it "should have #no" do
51
+ subject.no.should == "1"
52
+ end
53
+
54
+ it "should have episodes" do
55
+ subject.episodes.should == @episodes
56
+ subject.episodes.size.should == 2
57
+ end
58
+ end
59
+ end
60
+
61
+ end