royw-imdb 0.0.17 → 0.0.19
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/History.txt +90 -0
- data/README +1 -1
- data/Rakefile +96 -0
- data/VERSION.yml +4 -0
- data/lib/imdb/imdb_profile.rb +277 -0
- data/spec/cache_extensions.rb +91 -0
- data/spec/imdb_image_spec.rb +23 -0
- data/spec/imdb_movie_spec.rb +232 -0
- data/spec/imdb_profile_spec.rb +182 -0
- data/spec/imdb_search_spec.rb +191 -0
- data/spec/samples/sample_image.html +409 -0
- data/spec/samples/sample_incomplete_movie.html +588 -0
- data/spec/samples/sample_jet_pilot.html +929 -0
- data/spec/samples/sample_meltdown.html +528 -0
- data/spec/samples/sample_movie.html +1135 -0
- data/spec/samples/sample_open_season.html +524 -0
- data/spec/samples/sample_search.html +446 -0
- data/spec/samples/sample_spanish_search.html +390 -0
- data/spec/samples/sample_who_am_i_search.html +517 -0
- data/spec/samples/www.imdb.com/find?q=Meltdown;s=tt +528 -0
- data/spec/samples/www.imdb.com/find?q=National+Treasure%3A+Book+of+Secrets;s=tt +1036 -0
- data/spec/samples/www.imdb.com/find?q=National+Treasure+2;s=tt +1036 -0
- data/spec/samples/www.imdb.com/find?q=Open+Season;s=tt +524 -0
- data/spec/samples/www.imdb.com/find?q=The+Alamo;s=tt +531 -0
- data/spec/samples/www.imdb.com/find?q=Who+Am+I%3F;s=tt +517 -0
- data/spec/samples/www.imdb.com/find?q=indiana+jones;s=tt +517 -0
- data/spec/samples/www.imdb.com/find?q=some+extremely+specific+search+for+indiana+jones;s=tt +1135 -0
- data/spec/samples/www.imdb.com/rg/action-box-title/primary-photo/media/rm1203608832/tt0097576 +409 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/string_extensions_spec.rb +25 -0
- metadata +53 -37
@@ -0,0 +1,91 @@
|
|
1
|
+
# NOTE extremely ugly and non-DRY. Probably good candidate for meta programming.
|
2
|
+
|
3
|
+
# override the classes' read_page method and replace with one
|
4
|
+
# that will cache pages in spec/samples/{url}
|
5
|
+
|
6
|
+
class ImdbMovie
|
7
|
+
private
|
8
|
+
def read_page(page)
|
9
|
+
html = nil
|
10
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
11
|
+
if File.exist?(filespec)
|
12
|
+
html = open(filespec).read
|
13
|
+
else
|
14
|
+
html = open(page).read
|
15
|
+
cache_html_files(page, html)
|
16
|
+
end
|
17
|
+
html
|
18
|
+
end
|
19
|
+
|
20
|
+
# this is used to save imdb pages so they may be used by rspec
|
21
|
+
def cache_html_files(page, html)
|
22
|
+
begin
|
23
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
24
|
+
unless File.exist?(filespec)
|
25
|
+
puts "caching #{filespec}"
|
26
|
+
File.mkdirs(File.dirname(filespec))
|
27
|
+
File.open(filespec, 'w') { |f| f.puts html }
|
28
|
+
end
|
29
|
+
rescue Exception => eMsg
|
30
|
+
puts eMsg.to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class ImdbSearch
|
36
|
+
private
|
37
|
+
def read_page(page)
|
38
|
+
html = nil
|
39
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
40
|
+
if File.exist?(filespec)
|
41
|
+
html = open(filespec).read
|
42
|
+
else
|
43
|
+
html = open(page).read
|
44
|
+
cache_html_files(page, html)
|
45
|
+
end
|
46
|
+
html
|
47
|
+
end
|
48
|
+
|
49
|
+
# this is used to save imdb pages so they may be used by rspec
|
50
|
+
def cache_html_files(page, html)
|
51
|
+
begin
|
52
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
53
|
+
unless File.exist?(filespec)
|
54
|
+
puts "caching #{filespec}"
|
55
|
+
File.mkdirs(File.dirname(filespec))
|
56
|
+
File.open(filespec, 'w') { |f| f.puts html }
|
57
|
+
end
|
58
|
+
rescue Exception => eMsg
|
59
|
+
puts eMsg.to_s
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class ImdbImage
|
65
|
+
private
|
66
|
+
def read_page(page)
|
67
|
+
html = nil
|
68
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
69
|
+
if File.exist?(filespec)
|
70
|
+
html = open(filespec).read
|
71
|
+
else
|
72
|
+
html = open(page).read
|
73
|
+
cache_html_files(page, html)
|
74
|
+
end
|
75
|
+
html
|
76
|
+
end
|
77
|
+
|
78
|
+
# this is used to save imdb pages so they may be used by rspec
|
79
|
+
def cache_html_files(page, html)
|
80
|
+
begin
|
81
|
+
filespec = page.gsub(/^http:\//, 'spec/samples').gsub(/\/$/, '.html')
|
82
|
+
unless File.exist?(filespec)
|
83
|
+
puts "caching #{filespec}"
|
84
|
+
File.mkdirs(File.dirname(filespec))
|
85
|
+
File.open(filespec, 'w') { |f| f.puts html }
|
86
|
+
end
|
87
|
+
rescue Exception => eMsg
|
88
|
+
puts eMsg.to_s
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe ImdbMovie do
|
4
|
+
|
5
|
+
describe 'Indiana Jones and the Last Crusade' do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@imdb_image = ImdbImage.new("/rg/action-box-title/primary-photo/media/rm1203608832/tt0097576")
|
9
|
+
# @imdb_image.stub!(:open).and_return(open("#{$samples_dir}/sample_image.html"))
|
10
|
+
end
|
11
|
+
|
12
|
+
# it "should query IMDB url" do
|
13
|
+
# @imdb_image.should_receive(:open).with("http://www.imdb.com/rg/action-box-title/primary-photo/media/rm1203608832/tt0097576").and_return(open("#{$samples_dir}/sample_image.html"))
|
14
|
+
# @imdb_image.send(:document)
|
15
|
+
# end
|
16
|
+
|
17
|
+
it "should get the image" do
|
18
|
+
@imdb_image.image.should == "http://ia.media-imdb.com/images/M/MV5BMTkzODA5ODYwOV5BMl5BanBnXkFtZTcwMjAyNDYyMQ@@._V1._SX216_SY316_.jpg"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe ImdbMovie do
|
4
|
+
|
5
|
+
describe 'Jet Pilot' do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@imdb_movie = ImdbMovie.new('0050562')
|
9
|
+
@imdb_movie.stub!(:open).and_return(open("#{$samples_dir}/sample_jet_pilot.html"))
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should query IMDB url" do
|
13
|
+
# @imdb_movie.should_receive(:open).with("http://www.imdb.com/title/tt0050562/").and_return(open("#{$samples_dir}/sample_jet_pilot.html"))
|
14
|
+
@imdb_movie.should_receive(:fetch).with("http://www.imdb.com/title/tt0050562/").and_return(open("#{$samples_dir}/www.imdb.com/title/tt0050562.html"))
|
15
|
+
@imdb_movie.send(:document)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should convert to xml" do
|
19
|
+
xml = @imdb_movie.to_xml
|
20
|
+
xml.should =~ /<year>1957<\/year>/
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should convert to yaml" do
|
24
|
+
yaml = @imdb_movie.to_yaml
|
25
|
+
yaml.should =~ /year: "1957"/
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'Indiana Jones and the Last Crusade' do
|
31
|
+
|
32
|
+
before(:each) do
|
33
|
+
@imdb_movie = ImdbMovie.new('0097576')
|
34
|
+
# @imdb_movie.stub!(:open).and_return(open("#{$samples_dir}/sample_movie.html"))
|
35
|
+
end
|
36
|
+
|
37
|
+
# it "should query IMDB url" do
|
38
|
+
# @imdb_movie.should_receive(:open).with("http://www.imdb.com/title/tt0097576/").and_return(open("#{$samples_dir}/www.imdb.com/title/tt0097576.html"))
|
39
|
+
# @imdb_movie.send(:document)
|
40
|
+
# end
|
41
|
+
|
42
|
+
it "should get the title" do
|
43
|
+
@imdb_movie.title.should == "Indiana Jones and the Last Crusade"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should get director(s)" do
|
47
|
+
@imdb_movie.directors.should include('Steven Spielberg')
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should get the poster url" do
|
51
|
+
@imdb_movie.poster_url.should == "/rg/action-box-title/primary-photo/media/rm1203608832/tt0097576"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return an ImdbImage object" do
|
55
|
+
@imdb_movie.poster.should be_instance_of(ImdbImage)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should get the rating" do
|
59
|
+
@imdb_movie.rating.should == 8.3
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should get cast members" do
|
63
|
+
@imdb_movie.cast_members.should include(['Harrison Ford', 'Indiana Jones'])
|
64
|
+
@imdb_movie.cast_members.should include(['Sean Connery', 'Professor Henry Jones'])
|
65
|
+
@imdb_movie.cast_members.should include(['Denholm Elliott', 'Dr. Marcus Brody'])
|
66
|
+
@imdb_movie.cast_members.should include(['Alison Doody', 'Dr. Elsa Schneider'])
|
67
|
+
@imdb_movie.cast_members.should include(['John Rhys-Davies', 'Sallah'])
|
68
|
+
@imdb_movie.cast_members.should_not include('more')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should get the writers" do
|
72
|
+
@imdb_movie.writers.should include('George Lucas')
|
73
|
+
@imdb_movie.writers.should include('Philip Kaufman')
|
74
|
+
@imdb_movie.writers.should_not include('more')
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should get the year" do
|
78
|
+
@imdb_movie.year.should == "1989"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should get the release date" do
|
82
|
+
@imdb_movie.release_date.should be_an_instance_of(Date)
|
83
|
+
@imdb_movie.release_date.to_s.should == Date.new(1989, 5, 24).to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should get the genres" do
|
87
|
+
@imdb_movie.genres.should have(2).strings
|
88
|
+
@imdb_movie.genres.should include('Action')
|
89
|
+
@imdb_movie.genres.should include('Adventure')
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should get the plot" do
|
93
|
+
@imdb_movie.plot.should == "When Dr. Henry Jones Sr. suddenly goes missing while pursuing the Holy Grail, eminent archaeologist Indiana Jones must follow in his father's footsteps and stop the Nazis."
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should get the length" do
|
97
|
+
@imdb_movie.length.should == '127 min'
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should get the countries" do
|
101
|
+
@imdb_movie.countries.should have(1).string
|
102
|
+
@imdb_movie.countries.should include('USA')
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should get the languages" do
|
106
|
+
@imdb_movie.languages.should have(3).strings
|
107
|
+
@imdb_movie.languages.should include('English')
|
108
|
+
@imdb_movie.languages.should include('German')
|
109
|
+
@imdb_movie.languages.should include('Greek')
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should get the color" do
|
113
|
+
@imdb_movie.color.should == 'Color'
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should get the company" do
|
117
|
+
@imdb_movie.company.should == 'Lucasfilm'
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should get some photos" do
|
121
|
+
@imdb_movie.photos.should have(10).strings
|
122
|
+
@imdb_movie.photos.should include('http://ia.media-imdb.com/images/M/MV5BMTY4MzY3OTY0MF5BMl5BanBnXkFtZTYwODM0OTE3._V1._CR82,0,320,320_SS90_.jpg')
|
123
|
+
@imdb_movie.photos.should include('http://ia.media-imdb.com/images/M/MV5BMjAwNTM4ODc3Nl5BMl5BanBnXkFtZTYwNzU0OTE3._V1._CR82,0,320,320_SS90_.jpg')
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should get the tagline" do
|
127
|
+
@imdb_movie.tagline.should == "He's back in an all new adventure. Memorial Day 1989."
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should get the aspect ratio" do
|
131
|
+
@imdb_movie.aspect_ratio.should == "2.20 : 1"
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should convert to xml" do
|
135
|
+
xml = @imdb_movie.to_xml
|
136
|
+
xml.should =~ /<year>1989<\/year>/
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should convert to yaml" do
|
140
|
+
yaml = @imdb_movie.to_yaml
|
141
|
+
yaml.should =~ /year: "1989"/
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should be able to convert to and then from xml" do
|
145
|
+
hash = nil
|
146
|
+
begin
|
147
|
+
xml = @imdb_movie.to_xml
|
148
|
+
hash = XmlSimple.xml_in(xml)
|
149
|
+
rescue
|
150
|
+
hash = nil
|
151
|
+
end
|
152
|
+
hash.should_not be_nil
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe 'Han robado una estrella' do
|
157
|
+
|
158
|
+
before(:each) do
|
159
|
+
@imdb_movie = ImdbMovie.new('0054961')
|
160
|
+
# @imdb_movie.stub!(:open).and_return(open("#{$samples_dir}/sample_incomplete_movie.html"))
|
161
|
+
end
|
162
|
+
|
163
|
+
# it "should query IMDB url" do
|
164
|
+
# @imdb_movie.should_receive(:open).with("http://www.imdb.com/title/tt0054961/").and_return(open("#{$samples_dir}/sample_incomplete_movie.html"))
|
165
|
+
# @imdb_movie.should_receive(:open).with("http://www.imdb.com/title/tt0054961/").and_return(open("#{$samples_dir}/www.imdb.com/title/tt0054961.html"))
|
166
|
+
# @imdb_movie.send(:document)
|
167
|
+
# end
|
168
|
+
|
169
|
+
it "should get the title" do
|
170
|
+
@imdb_movie.title.should == "Han robado una estrella"
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should get director(s)" do
|
174
|
+
@imdb_movie.directors.should include('Javier Setó')
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should not get the poster" do
|
178
|
+
@imdb_movie.poster.should be_nil
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should get cast members" do
|
182
|
+
@imdb_movie.cast_members.should include(['Rafaela Aparicio', ''])
|
183
|
+
@imdb_movie.cast_members.should include(['Marujita Díaz', ''])
|
184
|
+
@imdb_movie.cast_members.should include(['Espartaco Santoni', ''])
|
185
|
+
@imdb_movie.cast_members.should_not include('more')
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should get the writers" do
|
189
|
+
@imdb_movie.writers.should have(1).string
|
190
|
+
@imdb_movie.writers.should include('Paulino Rodrigo')
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should get the release date" do
|
194
|
+
@imdb_movie.release_date.should be_an_instance_of(Date)
|
195
|
+
@imdb_movie.release_date.should == Date.new(1963, 9, 9)
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should get the genres" do
|
199
|
+
@imdb_movie.genres.should == ['Comedy', 'Musical']
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should not get the plot" do
|
203
|
+
@imdb_movie.plot.should be_nil
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should get the length" do
|
207
|
+
@imdb_movie.length.should == '93 min'
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should get the countries" do
|
211
|
+
@imdb_movie.countries.should == ['Spain']
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should get the languages" do
|
215
|
+
@imdb_movie.languages.should == ['Spanish']
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should not get the color" do
|
219
|
+
@imdb_movie.color.should be_nil
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should get the company" do
|
223
|
+
@imdb_movie.company.should == 'Brepi Films'
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should not get any photos" do
|
227
|
+
@imdb_movie.photos.should be_empty
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
TMPDIR = File.join(File.dirname(__FILE__), '../tmp')
|
6
|
+
|
7
|
+
# Time to add your specs!
|
8
|
+
# http://rspec.info/
|
9
|
+
|
10
|
+
describe "ImdbProfile" do
|
11
|
+
|
12
|
+
before(:all) do
|
13
|
+
File.mkdirs(TMPDIR)
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:each) do
|
17
|
+
Dir.glob(File.join(TMPDIR, "imdb_profile_spec*")).each { |filename| File.delete(filename) }
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should find by imdb_id that is prefixed with a 'tt'" do
|
21
|
+
profile = ImdbProfile.first(:imdb_id => 'tt0465234')
|
22
|
+
profile.should_not == nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should find by imdb_id that is not prefixed with 'tt'" do
|
26
|
+
profile = ImdbProfile.first(:imdb_id => '0465234')
|
27
|
+
profile.should_not == nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should find by single title" do
|
31
|
+
profile = ImdbProfile.first(:titles => ['National Treasure: Book of Secrets'])
|
32
|
+
profile.should_not == nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should find by multiple title" do
|
36
|
+
profile = ImdbProfile.first(:titles => ['National Treasure: Book of Secrets', 'National Treasure 2'])
|
37
|
+
profile.should_not == nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should find by multiple title embedded in arrays" do
|
41
|
+
profile = ImdbProfile.first(:titles => [['National Treasure: Book of Secrets'], 'National Treasure 2'])
|
42
|
+
profile.should_not == nil
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should find by AKA title" do
|
46
|
+
profile = ImdbProfile.first(:titles => ['National Treasure 2'])
|
47
|
+
profile.should_not == nil
|
48
|
+
end
|
49
|
+
|
50
|
+
# We use two versions of "The Alamo" to test for year discrimination
|
51
|
+
# John Wayne's The Alamo produced and released in 1960, IMDB ID => tt0053580
|
52
|
+
# John Lee Hancock's The Alamo produced and released in 2004, IMDB ID => tt0318974
|
53
|
+
|
54
|
+
# test all()
|
55
|
+
it "should find multiple versions of The Alamo" do
|
56
|
+
profiles = ImdbProfile.all(:titles => ['The Alamo'])
|
57
|
+
profiles.length.should > 1
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should find the two versions of The Alamo that we are interested in" do
|
61
|
+
profiles = ImdbProfile.all(:titles => ['The Alamo'])
|
62
|
+
imdb_ids = profiles.collect{|profile| profile.imdb_id}
|
63
|
+
imdb_ids = imdb_ids.select{|ident| ident == 'tt0053580' || ident == 'tt0318974'}
|
64
|
+
imdb_ids.uniq.compact.length.should == 2
|
65
|
+
end
|
66
|
+
|
67
|
+
# find first using title and media year
|
68
|
+
|
69
|
+
it "should find John Wayne's The Alamo by title with media year" do
|
70
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :media_years => [1960])
|
71
|
+
profile.imdb_id.should == 'tt0053580'
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should find John Lee Hancock's The Alamo by title with media year" do
|
75
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :media_years => [2004])
|
76
|
+
profile.imdb_id.should == 'tt0318974'
|
77
|
+
end
|
78
|
+
|
79
|
+
# find first using title and production year
|
80
|
+
|
81
|
+
it "should find John Wayne's The Alamo by title with production year" do
|
82
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [1960])
|
83
|
+
profile.imdb_id.should == 'tt0053580'
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should find John Lee Hancock's The Alamo by title with production year" do
|
87
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [2004])
|
88
|
+
profile.imdb_id.should == 'tt0318974'
|
89
|
+
end
|
90
|
+
|
91
|
+
# find first using title and released year
|
92
|
+
|
93
|
+
it "should find John Wayne's The Alamo by title with released year" do
|
94
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1960])
|
95
|
+
profile.imdb_id.should == 'tt0053580'
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should find John Lee Hancock's The Alamo by title with released year" do
|
99
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [2004])
|
100
|
+
profile.imdb_id.should == 'tt0318974'
|
101
|
+
end
|
102
|
+
|
103
|
+
# here we test fuzzy year matching (plus or minus a year)
|
104
|
+
# fuzzy years are only supported for production and released years, not media years
|
105
|
+
|
106
|
+
it "should not find John Wayne's The Alamo by title with the media year off by a year" do
|
107
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :media_years => [1959])
|
108
|
+
profile2 = ImdbProfile.first(:titles => ['The Alamo'], :media_years => [1961])
|
109
|
+
(profile1.should be_nil) && (profile2.should be_nil)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should find John Wayne's The Alamo by title with the production year off by a year" do
|
113
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [1959])
|
114
|
+
profile2 = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [1961])
|
115
|
+
(profile1.imdb_id.should == 'tt0053580') && (profile2.imdb_id.should == 'tt0053580')
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should find John Wayne's The Alamo by title with the released year off by a year" do
|
119
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1959])
|
120
|
+
profile2 = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1961])
|
121
|
+
(profile1.imdb_id.should == 'tt0053580') && (profile2.imdb_id.should == 'tt0053580')
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should not find John Wayne's The Alamo by title with the production year off by two years" do
|
125
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [1958])
|
126
|
+
profile2 = ImdbProfile.first(:titles => ['The Alamo'], :production_years => [1962])
|
127
|
+
(profile1.should be_nil) && (profile2.should be_nil)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should not find John Wayne's The Alamo by title with the released year off by two years" do
|
131
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1958])
|
132
|
+
profile2 = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1962])
|
133
|
+
(profile1.should be_nil) && (profile2.should be_nil)
|
134
|
+
end
|
135
|
+
|
136
|
+
# let's make sure the generated xml from to_xml() is valid
|
137
|
+
|
138
|
+
it "should be able to convert to xml and then from xml" do
|
139
|
+
hash = nil
|
140
|
+
begin
|
141
|
+
profile = ImdbProfile.first(:imdb_id => 'tt0465234')
|
142
|
+
xml = profile.to_xml
|
143
|
+
hash = XmlSimple.xml_in(xml)
|
144
|
+
rescue
|
145
|
+
hash = nil
|
146
|
+
end
|
147
|
+
hash.should_not be_nil
|
148
|
+
end
|
149
|
+
|
150
|
+
# now let's test caching the profile to/from a file
|
151
|
+
|
152
|
+
it "should not create a file if a :filespec option is passed that is nil" do
|
153
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1960], :filespec => nil)
|
154
|
+
Dir.glob(File.join(TMPDIR, "imdb_profile_spec*")).empty?.should be_true
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should create a file if a :filespec option is passed" do
|
158
|
+
filespec = get_temp_filename
|
159
|
+
profile = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1960], :filespec => filespec)
|
160
|
+
(File.exist?(filespec) && (File.size(filespec) > 0)).should be_true
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should load from a file if a :filespec option is passed and the file exists" do
|
164
|
+
filespec = get_temp_filename
|
165
|
+
profile1 = ImdbProfile.first(:titles => ['The Alamo'], :released_years => [1960], :filespec => filespec)
|
166
|
+
profile2 = ImdbProfile.first(:filespec => filespec)
|
167
|
+
profile1.imdb_id.should == profile2.imdb_id
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should not load from a file if a :filespec option is passed and the file does not exists" do
|
171
|
+
filespec = get_temp_filename
|
172
|
+
profile = ImdbProfile.first(:filespec => filespec)
|
173
|
+
profile.should be_nil
|
174
|
+
end
|
175
|
+
|
176
|
+
def get_temp_filename
|
177
|
+
outfile = Tempfile.new('imdb_profile_spec', TMPDIR)
|
178
|
+
filespec = outfile.path
|
179
|
+
outfile.unlink
|
180
|
+
filespec
|
181
|
+
end
|
182
|
+
end
|