yt 0.4.10 → 0.5.3
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/HISTORY.md +10 -0
- data/README.md +7 -3
- data/TODO.md +6 -2
- data/lib/yt/actions/delete.rb +1 -1
- data/lib/yt/actions/delete_all.rb +1 -1
- data/lib/yt/actions/insert.rb +1 -1
- data/lib/yt/actions/list.rb +8 -2
- data/lib/yt/actions/update.rb +1 -1
- data/lib/yt/associations.rb +1 -0
- data/lib/yt/associations/details_sets.rb +1 -1
- data/lib/yt/associations/ids.rb +20 -0
- data/lib/yt/associations/snippets.rb +1 -1
- data/lib/yt/associations/subscriptions.rb +2 -2
- data/lib/yt/associations/user_infos.rb +1 -1
- data/lib/yt/collections/base.rb +1 -0
- data/lib/yt/collections/details_sets.rb +0 -1
- data/lib/yt/collections/ids.rb +22 -0
- data/lib/yt/collections/playlist_items.rb +3 -3
- data/lib/yt/collections/playlists.rb +0 -1
- data/lib/yt/collections/snippets.rb +0 -1
- data/lib/yt/collections/subscriptions.rb +4 -3
- data/lib/yt/collections/user_infos.rb +0 -2
- data/lib/yt/collections/videos.rb +0 -1
- data/lib/yt/errors/base.rb +43 -0
- data/lib/yt/errors/error.rb +8 -0
- data/lib/yt/errors/failed.rb +17 -0
- data/lib/yt/errors/no_items.rb +17 -0
- data/lib/yt/errors/unauthenticated.rb +34 -0
- data/lib/yt/models/account.rb +1 -17
- data/lib/yt/models/base.rb +1 -0
- data/lib/yt/models/description.rb +11 -35
- data/lib/yt/models/id.rb +4 -0
- data/lib/yt/models/request.rb +102 -0
- data/lib/yt/models/resource.rb +13 -2
- data/lib/yt/models/subscription.rb +3 -2
- data/lib/yt/models/url.rb +88 -0
- data/lib/yt/version.rb +1 -1
- data/spec/associations/device_auth/details_sets_spec.rb +1 -1
- data/spec/associations/device_auth/ids_spec.rb +19 -0
- data/spec/associations/device_auth/playlist_items_spec.rb +3 -3
- data/spec/associations/device_auth/snippets_spec.rb +2 -2
- data/spec/associations/device_auth/user_infos_spec.rb +7 -2
- data/spec/associations/server_auth/details_sets_spec.rb +4 -4
- data/spec/associations/server_auth/ids_spec.rb +18 -0
- data/spec/associations/server_auth/snippets_spec.rb +2 -2
- data/spec/collections/playlist_items_spec.rb +25 -5
- data/spec/collections/subscriptions_spec.rb +6 -4
- data/spec/errors/failed_spec.rb +9 -0
- data/spec/errors/no_items_spec.rb +9 -0
- data/spec/errors/unauthenticated_spec.rb +9 -0
- data/spec/models/account_spec.rb +0 -0
- data/spec/models/description_spec.rb +2 -2
- data/spec/models/request_spec.rb +29 -0
- data/spec/models/resource_spec.rb +21 -0
- data/spec/models/subscription_spec.rb +6 -4
- data/spec/models/url_spec.rb +72 -0
- data/spec/support/fail_matcher.rb +14 -0
- metadata +32 -4
- data/lib/yt/actions/request.rb +0 -112
- data/lib/yt/actions/request_error.rb +0 -11
@@ -2,9 +2,14 @@ require 'spec_helper'
|
|
2
2
|
require 'yt/associations/user_infos'
|
3
3
|
|
4
4
|
describe Yt::Associations::UserInfos, scenario: :device_app do
|
5
|
-
|
5
|
+
subject(:account) { Yt::Account.new attrs }
|
6
6
|
|
7
7
|
describe '#user_info' do
|
8
|
-
|
8
|
+
context 'given an existing account' do
|
9
|
+
let(:account) { Yt.configuration.account }
|
10
|
+
it { expect(account.user_info).to be_a Yt::UserInfo }
|
11
|
+
end
|
12
|
+
|
13
|
+
# Note: testing with an unknown account would fail before getting user info
|
9
14
|
end
|
10
15
|
end
|
@@ -2,17 +2,17 @@ require 'spec_helper'
|
|
2
2
|
require 'yt/associations/details_sets'
|
3
3
|
|
4
4
|
describe Yt::Associations::DetailsSets, scenario: :server_app do
|
5
|
-
|
5
|
+
subject(:video) { Yt::Video.new id: video_id }
|
6
6
|
|
7
7
|
describe '#details_set' do
|
8
8
|
context 'given an existing video' do
|
9
|
-
let(:
|
9
|
+
let(:video_id) { 'MESycYJytkU' }
|
10
10
|
it { expect(video.details_set).to be_a Yt::DetailsSet }
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'given an unknown video' do
|
14
|
-
let(:
|
15
|
-
it { expect
|
14
|
+
let(:video_id) { 'not-a-video-id' }
|
15
|
+
it { expect{video.details_set}.to raise_error Yt::Errors::NoItems }
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yt/associations/ids'
|
3
|
+
|
4
|
+
describe Yt::Associations::Ids, scenario: :server_app do
|
5
|
+
subject(:resource) { Yt::Resource.new url: url }
|
6
|
+
|
7
|
+
describe '#id' do
|
8
|
+
context 'given a URL containing an existing username' do
|
9
|
+
let(:url) { 'youtube.com/fullscreen' }
|
10
|
+
it { expect(resource.id).to eq 'UCxO1tY8h1AhOz0T4ENwmpow' }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'given a URL containing an unknown username' do
|
14
|
+
let(:url) { 'youtube.com/--not--a--valid--username' }
|
15
|
+
it { expect{resource.id}.to raise_error Yt::Errors::NoItems }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -12,7 +12,7 @@ describe Yt::Associations::Snippets, scenario: :server_app do
|
|
12
12
|
|
13
13
|
context 'given an unknown video resource' do
|
14
14
|
let(:video) { Yt::Video.new id: 'not-a-video-id' }
|
15
|
-
it { expect
|
15
|
+
it { expect{video.snippet}.to raise_error Yt::Errors::NoItems }
|
16
16
|
end
|
17
17
|
|
18
18
|
context 'given an existing channel resource' do
|
@@ -22,7 +22,7 @@ describe Yt::Associations::Snippets, scenario: :server_app do
|
|
22
22
|
|
23
23
|
context 'given an unknown channel resource' do
|
24
24
|
let(:channel) { Yt::Channel.new id: 'not-a-channel-id' }
|
25
|
-
it { expect
|
25
|
+
it { expect{channel.snippet}.to raise_error Yt::Errors::NoItems }
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -4,16 +4,36 @@ require 'yt/collections/playlist_items'
|
|
4
4
|
|
5
5
|
describe Yt::Collections::PlaylistItems do
|
6
6
|
subject(:collection) { Yt::Collections::PlaylistItems.new parent: playlist }
|
7
|
-
let(:playlist) { Yt::Playlist.new }
|
7
|
+
let(:playlist) { Yt::Playlist.new id: 'LLxO1tY8h1AhOz0T4ENwmpow' }
|
8
|
+
let(:attrs) { {id: 'MESycYJytkU', kind: :video} }
|
9
|
+
let(:response_body) { %Q{{"error":{"errors":[{"reason":"#{reason}"}]}}} }
|
10
|
+
let(:msg) { {response: {body: response_body}}.to_json }
|
8
11
|
|
9
12
|
describe '#insert' do
|
10
13
|
let(:playlist_item) { Yt::PlaylistItem.new }
|
11
|
-
# TODO: separate stubs to show options translate into do_insert params
|
12
|
-
before { collection.stub(:do_insert).and_return playlist_item }
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
context 'given an existing video' do
|
16
|
+
before { collection.stub(:do_insert).and_return playlist_item }
|
17
|
+
|
18
|
+
it { expect(collection.insert attrs).to eq playlist_item }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'given an unknown video' do
|
22
|
+
let(:reason) { 'videoNotFound' }
|
23
|
+
before { collection.stub(:do_insert).and_raise Yt::Errors::Failed, msg }
|
16
24
|
|
25
|
+
it { expect{collection.insert attrs}.to fail.with 'videoNotFound' }
|
26
|
+
it { expect{collection.insert attrs, ignore_errors: true}.not_to fail }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'given a forbidden video' do
|
30
|
+
let(:reason) { 'forbidden' }
|
31
|
+
before { collection.stub(:do_insert).and_raise Yt::Errors::Failed, msg }
|
32
|
+
|
33
|
+
it { expect{collection.insert attrs}.to fail.with 'forbidden' }
|
34
|
+
it { expect{collection.insert attrs, ignore_errors: true}.not_to fail }
|
35
|
+
end
|
36
|
+
end
|
17
37
|
|
18
38
|
describe '#delete_all' do
|
19
39
|
before { collection.stub(:do_delete_all).and_return [true] }
|
@@ -4,6 +4,8 @@ require 'yt/collections/subscriptions'
|
|
4
4
|
describe Yt::Collections::Subscriptions do
|
5
5
|
subject(:collection) { Yt::Collections::Subscriptions.new }
|
6
6
|
before { collection.stub :throttle }
|
7
|
+
let(:response_body) { %Q{{"error":{"errors":[{"reason":"#{reason}"}]}}} }
|
8
|
+
let(:msg) { {response: {body: response_body}}.to_json }
|
7
9
|
|
8
10
|
describe '#insert' do
|
9
11
|
context 'given a new subscription' do
|
@@ -14,11 +16,11 @@ describe Yt::Collections::Subscriptions do
|
|
14
16
|
end
|
15
17
|
|
16
18
|
context 'given a duplicate subscription' do
|
17
|
-
let(:
|
18
|
-
before { collection.stub(:do_insert).and_raise Yt::
|
19
|
+
let(:reason) { 'subscriptionDuplicate' }
|
20
|
+
before { collection.stub(:do_insert).and_raise Yt::Errors::Failed, msg }
|
19
21
|
|
20
|
-
it { expect{collection.insert}.to
|
21
|
-
it { expect{collection.insert
|
22
|
+
it { expect{collection.insert}.to fail.with 'subscriptionDuplicate' }
|
23
|
+
it { expect{collection.insert ignore_errors: true}.not_to fail }
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yt/errors/unauthenticated'
|
3
|
+
|
4
|
+
describe Yt::Errors::Unauthenticated do
|
5
|
+
let(:msg) { %r{request.+?without the required authentication} }
|
6
|
+
describe '#exception' do
|
7
|
+
it { expect{raise Yt::Errors::Unauthenticated}.to raise_error msg }
|
8
|
+
end
|
9
|
+
end
|
File without changes
|
@@ -21,7 +21,7 @@ describe Yt::Description do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'with a video long URL' do
|
24
|
-
let(:text) { 'Link to video: youtube.com/watch?v=MESycYJytkU' }
|
24
|
+
let(:text) { 'example.com and Link to video: youtube.com/watch?v=MESycYJytkU' }
|
25
25
|
it { expect(description).to have_link_to_video }
|
26
26
|
end
|
27
27
|
|
@@ -33,7 +33,7 @@ describe Yt::Description do
|
|
33
33
|
|
34
34
|
describe '#has_link_to_channel?' do
|
35
35
|
context 'without a channel URL' do
|
36
|
-
let(:text) { '
|
36
|
+
let(:text) { 'youtu.be/MESycYJytkU is a video link' }
|
37
37
|
it { expect(description).not_to have_link_to_channel }
|
38
38
|
end
|
39
39
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yt/models/request'
|
3
|
+
|
4
|
+
describe Yt::Request do
|
5
|
+
subject(:request) { Yt::Request.new attrs }
|
6
|
+
let(:attrs) { {} }
|
7
|
+
|
8
|
+
describe '#run' do
|
9
|
+
context 'given a request to YouTube V3 API without authentication' do
|
10
|
+
let(:attrs) { {host: 'www.googleapis.com'} }
|
11
|
+
before{ Yt.configuration.api_key = nil }
|
12
|
+
it { expect{request.run}.to raise_error Yt::Errors::Unauthenticated }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'given a request that returns a non-2XX code' do
|
16
|
+
let(:not_found) { Net::HTTPNotFound.new nil, nil, nil }
|
17
|
+
before { Net::HTTP.stub(:start).and_return not_found }
|
18
|
+
before { not_found.stub(:body) }
|
19
|
+
it { expect{request.run}.to fail }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'given a request that returns a 2XX code' do
|
23
|
+
let(:ok) { Net::HTTPOK.new nil, nil, nil }
|
24
|
+
before { Net::HTTP.stub(:start).and_return ok }
|
25
|
+
before { ok.stub(:body) }
|
26
|
+
it { expect{request.run}.not_to fail }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yt/models/resource'
|
3
|
+
|
4
|
+
describe Yt::Resource do
|
5
|
+
subject(:resource) { Yt::Resource.new attrs }
|
6
|
+
|
7
|
+
context 'given a resource initialized with a URL (containing an ID)' do
|
8
|
+
let(:attrs) { {url: 'youtu.be/MESycYJytkU'} }
|
9
|
+
|
10
|
+
it { expect(resource.id).to eq 'MESycYJytkU' }
|
11
|
+
it { expect(resource.kind).to eq 'video' }
|
12
|
+
it { expect(resource.username).to be_nil }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'given a resource initialized with a URL (containing a username)' do
|
16
|
+
let(:attrs) { {url: 'youtube.com/fullscreen'} }
|
17
|
+
|
18
|
+
it { expect(resource.kind).to eq 'channel' }
|
19
|
+
it { expect(resource.username).to eq 'fullscreen' }
|
20
|
+
end
|
21
|
+
end
|
@@ -3,6 +3,8 @@ require 'yt/models/subscription'
|
|
3
3
|
|
4
4
|
describe Yt::Subscription do
|
5
5
|
subject(:subscription) { Yt::Subscription.new id: id }
|
6
|
+
let(:response_body) { %Q{{"error":{"errors":[{"reason":"#{reason}"}]}}} }
|
7
|
+
let(:msg) { {response: {body: response_body}}.to_json }
|
6
8
|
|
7
9
|
describe '#exists?' do
|
8
10
|
context 'given a subscription with an id' do
|
@@ -27,11 +29,11 @@ describe Yt::Subscription do
|
|
27
29
|
end
|
28
30
|
|
29
31
|
context 'given an unknown subscription' do
|
30
|
-
let(:
|
31
|
-
before { subscription.stub(:do_delete).and_raise Yt::
|
32
|
+
let(:reason) { 'subscriptionNotFound' }
|
33
|
+
before { subscription.stub(:do_delete).and_raise Yt::Errors::Failed, msg }
|
32
34
|
|
33
|
-
it { expect{subscription.delete}.to
|
34
|
-
it { expect{subscription.delete
|
35
|
+
it { expect{subscription.delete}.to fail.with 'subscriptionNotFound' }
|
36
|
+
it { expect{subscription.delete ignore_errors: true}.not_to fail }
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'yt/models/url'
|
5
|
+
|
6
|
+
describe Yt::URL do
|
7
|
+
subject(:url) { Yt::URL.new text }
|
8
|
+
|
9
|
+
context 'given a long video URL' do
|
10
|
+
let(:text) { 'youtube.com/watch?v=MESycYJytkU' }
|
11
|
+
it {expect(url.kind).to eq :video }
|
12
|
+
it {expect(url.id).to eq 'MESycYJytkU' }
|
13
|
+
it {expect(url.username).to be_nil }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'given a short video URL' do
|
17
|
+
let(:text) { 'https://youtu.be/MESycYJytkU' }
|
18
|
+
it {expect(url.kind).to eq :video }
|
19
|
+
it {expect(url.id).to eq 'MESycYJytkU' }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'given a long channel URL' do
|
23
|
+
let(:text) { 'http://youtube.com/channel/UCxO1tY8h1AhOz0T4ENwmpow' }
|
24
|
+
it {expect(url.kind).to eq :channel }
|
25
|
+
it {expect(url.id).to eq 'UCxO1tY8h1AhOz0T4ENwmpow' }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'given a short channel URL' do
|
29
|
+
let(:text) { 'https://www.youtube.com/Fullscreen' }
|
30
|
+
it {expect(url.kind).to eq :channel }
|
31
|
+
it {expect(url.username).to eq 'Fullscreen' }
|
32
|
+
it {expect(url.id).to be_nil }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'given a user’s channel URL' do
|
36
|
+
let(:text) { 'https://www.youtube.com/user/Fullscreen' }
|
37
|
+
it {expect(url.kind).to eq :channel }
|
38
|
+
it {expect(url.username).to eq 'Fullscreen' }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'given a subscription center URL' do
|
42
|
+
let(:text) { 'youtube.com/subscription_center?add_user=Fullscreen' }
|
43
|
+
it {expect(url.kind).to eq :subscription }
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'given a subscription widget URL' do
|
47
|
+
let(:text) { 'youtube.com/subscribe_widget?p=Fullscreen' }
|
48
|
+
it {expect(url.kind).to eq :subscription }
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'given a subscription confirmation URL' do
|
52
|
+
let(:text) { 'youtube.com/channel/UCxO1tY8h1AhOz0T4ENwmpow?sub_confirmation=1' }
|
53
|
+
it {expect(url.kind).to eq :subscription }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'given a long playlist URL' do
|
57
|
+
let(:text) { 'youtube.com/playlist?list=LLxO1tY8h1AhOz0T4ENwmpow' }
|
58
|
+
it {expect(url.kind).to eq :playlist }
|
59
|
+
it {expect(url.id).to eq 'LLxO1tY8h1AhOz0T4ENwmpow' }
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'given a video-embed playlist URL' do
|
63
|
+
let(:text) { 'youtube.com/watch?v=MESycYJytkU&list=LLxO1tY8h1AhOz0T4ENwmpow' }
|
64
|
+
it {expect(url.kind).to eq :playlist }
|
65
|
+
it {expect(url.id).to eq 'LLxO1tY8h1AhOz0T4ENwmpow' }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'given a valid URL with a trailing slash' do
|
69
|
+
let(:text) { 'https://www.youtube.com/user/Fullscreen/' }
|
70
|
+
it {expect(url.kind).to eq :channel }
|
71
|
+
end
|
72
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -121,13 +121,12 @@ files:
|
|
121
121
|
- lib/yt/actions/delete_all.rb
|
122
122
|
- lib/yt/actions/insert.rb
|
123
123
|
- lib/yt/actions/list.rb
|
124
|
-
- lib/yt/actions/request.rb
|
125
|
-
- lib/yt/actions/request_error.rb
|
126
124
|
- lib/yt/actions/update.rb
|
127
125
|
- lib/yt/associations.rb
|
128
126
|
- lib/yt/associations/annotations.rb
|
129
127
|
- lib/yt/associations/channels.rb
|
130
128
|
- lib/yt/associations/details_sets.rb
|
129
|
+
- lib/yt/associations/ids.rb
|
131
130
|
- lib/yt/associations/playlist_items.rb
|
132
131
|
- lib/yt/associations/playlists.rb
|
133
132
|
- lib/yt/associations/ratings.rb
|
@@ -140,6 +139,7 @@ files:
|
|
140
139
|
- lib/yt/collections/base.rb
|
141
140
|
- lib/yt/collections/channels.rb
|
142
141
|
- lib/yt/collections/details_sets.rb
|
142
|
+
- lib/yt/collections/ids.rb
|
143
143
|
- lib/yt/collections/playlist_items.rb
|
144
144
|
- lib/yt/collections/playlists.rb
|
145
145
|
- lib/yt/collections/ratings.rb
|
@@ -148,6 +148,11 @@ files:
|
|
148
148
|
- lib/yt/collections/user_infos.rb
|
149
149
|
- lib/yt/collections/videos.rb
|
150
150
|
- lib/yt/config.rb
|
151
|
+
- lib/yt/errors/base.rb
|
152
|
+
- lib/yt/errors/error.rb
|
153
|
+
- lib/yt/errors/failed.rb
|
154
|
+
- lib/yt/errors/no_items.rb
|
155
|
+
- lib/yt/errors/unauthenticated.rb
|
151
156
|
- lib/yt/models/account.rb
|
152
157
|
- lib/yt/models/annotation.rb
|
153
158
|
- lib/yt/models/base.rb
|
@@ -155,18 +160,22 @@ files:
|
|
155
160
|
- lib/yt/models/configuration.rb
|
156
161
|
- lib/yt/models/description.rb
|
157
162
|
- lib/yt/models/details_set.rb
|
163
|
+
- lib/yt/models/id.rb
|
158
164
|
- lib/yt/models/playlist.rb
|
159
165
|
- lib/yt/models/playlist_item.rb
|
160
166
|
- lib/yt/models/rating.rb
|
167
|
+
- lib/yt/models/request.rb
|
161
168
|
- lib/yt/models/resource.rb
|
162
169
|
- lib/yt/models/snippet.rb
|
163
170
|
- lib/yt/models/status.rb
|
164
171
|
- lib/yt/models/subscription.rb
|
172
|
+
- lib/yt/models/url.rb
|
165
173
|
- lib/yt/models/user_info.rb
|
166
174
|
- lib/yt/models/video.rb
|
167
175
|
- lib/yt/version.rb
|
168
176
|
- spec/associations/device_auth/channels_spec.rb
|
169
177
|
- spec/associations/device_auth/details_sets_spec.rb
|
178
|
+
- spec/associations/device_auth/ids_spec.rb
|
170
179
|
- spec/associations/device_auth/playlist_items_spec.rb
|
171
180
|
- spec/associations/device_auth/playlists_spec.rb
|
172
181
|
- spec/associations/device_auth/ratings_spec.rb
|
@@ -177,6 +186,7 @@ files:
|
|
177
186
|
- spec/associations/no_auth/annotations_spec.rb
|
178
187
|
- spec/associations/server_auth/channels_spec.rb
|
179
188
|
- spec/associations/server_auth/details_sets_spec.rb
|
189
|
+
- spec/associations/server_auth/ids_spec.rb
|
180
190
|
- spec/associations/server_auth/playlist_items_spec.rb
|
181
191
|
- spec/associations/server_auth/playlists_spec.rb
|
182
192
|
- spec/associations/server_auth/ratings_spec.rb
|
@@ -194,6 +204,10 @@ files:
|
|
194
204
|
- spec/collections/subscriptions_spec.rb
|
195
205
|
- spec/collections/user_infos_spec.rb
|
196
206
|
- spec/collections/videos_spec.rb
|
207
|
+
- spec/errors/failed_spec.rb
|
208
|
+
- spec/errors/no_items_spec.rb
|
209
|
+
- spec/errors/unauthenticated_spec.rb
|
210
|
+
- spec/models/account_spec.rb
|
197
211
|
- spec/models/annotation_spec.rb
|
198
212
|
- spec/models/channel_spec.rb
|
199
213
|
- spec/models/configuration_spec.rb
|
@@ -202,13 +216,17 @@ files:
|
|
202
216
|
- spec/models/playlist_item_spec.rb
|
203
217
|
- spec/models/playlist_spec.rb
|
204
218
|
- spec/models/rating_spec.rb
|
219
|
+
- spec/models/request_spec.rb
|
220
|
+
- spec/models/resource_spec.rb
|
205
221
|
- spec/models/snippet_spec.rb
|
206
222
|
- spec/models/status_spec.rb
|
207
223
|
- spec/models/subscription_spec.rb
|
224
|
+
- spec/models/url_spec.rb
|
208
225
|
- spec/models/user_info_spec.rb
|
209
226
|
- spec/models/video_spec.rb
|
210
227
|
- spec/spec_helper.rb
|
211
228
|
- spec/support/device_app.rb
|
229
|
+
- spec/support/fail_matcher.rb
|
212
230
|
- spec/support/server_app.rb
|
213
231
|
- yt.gemspec
|
214
232
|
homepage: http://github.com/Fullscreen/yt
|
@@ -239,6 +257,7 @@ summary: Yt makes it easy to interact with Youtube V3 API by providing a modular
|
|
239
257
|
test_files:
|
240
258
|
- spec/associations/device_auth/channels_spec.rb
|
241
259
|
- spec/associations/device_auth/details_sets_spec.rb
|
260
|
+
- spec/associations/device_auth/ids_spec.rb
|
242
261
|
- spec/associations/device_auth/playlist_items_spec.rb
|
243
262
|
- spec/associations/device_auth/playlists_spec.rb
|
244
263
|
- spec/associations/device_auth/ratings_spec.rb
|
@@ -249,6 +268,7 @@ test_files:
|
|
249
268
|
- spec/associations/no_auth/annotations_spec.rb
|
250
269
|
- spec/associations/server_auth/channels_spec.rb
|
251
270
|
- spec/associations/server_auth/details_sets_spec.rb
|
271
|
+
- spec/associations/server_auth/ids_spec.rb
|
252
272
|
- spec/associations/server_auth/playlist_items_spec.rb
|
253
273
|
- spec/associations/server_auth/playlists_spec.rb
|
254
274
|
- spec/associations/server_auth/ratings_spec.rb
|
@@ -266,6 +286,10 @@ test_files:
|
|
266
286
|
- spec/collections/subscriptions_spec.rb
|
267
287
|
- spec/collections/user_infos_spec.rb
|
268
288
|
- spec/collections/videos_spec.rb
|
289
|
+
- spec/errors/failed_spec.rb
|
290
|
+
- spec/errors/no_items_spec.rb
|
291
|
+
- spec/errors/unauthenticated_spec.rb
|
292
|
+
- spec/models/account_spec.rb
|
269
293
|
- spec/models/annotation_spec.rb
|
270
294
|
- spec/models/channel_spec.rb
|
271
295
|
- spec/models/configuration_spec.rb
|
@@ -274,12 +298,16 @@ test_files:
|
|
274
298
|
- spec/models/playlist_item_spec.rb
|
275
299
|
- spec/models/playlist_spec.rb
|
276
300
|
- spec/models/rating_spec.rb
|
301
|
+
- spec/models/request_spec.rb
|
302
|
+
- spec/models/resource_spec.rb
|
277
303
|
- spec/models/snippet_spec.rb
|
278
304
|
- spec/models/status_spec.rb
|
279
305
|
- spec/models/subscription_spec.rb
|
306
|
+
- spec/models/url_spec.rb
|
280
307
|
- spec/models/user_info_spec.rb
|
281
308
|
- spec/models/video_spec.rb
|
282
309
|
- spec/spec_helper.rb
|
283
310
|
- spec/support/device_app.rb
|
311
|
+
- spec/support/fail_matcher.rb
|
284
312
|
- spec/support/server_app.rb
|
285
313
|
has_rdoc:
|