netflix4r 0.0.3 → 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.
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/net_flix/api/catalog/titles.rb +3 -3
- data/lib/net_flix/authenticator.rb +2 -3
- data/lib/net_flix/builders/actor_builder.rb +1 -1
- data/lib/net_flix/builders/format_builder.rb +1 -1
- data/lib/net_flix/request.rb +4 -4
- data/lib/valuable.rb +1 -1
- data/test/actor_builder_test.rb +1 -1
- data/test/authenticator_test.rb +23 -23
- data/test/credentials_test.rb +2 -2
- data/test/format_builder_test.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/request_test.rb +6 -6
- data/test/title_test.rb +1 -1
- metadata +27 -27
data/README.md
CHANGED
@@ -13,7 +13,7 @@ You must add your netflix credentials to flix4r/lib/credentials.yml. You can get
|
|
13
13
|
Example
|
14
14
|
==========
|
15
15
|
|
16
|
-
list = NetFlix::Title.search(:
|
16
|
+
list = NetFlix::Title.search(term: 'sneakers', max_results: 2)
|
17
17
|
[#<NetFlix::Title:0x57f0f58 ...>, #<NetFlix::Title:0x57f0f58 ...>] # shortened for readability
|
18
18
|
sneakers = list.first
|
19
19
|
sneakers.title
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
@@ -5,13 +5,13 @@ module NetFlix
|
|
5
5
|
|
6
6
|
class << self
|
7
7
|
|
8
|
-
# example Title.search(:
|
8
|
+
# example Title.search(term: 'sneakers', max_results: 10)
|
9
9
|
def search(params = {})
|
10
|
-
NetFlix::Request.new(:
|
10
|
+
NetFlix::Request.new(url: 'http://api.netflix.com/catalog/titles', parameters: params).send
|
11
11
|
end
|
12
12
|
|
13
13
|
def list(params = {})
|
14
|
-
NetFlix::Request.new(:
|
14
|
+
NetFlix::Request.new(url: 'http://api.netflix.com/catalog/titles/index', parameters: params).send
|
15
15
|
end
|
16
16
|
|
17
17
|
end # class methods
|
@@ -5,8 +5,7 @@ module NetFlix
|
|
5
5
|
require 'digest/sha1'
|
6
6
|
|
7
7
|
has_value :request
|
8
|
-
has_value :
|
9
|
-
has_value :nonce, :default => rand(1_000_000)
|
8
|
+
has_value :nonce, default: rand(1_000_000)
|
10
9
|
has_value :credentials
|
11
10
|
|
12
11
|
def access_token
|
@@ -42,7 +41,7 @@ module NetFlix
|
|
42
41
|
{
|
43
42
|
'oauth_consumer_key' => key,
|
44
43
|
'oauth_signature_method' => 'HMAC-SHA1',
|
45
|
-
'oauth_timestamp' =>
|
44
|
+
'oauth_timestamp' => Time.now.to_i,
|
46
45
|
'oauth_nonce' => nonce,
|
47
46
|
'oauth_version' => '1.0'
|
48
47
|
}
|
data/lib/net_flix/request.rb
CHANGED
@@ -3,9 +3,9 @@ module NetFlix
|
|
3
3
|
|
4
4
|
RESERVED_CHARACTERS = /[^A-Za-z0-9\-\._~]/
|
5
5
|
|
6
|
-
has_value :http_method, :
|
7
|
-
has_value :url, :
|
8
|
-
has_value :parameters, :
|
6
|
+
has_value :http_method, default: 'GET'
|
7
|
+
has_value :url, default: 'http://api.netflix.com/catalog/titles/index'
|
8
|
+
has_value :parameters, klass: HashWithIndifferentAccess, default: {}
|
9
9
|
|
10
10
|
def ordered_keys
|
11
11
|
parameters.keys.sort
|
@@ -18,7 +18,7 @@ module NetFlix
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def authenticator
|
21
|
-
@auth = NetFlix::Authenticator.new(:
|
21
|
+
@auth = NetFlix::Authenticator.new(request: self, credentials: NetFlix.credentials)
|
22
22
|
end
|
23
23
|
|
24
24
|
def target
|
data/lib/valuable.rb
CHANGED
data/test/actor_builder_test.rb
CHANGED
@@ -14,7 +14,7 @@ class ActorBuilderTest < Test::Unit::TestCase
|
|
14
14
|
|
15
15
|
def test_that_cast_reference_is_pulled
|
16
16
|
|
17
|
-
NetFlix::Request.expects(:new).with(:
|
17
|
+
NetFlix::Request.expects(:new).with(url: 'http://api.netflix.com/catalog/titles/movies/60024073/cast').returns(stub_everything(send: '<xml/>'))
|
18
18
|
|
19
19
|
xml = %|
|
20
20
|
<title_index_item>
|
data/test/authenticator_test.rb
CHANGED
@@ -3,13 +3,13 @@ require File.join( File.dirname(__FILE__), 'test.rb')
|
|
3
3
|
class AuthenticatorTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def test_that_url_is_properly_encoded
|
6
|
-
fake_request = stub_everything(:
|
7
|
-
assert_equal 'http%3A%2F%2Fphotos.example.net%2Fa%20pic', NetFlix::Authenticator.new(:
|
6
|
+
fake_request = stub_everything(url: 'http://photos.example.net/a pic')
|
7
|
+
assert_equal 'http%3A%2F%2Fphotos.example.net%2Fa%20pic', NetFlix::Authenticator.new(request: fake_request).encoded_url
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_that_spaces_in_parameters_are_encoded
|
11
|
-
request = stub_everything(:
|
12
|
-
assert_equal 'a%20key%3Dvalue', NetFlix::Authenticator.new(:
|
11
|
+
request = stub_everything(parameter_string: 'a key=value')
|
12
|
+
assert_equal 'a%20key%3Dvalue', NetFlix::Authenticator.new(request: request).encoded_parameters
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_that_authentication_corresponds_to_known_values
|
@@ -17,24 +17,24 @@ class AuthenticatorTest < Test::Unit::TestCase
|
|
17
17
|
#based on http://term.ie/oauth/example/client.php
|
18
18
|
|
19
19
|
cred = stub_everything(
|
20
|
-
:
|
21
|
-
:
|
22
|
-
|
20
|
+
key: '123456789012345678901234',
|
21
|
+
secret: '1234567890',
|
22
|
+
valid?: true)
|
23
23
|
|
24
24
|
expected_sbs = 'GET&http%3A%2F%2Fapi.netflix.com%2Fcatalog%2Ftitles&max_results%3D5%26oauth_consumer_key%3D123456789012345678901234%26oauth_nonce%3D24aea97b0b5dd516145966aaf2945c6a%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1233950836%26oauth_version%3D1.0%26term%3Dsneakers'
|
25
25
|
|
26
26
|
expected_signature = 'vlROEST9UXwI+zc9fld82giaYPE='
|
27
27
|
|
28
28
|
request = NetFlix::Request.new(
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
29
|
+
url: 'http://api.netflix.com/catalog/titles',
|
30
|
+
http_method: 'GET',
|
31
|
+
parameters: {'term' => 'sneakers', 'max_results' => '5'})
|
32
32
|
|
33
33
|
auth = NetFlix::Authenticator.new(
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
34
|
+
request: request,
|
35
|
+
timestamp: 1233950836,
|
36
|
+
nonce: '24aea97b0b5dd516145966aaf2945c6a',
|
37
|
+
credentials: cred
|
38
38
|
)
|
39
39
|
|
40
40
|
assert_equal expected_sbs, auth.signature_base_string
|
@@ -42,30 +42,30 @@ class AuthenticatorTest < Test::Unit::TestCase
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_that_signature_key_includes_consumer_secret_and_ampersand
|
45
|
-
cred = stub_everything(:
|
46
|
-
assert_equal 'shhh&', NetFlix::Authenticator.new(:
|
45
|
+
cred = stub_everything(secret: 'shhh', key: 'letmein')
|
46
|
+
assert_equal 'shhh&', NetFlix::Authenticator.new(credentials: cred).signature_key
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_that_access_token_is_included_in_signature_key_if_it_is_available
|
50
|
-
cred = stub_everything(:
|
50
|
+
cred = stub_everything(secret: 'shhh', key: 'letmein', access_token: 'they_like_me')
|
51
51
|
request = stub_everything
|
52
52
|
|
53
|
-
assert_equal 'shhh&they_like_me', NetFlix::Authenticator.new(:
|
53
|
+
assert_equal 'shhh&they_like_me', NetFlix::Authenticator.new(request: request, credentials: cred).signature_key
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_that_signature_is_added_to_parameters_during_signing
|
57
|
-
cred = stub_everything(:
|
57
|
+
cred = stub_everything(secret: 'shhh', key: 'letmein', valid?: true)
|
58
58
|
params = stub_everything
|
59
59
|
params.expects(:merge).with(has_key('oauth_signature')).once
|
60
60
|
|
61
|
-
request = stub_everything(:
|
62
|
-
auth = NetFlix::Authenticator.new(:
|
61
|
+
request = stub_everything(parameters: params)
|
62
|
+
auth = NetFlix::Authenticator.new(request: request, credentials: cred)
|
63
63
|
auth.sign!
|
64
64
|
end
|
65
65
|
|
66
66
|
def test_that_exception_is_raised_if_secret_is_missing
|
67
|
-
credentials = stub_everything(
|
68
|
-
authenticator = NetFlix::Authenticator.new(:
|
67
|
+
credentials = stub_everything(valid?: false)
|
68
|
+
authenticator = NetFlix::Authenticator.new(credentials: credentials)
|
69
69
|
|
70
70
|
assert_raises ArgumentError do
|
71
71
|
authenticator.require_credentials
|
data/test/credentials_test.rb
CHANGED
@@ -3,7 +3,7 @@ require File.join( File.dirname(__FILE__), 'test.rb')
|
|
3
3
|
class CredentialsTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def file_contents
|
6
|
-
{:
|
6
|
+
{key: :value}.to_yaml
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_that_credentials_file_is_not_loaded_if_it_dne
|
@@ -20,7 +20,7 @@ class CredentialsTest < Test::Unit::TestCase
|
|
20
20
|
|
21
21
|
def test_that_values_from_file_are_present
|
22
22
|
File.stubs(:exist?).returns(true)
|
23
|
-
File.stubs(:open).returns({:
|
23
|
+
File.stubs(:open).returns({key: :my_key, secret: 'quiet!'}.to_yaml)
|
24
24
|
assert_equal :my_key, NetFlix::Credentials.from_file.key
|
25
25
|
end
|
26
26
|
|
data/test/format_builder_test.rb
CHANGED
@@ -12,7 +12,7 @@ class FormatBuilderTest < Test::Unit::TestCase
|
|
12
12
|
|
13
13
|
def test_that_format_links_are_followed
|
14
14
|
|
15
|
-
NetFlix::Request.expects(:new).with(:
|
15
|
+
NetFlix::Request.expects(:new).with(url: 'http://api.netflix.com/catalog/titles/movies/60031755/format_availability').returns(stub_everything(send: '<xml/>'))
|
16
16
|
|
17
17
|
FormatBuilder.from_movie( title_with_link_to_formats )
|
18
18
|
end
|
data/test/helper.rb
CHANGED
data/test/request_test.rb
CHANGED
@@ -3,20 +3,20 @@ require File.join( File.dirname(__FILE__), 'test.rb')
|
|
3
3
|
class NetflixTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def test_that_http_method_is_validated
|
6
|
-
assert_equal false, NetFlix::Request.new(:
|
6
|
+
assert_equal false, NetFlix::Request.new(http_method: 'Thing').valid?
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_that_http_method_knows_valid_values
|
10
|
-
assert_equal true, NetFlix::Request.new(:
|
11
|
-
assert_equal true, NetFlix::Request.new(:
|
10
|
+
assert_equal true, NetFlix::Request.new(http_method: 'POST').valid?
|
11
|
+
assert_equal true, NetFlix::Request.new(http_method: 'GET').valid?
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_that_parameters_appear_alphabetically_in_parameter_string
|
15
|
-
assert_equal 'key_a=value1&key_b=value2', NetFlix::Request.new(:
|
15
|
+
assert_equal 'key_a=value1&key_b=value2', NetFlix::Request.new(parameters: {'key_b' => 'value2', 'key_a' => 'value1'}).parameter_string
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_that_authenticator_receives_copy_of_request
|
19
|
-
request = NetFlix::Request.new(:
|
19
|
+
request = NetFlix::Request.new(parameters: {'key1' => '2'})
|
20
20
|
NetFlix::Authenticator.expects(:new).with(has_entry(:request, request)).returns(stub_everything)
|
21
21
|
Net::HTTP.stubs(:get)
|
22
22
|
|
@@ -24,7 +24,7 @@ class NetflixTest < Test::Unit::TestCase
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_that_request_is_logged_when_sent
|
27
|
-
request = NetFlix::Request.new(:
|
27
|
+
request = NetFlix::Request.new(url: 'some_url', parameters: {'logme' => 'please'})
|
28
28
|
NetFlix.expects(:log).with('some_url?logme=please')
|
29
29
|
request.log
|
30
30
|
end
|
data/test/title_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netflix4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70218846804660 !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: *
|
24
|
+
version_requirements: *70218846804660
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ruby-hmac
|
27
|
-
requirement: &
|
27
|
+
requirement: &70218846803360 !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: *
|
35
|
+
version_requirements: *70218846803360
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: json
|
38
|
-
requirement: &
|
38
|
+
requirement: &70218846754620 !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: *
|
46
|
+
version_requirements: *70218846754620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
requirement: &
|
49
|
+
requirement: &70218846753640 !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: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70218846753640
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: shoulda
|
60
|
-
requirement: &
|
60
|
+
requirement: &70218846752360 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70218846752360
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70218846751680 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70218846751680
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70218846750860 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.5.2
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70218846750860
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rcov
|
93
|
-
requirement: &
|
93
|
+
requirement: &70218846750080 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70218846750080
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activesupport
|
104
|
-
requirement: &
|
104
|
+
requirement: &70218846748020 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70218846748020
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: ruby-hmac
|
115
|
-
requirement: &
|
115
|
+
requirement: &70218846763280 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70218846763280
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: json
|
126
|
-
requirement: &
|
126
|
+
requirement: &70218846761940 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70218846761940
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: nokogiri
|
137
|
-
requirement: &
|
137
|
+
requirement: &70218846760940 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,7 +142,7 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :runtime
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70218846760940
|
146
146
|
description: a ruby client for the NetFlix API
|
147
147
|
email: axcess1@me.com
|
148
148
|
executables: []
|
@@ -195,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
195
|
version: '0'
|
196
196
|
segments:
|
197
197
|
- 0
|
198
|
-
hash:
|
198
|
+
hash: 3530660002784482062
|
199
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
200
|
none: false
|
201
201
|
requirements:
|