viki 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/viki/client.rb +6 -3
- data/lib/viki/request.rb +3 -2
- data/lib/viki/transport.rb +5 -5
- data/lib/viki/version.rb +1 -1
- data/lib/viki.rb +2 -2
- data/spec/lib/client_spec.rb +15 -6
- data/spec/lib/request_spec.rb +4 -2
- data/spec/requests/request_integration_spec.rb +33 -11
- metadata +2 -2
data/.gitignore
CHANGED
data/lib/viki/client.rb
CHANGED
@@ -7,11 +7,13 @@ require 'multi_json'
|
|
7
7
|
module Viki
|
8
8
|
class Client
|
9
9
|
include Viki::Transport
|
10
|
+
HOST = "http://www.viki.com"
|
10
11
|
|
11
|
-
def initialize(client_id, client_secret)
|
12
|
+
def initialize(client_id, client_secret, host = nil)
|
13
|
+
@host = host || HOST
|
12
14
|
@client_id = client_id
|
13
15
|
@client_secret = client_secret
|
14
|
-
@access_token = auth_request(client_id, client_secret)
|
16
|
+
@access_token = auth_request(client_id, client_secret, @host)
|
15
17
|
end
|
16
18
|
|
17
19
|
attr_reader :access_token
|
@@ -21,7 +23,8 @@ module Viki
|
|
21
23
|
raise NoMethodError if not URL_NAMESPACES.include? name
|
22
24
|
Viki::Request.new({client_id: @client_id,
|
23
25
|
client_secret: @client_secret,
|
24
|
-
access_token: @access_token
|
26
|
+
access_token: @access_token,
|
27
|
+
host: @host}, name, *args)
|
25
28
|
end
|
26
29
|
|
27
30
|
end
|
data/lib/viki/request.rb
CHANGED
@@ -4,6 +4,7 @@ module Viki
|
|
4
4
|
@access_token = auth_data[:access_token]
|
5
5
|
@client_id = auth_data[:client_id]
|
6
6
|
@client_secret = auth_data[:client_secret]
|
7
|
+
@host = auth_data[:host]
|
7
8
|
|
8
9
|
build_call_chain(name, *args)
|
9
10
|
end
|
@@ -14,11 +15,11 @@ module Viki
|
|
14
15
|
|
15
16
|
def get
|
16
17
|
current_chain = @call_chain
|
17
|
-
request(current_chain)
|
18
|
+
request(current_chain, @host)
|
18
19
|
end
|
19
20
|
|
20
21
|
def reset_access_token
|
21
|
-
@access_token = auth_request(@client_id, @client_secret)
|
22
|
+
@access_token = auth_request(@client_id, @client_secret, @host)
|
22
23
|
end
|
23
24
|
|
24
25
|
def url
|
data/lib/viki/transport.rb
CHANGED
@@ -8,23 +8,23 @@ module Viki
|
|
8
8
|
include Viki::Utilities
|
9
9
|
|
10
10
|
private
|
11
|
-
HOST = "http://www.viki.com/api/v3/"
|
12
11
|
|
13
|
-
def auth_request(client_id, client_secret)
|
12
|
+
def auth_request(client_id, client_secret, host)
|
13
|
+
endpoint = host + '/oauth/token'
|
14
14
|
params = {
|
15
15
|
:grant_type => 'client_credentials',
|
16
16
|
:client_id => client_id,
|
17
17
|
:client_secret => client_secret
|
18
18
|
}
|
19
|
-
response = HTTParty.post(
|
19
|
+
response = HTTParty.post(endpoint, query: params)
|
20
20
|
json = MultiJson.load(response.body)
|
21
21
|
raise Viki::Error.new(response.header.code, json["error_description"]) if response.header.code != "200"
|
22
22
|
json["access_token"]
|
23
23
|
end
|
24
24
|
|
25
|
-
def request(call_chain)
|
25
|
+
def request(call_chain, host)
|
26
26
|
path, params = build_url(call_chain)
|
27
|
-
request_url =
|
27
|
+
request_url = host + "/api/v3/" + path.chop + ".json"
|
28
28
|
|
29
29
|
response = HTTParty.get(request_url, :query => params)
|
30
30
|
|
data/lib/viki/version.rb
CHANGED
data/lib/viki.rb
CHANGED
@@ -9,8 +9,8 @@ module Viki
|
|
9
9
|
# Alias for viki::Client.new
|
10
10
|
#
|
11
11
|
# @return {viki::Client})
|
12
|
-
def self.new(client_id, client_secret)
|
13
|
-
Viki::Client.new(client_id, client_secret)
|
12
|
+
def self.new(client_id, client_secret, host = nil)
|
13
|
+
Viki::Client.new(client_id, client_secret, host)
|
14
14
|
end
|
15
15
|
|
16
16
|
end
|
data/spec/lib/client_spec.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Viki::Client do
|
4
|
+
before { Viki::Client.any_instance.stub(:auth_request) }
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def client
|
9
|
-
Viki::Client.new('chickenrice', 'soronerychickenrice')
|
10
|
-
end
|
6
|
+
def client(domain = nil)
|
7
|
+
domain ? Viki::Client.new('foo', 'bar', host=domain) : Viki::Client.new('foo', 'bar')
|
8
|
+
end
|
11
9
|
|
10
|
+
describe "method delegation" do
|
12
11
|
it "should raise NoMethodError error if part of the call chain is not part of the URL_NAMESPACES list" do
|
13
12
|
expect { client.methodwrong.subtitles('en') }.to raise_error(NoMethodError)
|
14
13
|
end
|
@@ -17,4 +16,14 @@ describe Viki::Client do
|
|
17
16
|
client.movies(1234).should be_an_instance_of(Viki::Request)
|
18
17
|
end
|
19
18
|
end
|
19
|
+
|
20
|
+
describe "API host toggling" do
|
21
|
+
it "should set host to http://www.viki.com when no domain parameter is set" do
|
22
|
+
client.instance_variable_get(:@host).should == 'http://www.viki.com'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set host to custom host if domain parameter is set" do
|
26
|
+
client(host = "http://test.com").instance_variable_get(:@host).should == 'http://test.com'
|
27
|
+
end
|
28
|
+
end
|
20
29
|
end
|
data/spec/lib/request_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Viki::Request do
|
4
|
+
DEFAULT_HOST = "http://www.viki.com"
|
5
|
+
|
4
6
|
before do
|
5
7
|
Viki::Client.any_instance.stub(:auth_request)
|
6
8
|
end
|
@@ -13,13 +15,13 @@ describe Viki::Request do
|
|
13
15
|
it "should perform a request to the right url given a call chain" do
|
14
16
|
req = client.movies(1234).subtitles('en')
|
15
17
|
req.should_receive(:request).with([{ :name => :movies, :resource => 1234 },
|
16
|
-
{ :name => :subtitles, :resource => "en" }])
|
18
|
+
{ :name => :subtitles, :resource => "en" }], DEFAULT_HOST)
|
17
19
|
req.get
|
18
20
|
end
|
19
21
|
|
20
22
|
it "should perform a request with the right params given a call chain" do
|
21
23
|
req = client.movies(1234, { genre: 2 })
|
22
|
-
req.should_receive(:request).with([{ :name => :movies, :resource => 1234, :params => { genre: 2 } }])
|
24
|
+
req.should_receive(:request).with([{ :name => :movies, :resource => 1234, :params => { genre: 2 } }], DEFAULT_HOST)
|
23
25
|
req.get
|
24
26
|
end
|
25
27
|
|
@@ -40,14 +40,6 @@ describe "Viki" do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
44
|
-
it "should raise an error when platform parameter is given without watchable_in" do
|
45
|
-
VCR.use_cassette "movie/platform_filter_error" do
|
46
|
-
query_options.merge!({ :platform => 'mobile' })
|
47
|
-
lambda { results }.should raise_error(Viki::Error,
|
48
|
-
"Require watchable_in parameter when given platform parameter")
|
49
|
-
end
|
50
|
-
end
|
51
43
|
end
|
52
44
|
|
53
45
|
describe "/movies/:id" do
|
@@ -93,9 +85,13 @@ describe "Viki" do
|
|
93
85
|
it "should return a list of video qualities with links to hardsubbed videos" do
|
94
86
|
VCR.use_cassette "movies/hardsubs" do
|
95
87
|
response = client.movies(64135).hardsubs.get
|
96
|
-
response.count.
|
88
|
+
response.count.should_not == 1
|
97
89
|
hardsubs = response.content
|
98
|
-
hardsubs
|
90
|
+
hardsubs.each do |h|
|
91
|
+
h["language_code"].should_not be_empty
|
92
|
+
h["resolution"].should_not be_empty
|
93
|
+
h["url"].should_not be_empty
|
94
|
+
end
|
99
95
|
end
|
100
96
|
end
|
101
97
|
end
|
@@ -122,7 +118,7 @@ describe "Viki" do
|
|
122
118
|
end
|
123
119
|
|
124
120
|
describe "when HTTP timeout" do
|
125
|
-
before { stub_request(:
|
121
|
+
before { stub_request(:get, /www.viki.com/).to_return(:status => [408]) }
|
126
122
|
it "should handle timeout gracefully" do
|
127
123
|
expect { client.movies.get }.should raise_error(Viki::Error, "Timeout error")
|
128
124
|
end
|
@@ -210,5 +206,31 @@ describe "Viki" do
|
|
210
206
|
results.should be_instance_of(Viki::APIObject)
|
211
207
|
end
|
212
208
|
end
|
209
|
+
|
210
|
+
describe "Custom Domain" do
|
211
|
+
let(:vikiping_client_id) { "4bd5edd4ba26ac2f3ad9d204dc6359ea8a3ebe2c95b6bc1a9195c0ce5c57d392"}
|
212
|
+
let(:vikiping_client_secret) { "f3b796a1eb6e06458a502a89171a494a9160775ed4f4e9e0008c638f7e7e7d38" }
|
213
|
+
let(:custom_client) do
|
214
|
+
VCR.use_cassette "custom_auth" do
|
215
|
+
Viki.new(vikiping_client_id, vikiping_client_secret, 'http://www.vikiping.com')
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context "when initialized with a domain parameter" do
|
220
|
+
it "should contact the custom domain" do
|
221
|
+
stub_request(:get, /www.vikiping.com/).to_return(:body => '{"success": "custom"}')
|
222
|
+
results = custom_client.movies.get
|
223
|
+
results.content['success'].should == 'custom'
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
context "when not initialized with a domain parameter" do
|
228
|
+
it "should contact the default domain" do
|
229
|
+
stub_request(:get, /www.viki.com/).to_return(:body => '{"success": "default"}')
|
230
|
+
results = client.movies.get
|
231
|
+
results.content['success'].should == 'default'
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
213
235
|
end
|
214
236
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: viki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-09-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|