netflix4r 0.0.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.
@@ -0,0 +1,67 @@
1
+ require File.join( File.dirname(__FILE__), 'test.rb')
2
+
3
+ class FormatBuilderTest < Test::Unit::TestCase
4
+
5
+ def test_that_current_formats_are_parsed_from_full_catalog
6
+ data = title_with_formats
7
+ formats = FormatBuilder.from_movie(data)
8
+ assert_included formats, 'current_format'
9
+ assert_included formats, 'no_availability_format'
10
+ assert_not_included formats, 'future_format'
11
+ end
12
+
13
+ def test_that_format_links_are_followed
14
+
15
+ NetFlix::Request.expects(:new).with(:url => 'http://api.netflix.com/catalog/titles/movies/60031755/format_availability').returns(stub_everything(:send => '<xml/>'))
16
+
17
+ FormatBuilder.from_movie( title_with_link_to_formats )
18
+ end
19
+
20
+ def test_that_cast_list_contains_current_formats
21
+ formats = FormatBuilder.from_xml(delivery_format_list)
22
+ assert_included formats, 'current_format'
23
+ end
24
+
25
+ def test_that_format_list_does_not_contain_future_formats
26
+ formats = FormatBuilder.from_xml(delivery_format_list)
27
+ assert_not_included formats, 'future_format'
28
+ end
29
+
30
+ def delivery_format_list
31
+ %|<delivery_formats>
32
+ <availability available_from="#{(Time.now - 2.days).to_i}">
33
+ <category scheme="http://api.netflix.com/categories/title_formats" label="current_format" term="current_format"></category>
34
+ </availability>
35
+ <availability available_from="#{(Time.now + 2.days).to_i}">
36
+ <category scheme="http://api.netflix.com/categories/title_formats" label="future_format" term="future_format"></category>
37
+ </availability>
38
+ </delivery_formats
39
+ |
40
+ end
41
+
42
+ def title_with_link_to_formats
43
+ xml = '<catalog_title><link href="http://api.netflix.com/catalog/titles/movies/60031755/format_availability" rel="http://schemas.netflix.com/catalog/titles/format_availability" title="formats"></link></catalog_title>'
44
+ Nokogiri.XML(xml).search('//catalog_title')
45
+ end
46
+
47
+ def title_with_formats
48
+
49
+ xml = %|<title_index_item>
50
+ <delivery_formats>
51
+ <availability available_from="#{(Time.now + 2.days).to_i}">
52
+ <category
53
+ label="future_format" term="future_format"></category>
54
+ </availability>
55
+ <availability available_from="#{(Time.now - 2.days).to_i}">
56
+ <category scheme="http://api.netflix.com/categories/title_formats" label="current_format" term="current_format"></category>
57
+ </availability>
58
+ <availability>
59
+ <category scheme="http://api.netflix.com/categories/title_formats" label="no_availability_format" term="no_availability_format"></category>
60
+ </availability>
61
+ </delivery_formats>
62
+ </title_index_item>
63
+ |
64
+
65
+ Nokogiri.XML(xml).search('//title_index_item')
66
+ end
67
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'flix4r'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,32 @@
1
+ require File.join( File.dirname(__FILE__), 'test.rb')
2
+
3
+ class NetflixTest < Test::Unit::TestCase
4
+
5
+ def test_that_http_method_is_validated
6
+ assert_equal false, NetFlix::Request.new(:http_method => 'Thing').valid?
7
+ end
8
+
9
+ def test_that_http_method_knows_valid_values
10
+ assert_equal true, NetFlix::Request.new(:http_method => 'POST').valid?
11
+ assert_equal true, NetFlix::Request.new(:http_method => 'GET').valid?
12
+ end
13
+
14
+ def test_that_parameters_appear_alphabetically_in_parameter_string
15
+ assert_equal 'key_a=value1&key_b=value2', NetFlix::Request.new(:parameters => {'key_b' => 'value2', 'key_a' => 'value1'}).parameter_string
16
+ end
17
+
18
+ def test_that_authenticator_receives_copy_of_request
19
+ request = NetFlix::Request.new(:parameters => {'key1' => '2'})
20
+ NetFlix::Authenticator.expects(:new).with(has_entry(:request, request)).returns(stub_everything)
21
+ Net::HTTP.stubs(:get)
22
+
23
+ request.send
24
+ end
25
+
26
+ def test_that_request_is_logged_when_sent
27
+ request = NetFlix::Request.new(:url => 'some_url', :parameters => {'logme' => 'please'})
28
+ NetFlix.expects(:log).with('some_url?logme=please')
29
+ request.log
30
+ end
31
+
32
+ end
data/test/test.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ test_dir = File.dirname(__FILE__)
5
+
6
+ require File.join(test_dir, 'test_helpers.rb')
7
+ require File.join(test_dir, '..', 'flix4r.rb')
8
+ require 'mocha'
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestFlix4r < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module Test::Unit::Assertions
2
+
3
+ def assert_included(items, needle, custom_message = nil)
4
+ raise 'First argument for assert_included must be an array' unless items.is_a? Array
5
+
6
+ message = build_message custom_message, "Expected #{items.inspect} to contain #{needle.inspect} but it did not."
7
+
8
+ assert_block message do
9
+ items.include? needle
10
+ end
11
+ end
12
+
13
+ def assert_not_included(items, needle, custom_message = nil)
14
+ message = build_message custom_message, "Did not expect #{items.inspect} to contain #{needle.inspect}, but it did."
15
+
16
+ assert_block message do
17
+ not items.include? needle
18
+ end
19
+ end
20
+ end
data/test/tests.rb ADDED
@@ -0,0 +1,3 @@
1
+ test_dir = File.dirname(__FILE__)
2
+ tests = Dir.entries(test_dir).select{|f| f=~/.*_test\.rb$/}
3
+ tests.each {|t| require File.join(test_dir, t)}
@@ -0,0 +1,167 @@
1
+ require File.join( File.dirname(__FILE__), 'test.rb')
2
+
3
+ class TitleBuilderUsingTitleIndexTest < Test::Unit::TestCase
4
+
5
+ def test_that_id_is_parsed
6
+ expected = 'http://api.netflix.com/catalog/titles/movies/512381'
7
+
8
+ xml = %|<catalog_title_index>
9
+ <title_index_item>
10
+ <id>http://api.netflix.com/catalog/titles/movies/512381</id>
11
+ </title_index_item>
12
+ </catalog_title_index>
13
+ |
14
+
15
+ actual = TitleBuilder.from_xml(xml).first.id
16
+ assert_equal expected, actual
17
+ end
18
+
19
+ def test_that_title_is_parsed
20
+ xml = %|<catalog_title_index>
21
+ <title_index_item>
22
+ <title>Foster Home</title>
23
+ </title_index_item>
24
+ </catalog_title_index>
25
+ |
26
+
27
+ assert_equal 'Foster Home', TitleBuilder.from_xml(xml).first.title
28
+ end
29
+
30
+ def test_that_web_page_is_parsed
31
+ xml = %|<catalog_title_index>
32
+ <title_index_item>
33
+ <link href="myurl" rel="alternate" title="web page"></link>
34
+ </title_index_item>
35
+ </catalog_title_index>
36
+ |
37
+
38
+ assert_equal 'myurl', TitleBuilder.from_xml(xml).first.web_page
39
+ end
40
+
41
+ def test_that_delivery_formats_are_parsed
42
+ xml = %|<catalog_title_index>
43
+ <title_index_item>
44
+ <delivery_formats>
45
+ <availability>
46
+ <category scheme="http://api.netflix.com/catalog/titles/formats" label="DVD" term="DVD" status="deprecated"></category>
47
+ <category scheme="http://api.netflix.com/categories/title_formats" label="DVD" term="DVD"></category>
48
+ </availability>
49
+ </delivery_formats>
50
+ </title_index_item>
51
+ </catalog_title_index>
52
+ |
53
+
54
+ assert_equal ['DVD'], TitleBuilder.from_xml(xml).first.delivery_formats
55
+ end
56
+
57
+
58
+ def test_that_genres_are_parsed
59
+ xml = %|<catalog_title_index>
60
+ <title_index_item>
61
+ <category scheme="http://api.netflix.com/categories/genres" label="Romantic Dramas" term="Romantic Dramas"></category>
62
+ <category scheme="http://api.netflix.com/categories/genres" label="Sci-Fi Dramas" term="Sci-Fi Dramas"></category>
63
+ </title_index_item>
64
+ </catalog_title_index>
65
+ |
66
+
67
+ assert_equal ['Romantic Dramas', 'Sci-Fi Dramas'], TitleBuilder.from_xml(xml).first.genres.sort
68
+ end
69
+
70
+ def test_that_actors_are_parsed
71
+ xml = %|<catalog_title_index>
72
+ <title_index_item>
73
+ <link href="http://api.netflix.com/catalog/people/98401" rel="http://schemas.netflix.com/catalog/person.actor" title="George Wendt"></link>
74
+ <link href="http://api.netflix.com/catalog/people/35954" rel="http://schemas.netflix.com/catalog/person.actor" title="Robert Hy Gorman"></link>
75
+ </title_index_item>
76
+ </catalog_title_index>
77
+ |
78
+
79
+ assert_equal ['George Wendt', 'Robert Hy Gorman'], TitleBuilder.from_xml(xml).first.actors.sort
80
+ end
81
+ end
82
+ class TitleBuilderUsingCatalogSearchTest < Test::Unit::TestCase
83
+
84
+ def test_that_id_is_parsed
85
+ expected = 'http://api.netflix.com/catalog/titles/movies/60031755'
86
+
87
+ xml = %{<catalog_titles>
88
+ <catalog_title>
89
+ <id>http://api.netflix.com/catalog/titles/movies/60031755</id>
90
+ </catalog_title>
91
+ </catalog_titles>
92
+ }
93
+
94
+ actual = TitleBuilder.from_xml(xml).first.id
95
+ assert_equal expected, actual
96
+ end
97
+
98
+ def test_that_release_year_is_parsed
99
+ xml = '<catalog_titles><catalog_title><release_year>1992</release_year></catalog_title></catalog_titles>'
100
+ assert_equal '1992', TitleBuilder.from_xml(xml).first.release_year
101
+ end
102
+
103
+ def test_that_title_is_parsed
104
+ xml = %{<catalog_titles>
105
+ <catalog_title>
106
+ <title short="Sneakers" regular="Sneakers"></title>
107
+ </catalog_title>
108
+ </catalog_titles>
109
+ }
110
+
111
+ assert_equal 'Sneakers', TitleBuilder.from_xml(xml).first.title
112
+ end
113
+
114
+ def test_that_web_page_is_parsed
115
+ xml = %{<catalog_titles>
116
+ <catalog_title>
117
+ <link href="myurl" rel="alternate" title="web page"></link>
118
+ </catalog_title>
119
+ </catalog_titles>
120
+ }
121
+
122
+ assert_equal 'myurl', TitleBuilder.from_xml(xml).first.web_page
123
+ end
124
+
125
+ def test_that_delivery_formats_come_from_format_builder
126
+
127
+ FormatBuilder.stubs(:from_movie).returns('results')
128
+
129
+ xml = %{
130
+ <catalog_titles>
131
+ <catalog_title>
132
+ <link href="http://api.netflix.com/catalog/titles/movies/60024073/format_availability" rel="http://schemas.netflix.com/catalog/titles/format_availability" title="formats"></link>
133
+ </catalog_title>
134
+ </catalog_titles>
135
+ }
136
+
137
+ assert_equal 'results', TitleBuilder.from_xml(xml).first.delivery_formats
138
+ end
139
+
140
+
141
+ def test_that_genres_are_parsed
142
+ xml = %|<catalog_title_index>
143
+ <title_index_item>
144
+ <category scheme="http://api.netflix.com/categories/genres" label="Drama" term="Drama"></category>
145
+ <category scheme="http://api.netflix.com/categories/genres" label="Family Dramas" term="Family Dramas"></category>
146
+ </title_index_item>
147
+ </catalog_title_index>
148
+ |
149
+
150
+ assert_equal ['Drama', 'Family Dramas'], TitleBuilder.from_xml(xml).first.genres.sort
151
+ end
152
+
153
+ def test_that_actors_are_parsed
154
+
155
+ ActorBuilder.stubs(:from_movie).returns(:actor_list)
156
+
157
+ xml = %|<catalog_title_index>
158
+ <title_index_item>
159
+ <link href="http://api.netflix.com/catalog/titles/movies/60024073/cast" rel="http://schemas.netflix.com/catalog/people.cast" title="cast"></link>
160
+ </title_index_item>
161
+ </catalog_title_index>
162
+ |
163
+
164
+ assert_equal :actor_list, TitleBuilder.from_xml(xml).first.actors
165
+ end
166
+
167
+ end
@@ -0,0 +1,29 @@
1
+ require File.join( File.dirname(__FILE__), 'test.rb')
2
+
3
+ class TitleTest < Test::Unit::TestCase
4
+
5
+ def request_stub
6
+ stub_everything(:send => '<xml />')
7
+ end
8
+
9
+ def test_that_title_can_go_to_and_from_json
10
+ expected = NetFlix::Title.new()
11
+
12
+ actual = NetFlix::Title.from_json( expected.to_json )
13
+
14
+ assert_equal expected.id, actual.id
15
+ assert_equal expected.delivery_formats, actual.delivery_formats
16
+ end
17
+
18
+ def test_that_search_uses_api_and_builder
19
+ NetFlix::API::Catalog::Titles.stubs(:search).returns(:xml_results)
20
+ TitleBuilder.expects(:from_xml).with(:xml_results).returns(:movies)
21
+ assert_equal :movies, NetFlix::Title.search(:term)
22
+ end
23
+
24
+ def test_that_complete_list_call_uses_api
25
+ NetFlix::API::Catalog::Titles.expects(:index).returns('<xml />')
26
+ NetFlix::Title.complete_list
27
+ end
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: netflix4r
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - rossnelson
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-08-07 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activesupport
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ prerelease: false
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: ruby-hmac
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ version: "0"
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: json
48
+ requirement: &id003 !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *id003
59
+ - !ruby/object:Gem::Dependency
60
+ name: nokogiri
61
+ requirement: &id004 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ type: :runtime
70
+ prerelease: false
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: shoulda
74
+ requirement: &id005 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: *id005
85
+ - !ruby/object:Gem::Dependency
86
+ name: bundler
87
+ requirement: &id006 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 1
94
+ - 0
95
+ - 0
96
+ version: 1.0.0
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: *id006
100
+ - !ruby/object:Gem::Dependency
101
+ name: jeweler
102
+ requirement: &id007 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 1
109
+ - 5
110
+ - 2
111
+ version: 1.5.2
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id007
115
+ - !ruby/object:Gem::Dependency
116
+ name: rcov
117
+ requirement: &id008 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: *id008
128
+ - !ruby/object:Gem::Dependency
129
+ name: activesupport
130
+ requirement: &id009 !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ segments:
136
+ - 0
137
+ version: "0"
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: *id009
141
+ - !ruby/object:Gem::Dependency
142
+ name: ruby-hmac
143
+ requirement: &id010 !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ segments:
149
+ - 0
150
+ version: "0"
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: *id010
154
+ - !ruby/object:Gem::Dependency
155
+ name: json
156
+ requirement: &id011 !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ segments:
162
+ - 0
163
+ version: "0"
164
+ type: :runtime
165
+ prerelease: false
166
+ version_requirements: *id011
167
+ - !ruby/object:Gem::Dependency
168
+ name: nokogiri
169
+ requirement: &id012 !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ segments:
175
+ - 0
176
+ version: "0"
177
+ type: :runtime
178
+ prerelease: false
179
+ version_requirements: *id012
180
+ description: a ruby client for the NetFlix API
181
+ email: axcess1@me.com
182
+ executables: []
183
+
184
+ extensions: []
185
+
186
+ extra_rdoc_files:
187
+ - LICENSE.txt
188
+ - README.md
189
+ files:
190
+ - .document
191
+ - Gemfile
192
+ - Gemfile.lock
193
+ - LICENSE.txt
194
+ - README.md
195
+ - Rakefile
196
+ - VERSION
197
+ - credentials.yml
198
+ - lib/flix4r.rb
199
+ - lib/net_flix.rb
200
+ - lib/net_flix/.DS_Store
201
+ - lib/net_flix/api/.DS_Store
202
+ - lib/net_flix/api/catalog/.DS_Store
203
+ - lib/net_flix/api/catalog/titles.rb
204
+ - lib/net_flix/authenticator.rb
205
+ - lib/net_flix/builders/.DS_Store
206
+ - lib/net_flix/builders/actor_builder.rb
207
+ - lib/net_flix/builders/format_builder.rb
208
+ - lib/net_flix/builders/title_builder.rb
209
+ - lib/net_flix/credentials.rb
210
+ - lib/net_flix/request.rb
211
+ - lib/net_flix/title.rb
212
+ - lib/valuable.rb
213
+ - log/netflix.log
214
+ - netflix4r.gemspec
215
+ - rakefile.rb
216
+ - samples/.DS_Store
217
+ - samples/actors.rb
218
+ - samples/download_full_catalog.rb
219
+ - samples/formats.rb
220
+ - samples/search.rb
221
+ - test/actor_builder_test.rb
222
+ - test/authenticator_test.rb
223
+ - test/credentials_test.rb
224
+ - test/format_builder_test.rb
225
+ - test/helper.rb
226
+ - test/request_test.rb
227
+ - test/test.rb
228
+ - test/test_flix4r.rb
229
+ - test/test_helpers.rb
230
+ - test/tests.rb
231
+ - test/title_builder_test.rb
232
+ - test/title_test.rb
233
+ has_rdoc: true
234
+ homepage: http://github.com/rossnelson/flix4r
235
+ licenses:
236
+ - MIT
237
+ post_install_message:
238
+ rdoc_options: []
239
+
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ hash: -3433800727175703542
248
+ segments:
249
+ - 0
250
+ version: "0"
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ none: false
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ segments:
257
+ - 0
258
+ version: "0"
259
+ requirements: []
260
+
261
+ rubyforge_project:
262
+ rubygems_version: 1.3.7
263
+ signing_key:
264
+ specification_version: 3
265
+ summary: copy of http://code.google.com/p/flix4r/
266
+ test_files:
267
+ - test/actor_builder_test.rb
268
+ - test/authenticator_test.rb
269
+ - test/credentials_test.rb
270
+ - test/format_builder_test.rb
271
+ - test/helper.rb
272
+ - test/request_test.rb
273
+ - test/test.rb
274
+ - test/test_flix4r.rb
275
+ - test/test_helpers.rb
276
+ - test/tests.rb
277
+ - test/title_builder_test.rb
278
+ - test/title_test.rb