netflix 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,47 +4,50 @@ Copyright (c) 2012 Dean Holdren
4
4
  To install: gem install netflix
5
5
 
6
6
  This gem uses Netflix's OAuth REST API, you first need to register an application with Netflix at http://developer.netflix.com/apps/register/
7
+
7
8
  This will provide you with a "consumer key", "consumer secret", and "application name"
8
9
 
9
10
  === To use unauthenticated features (catalog search):
10
11
  * TODO
11
12
 
12
13
  === To use authenticated features (i.e. queue management):
13
- * Netflix.consumer_key = <your consumer/developer key>
14
- Netflix.consumer_secret = <your consumer/developer secret>
14
+ * Set the consumer/developer config:
15
+ Netflix.consumer_key = <your consumer/developer key>
16
+ Netflix.consumer_secret = <your consumer/developer secret>
15
17
 
16
18
  * Do OAuth dance: (This is a one-time per user step, save the result somewhere.)
17
19
  1. Interactive (commandline/irb):
18
- This will open a netflix.com web page to ask the user to authenticate, and provide a pin.
19
- access_token = Netflix::Client.new.oauth
20
+ This will open a netflix.com web page to ask the user to authenticate, and provide a pin.
21
+ access_token = Netflix::Client.new.oauth
20
22
 
21
23
  2. or Web application (Rails/Sinatra/etc), define a URL that can handle the callback
22
- request_token, auth_url = Netflix::Client.new.oauth_via_callback(my_callback_url)
23
- session[:request_token] = request_token
24
- redirect_to auth_url
25
-
26
- Then in the handler retrieve the :oauth_verifier out of the request params
27
- oauth_verifier = params[:oauth_verifier]
28
- request_token = session[:request_token]
29
- access_token = Netflix::Client.new.handle_oauth_callback(request_token, oauth_verifier)
24
+ request_token, auth_url = Netflix::Client.new.oauth_via_callback(my_callback_url)
25
+ session[:request_token] = request_token
26
+ redirect_to auth_url
27
+
28
+ Then in the handler for "my_callback_url" (i.e. a Rails controller action) retrieve the :oauth_verifier out of the request params
29
+ oauth_verifier = params[:oauth_verifier]
30
+ request_token = session[:request_token]
31
+ access_token = Netflix::Client.new.handle_oauth_callback(request_token, oauth_verifier)
30
32
 
31
33
 
32
34
  * After OAuth credentials are established:
33
- access_token = access_token.token
34
- access_secret = access_token.secret
35
- user_id = access_token.params["user_id"]
35
+ access_token = access_token.token
36
+ access_secret = access_token.secret
37
+ user_id = access_token.params["user_id"]
38
+
36
39
  (Record these, for example in a User table in a database)
37
40
 
38
- client = Netflix::Client.new(access_token, access_token_secret)
39
- user = client.user(user_id)
40
- queue = user.available_disc_queue
41
- discs = queue.discs
42
- disc_one = discs[0]
43
- puts "#{disc_one.title} #{disc_one.id}"
44
- queue.remove(1) #queue is 1-based, so this is first disc
41
+ client = Netflix::Client.new(access_token, access_token_secret)
42
+ user = client.user(user_id)
43
+ queue = user.available_disc_queue
44
+ discs = queue.discs
45
+ disc_one = discs[0]
46
+ puts "#{disc_one.title} #{disc_one.id}"
47
+ queue.remove(1) #queue is 1-based, so this is first disc
45
48
 
46
49
  === Credits
47
- This work is based on: REST API documentation of Netflix (http://developer.netflix.com),
48
- with some help from twitter gem for OAuth ideas https://github.com/jnunemaker/twitter/
50
+ This work is based on: REST API documentation of Netflix (http://developer.netflix.com),
51
+ with some help from twitter gem for OAuth ideas https://github.com/jnunemaker/twitter/
49
52
 
50
53
 
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'rake/testtask'
2
- #require 'rake/gempackagetask'
3
2
  require 'rubygems/package_task'
4
3
 
5
4
  Rake::TestTask.new("test") { |t|
@@ -12,7 +11,7 @@ Rake::TestTask.new("test") { |t|
12
11
 
13
12
  gem_spec = Gem::Specification.new do |s|
14
13
  s.name = "netflix"
15
- s.version = "0.1.0"
14
+ s.version = "0.1.1"
16
15
  s.authors = ["Dean Holdren"]
17
16
  s.date = %q{2012-01-09}
18
17
  s.description = "Ruby Netflix API wrapper"
@@ -33,10 +32,6 @@ gem_spec = Gem::Specification.new do |s|
33
32
  s.add_development_dependency("yaml")
34
33
  end
35
34
 
36
- #Rake::GemPackageTask.new(gem_spec) do |t|
37
- # t.need_zip = true
38
- #end
39
-
40
35
  Gem::PackageTask.new(gem_spec) do |pkg|
41
36
  pkg.need_zip = true
42
37
  end
@@ -39,8 +39,12 @@ module Netflix
39
39
  end
40
40
 
41
41
  def discs
42
- queue_items = [queue_item].flatten
43
- queue_items.map {|queue_item| Disc.new(queue_item)}
42
+ if queue_item
43
+ queue_items = [queue_item].flatten
44
+ queue_items.map {|queue_item| Disc.new(queue_item)}
45
+ else
46
+ []
47
+ end
44
48
  end
45
49
 
46
50
  private
@@ -1169,3 +1169,29 @@ nuid_sub2:
1169
1169
  body:
1170
1170
  delete:
1171
1171
  body:
1172
+ empty_queue:
1173
+ get:
1174
+ body: |
1175
+ {"queue": {
1176
+ "link": [
1177
+ {
1178
+ "href": "http://api.netflix.com/users/empty_queue/queues/disc/available",
1179
+ "rel": "http://schemas.netflix.com/queues.available",
1180
+ "title": "available queue"
1181
+ },
1182
+ {
1183
+ "href": "http://api.netflix.com/users/empty_queue/queues/disc/saved",
1184
+ "rel": "http://schemas.netflix.com/queues.saved",
1185
+ "title": "saved queue"
1186
+ }
1187
+ ],
1188
+ "results_per_page": "0",
1189
+ "url_template": "http://api.netflix.com/users/empty_queue/queues/disc?{-join|&|sort|start_index|max_results}",
1190
+ "start_index": "0",
1191
+ "etag": "0",
1192
+ "number_of_results": "0"
1193
+ }}
1194
+ post:
1195
+ body:
1196
+ delete:
1197
+ body:
@@ -205,4 +205,73 @@ nuid_sub2:
205
205
  }
206
206
  ]},
207
207
  "user_id": "nuid_sub2"
208
+ }}
209
+ empty_queue:
210
+ get:
211
+ body: |
212
+ {"user": {
213
+ "can_instant_watch": true,
214
+ "first_name": "Empty",
215
+ "last_name": "Queue",
216
+ "link": [
217
+ {
218
+ "href": "http://api.netflix.com/users/empty_queue/queues",
219
+ "rel": "http://schemas.netflix.com/queues",
220
+ "title": "queues"
221
+ },
222
+ {
223
+ "href": "http://api.netflix.com/users/empty_queue/rental_history",
224
+ "rel": "http://schemas.netflix.com/rental_history",
225
+ "title": "rental history"
226
+ },
227
+ {
228
+ "href": "http://api.netflix.com/users/empty_queue/recommendations",
229
+ "rel": "http://schemas.netflix.com/recommendations",
230
+ "title": "recommendations"
231
+ },
232
+ {
233
+ "href": "http://api.netflix.com/users/empty_queue/title_states",
234
+ "rel": "http://schemas.netflix.com/title_states",
235
+ "title": "title states"
236
+ },
237
+ {
238
+ "href": "http://api.netflix.com/users/empty_queue/ratings",
239
+ "rel": "http://schemas.netflix.com/ratings",
240
+ "title": "ratings"
241
+ },
242
+ {
243
+ "href": "http://api.netflix.com/users/empty_queue/reviews",
244
+ "rel": "http://schemas.netflix.com/reviews",
245
+ "title": "reviews"
246
+ },
247
+ {
248
+ "href": "http://api.netflix.com/users/empty_queue/at_home",
249
+ "rel": "http://schemas.netflix.com/at_home",
250
+ "title": "at home"
251
+ },
252
+ {
253
+ "href": "http://api.netflix.com/users/empty_queue/feeds",
254
+ "rel": "http://schemas.netflix.com/feeds",
255
+ "title": "feeds"
256
+ }
257
+ ],
258
+ "max_maturity_level": {"category": {
259
+ "label": 1000000,
260
+ "scheme": "http://api.netflix.com/categories/maturity_level",
261
+ "term": 1000000
262
+ }},
263
+ "nickname": "foobar",
264
+ "preferred_formats": {"category": [
265
+ {
266
+ "label": "Blu-ray",
267
+ "scheme": "http://api.netflix.com/categories/title_formats",
268
+ "term": "Blu-ray"
269
+ },
270
+ {
271
+ "label": "DVD",
272
+ "scheme": "http://api.netflix.com/categories/title_formats",
273
+ "term": "DVD"
274
+ }
275
+ ]},
276
+ "user_id": "empty_queue"
208
277
  }}
@@ -61,5 +61,13 @@ class QueueTest < Test::Unit::TestCase
61
61
  # }
62
62
  #end
63
63
 
64
+ def test_empty_queue
65
+ stub_netflix_for_user('empty_queue')
66
+ user = Netflix::Client.new('nuid_access_key', 'nuid_access_secret').user('empty_queue')
67
+ available_disc_queue = user.available_disc_queue
68
+ assert available_disc_queue, "Expected a disc_queue"
69
+ assert available_disc_queue.discs, "Expected the disc_queue to have a discs attribute"
70
+ assert_equal 0, available_disc_queue.discs.size, "Expected discs to be empty array #{available_disc_queue.discs[0]}}"
71
+ end
64
72
 
65
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netflix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth
16
- requirement: &2160650860 !ruby/object:Gem::Requirement
16
+ requirement: &2165140260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160650860
24
+ version_requirements: *2165140260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &2160649060 !ruby/object:Gem::Requirement
27
+ requirement: &2165139740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160649060
35
+ version_requirements: *2165139740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: launchy
38
- requirement: &2160647820 !ruby/object:Gem::Requirement
38
+ requirement: &2165139320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160647820
46
+ version_requirements: *2165139320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: fakeweb
49
- requirement: &2160645840 !ruby/object:Gem::Requirement
49
+ requirement: &2165138840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2160645840
57
+ version_requirements: *2165138840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yaml
60
- requirement: &2160644720 !ruby/object:Gem::Requirement
60
+ requirement: &2165138360 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2160644720
68
+ version_requirements: *2165138360
69
69
  description: Ruby Netflix API wrapper
70
70
  email: deanholdren@gmail.com
71
71
  executables: []