yt 0.25.24 → 0.25.25
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/CHANGELOG.md +4 -0
- data/README.md +16 -0
- data/lib/yt.rb +2 -1
- data/lib/yt/models/comment_thread.rb +30 -0
- data/lib/yt/models/snippet.rb +12 -1
- data/lib/yt/version.rb +1 -1
- data/spec/models/comment_thread_spec.rb +61 -0
- data/spec/requests/as_server_app/comment_thread_spec.rb +26 -0
- metadata +7 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1335f7c1a7bb273da431dd594490731ecbcb54a7
|
|
4
|
+
data.tar.gz: 16c2b3b3b522e228be01312e2e453f2a431928a8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 74d26b785280270e58896fba613dea5a2a167d1e9b134ab65130d01c8cee34b16328cbea597f6cb37b3754a1d04cd6bfc44a3e324f130f589522deeaa813a26e
|
|
7
|
+
data.tar.gz: b716f6a38a7c55e3037377600571b555c5cc07973600485b0e1003ffdf20e205e2e667bdb4058f4c029df3ece0d4228e214bdad3f3b099d7c97f6c6a669916c2
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,10 @@ For more information about changelogs, check
|
|
|
6
6
|
[Keep a Changelog](http://keepachangelog.com) and
|
|
7
7
|
[Vandamme](http://tech-angels.github.io/vandamme).
|
|
8
8
|
|
|
9
|
+
## 0.25.25 - 2016-03-24
|
|
10
|
+
|
|
11
|
+
* [FEATURE] Add Yt::CommentThread resource.
|
|
12
|
+
|
|
9
13
|
## 0.25.24 - 2016-03-02
|
|
10
14
|
|
|
11
15
|
* [BUGFIX] When `videos.where(..)` returns more than one page, don’t retain the items for the next request.
|
data/README.md
CHANGED
|
@@ -116,6 +116,22 @@ Yt::PlaylistItem
|
|
|
116
116
|
|
|
117
117
|
Check [fullscreen.github.io/yt](http://fullscreen.github.io/yt/playlist_items.html) for the list of methods available for `Yt::PlaylistItem`.
|
|
118
118
|
|
|
119
|
+
Yt::CommentThread
|
|
120
|
+
----------------
|
|
121
|
+
|
|
122
|
+
Use [Yt::CommentThread](http://www.rubydoc.info/gems/yt/Yt/Models/CommentThread) to:
|
|
123
|
+
|
|
124
|
+
* Show details of a comment_thread
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
Yt::CommentThread.new id: 'z13vsnnbwtv4sbnug232erczcmi3wzaug'
|
|
128
|
+
|
|
129
|
+
comment_thread.video_id #=> "1234"
|
|
130
|
+
comment_thread.total_reply_count #=> 1
|
|
131
|
+
comment_thread.can_reply? #=> true
|
|
132
|
+
comment_thread.public? #=> true
|
|
133
|
+
```
|
|
134
|
+
|
|
119
135
|
Yt::Collections::Videos
|
|
120
136
|
-----------------------
|
|
121
137
|
|
data/lib/yt.rb
CHANGED
|
@@ -11,6 +11,7 @@ require 'yt/models/playlist'
|
|
|
11
11
|
require 'yt/models/playlist_item'
|
|
12
12
|
require 'yt/models/video'
|
|
13
13
|
require 'yt/models/video_group'
|
|
14
|
+
require 'yt/models/comment_thread'
|
|
14
15
|
require 'yt/models/ownership'
|
|
15
16
|
require 'yt/models/advertising_options_set'
|
|
16
17
|
|
|
@@ -20,4 +21,4 @@ require 'yt/models/advertising_options_set'
|
|
|
20
21
|
# ...), YouTube Analytics API V2 resources (metrics, earnings, ...), and
|
|
21
22
|
# objects not available through the API (annotations).
|
|
22
23
|
module Yt
|
|
23
|
-
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'yt/models/resource'
|
|
2
|
+
|
|
3
|
+
module Yt
|
|
4
|
+
module Models
|
|
5
|
+
# Provides methods to interact with YouTube channels.
|
|
6
|
+
# @see https://developers.google.com/youtube/v3/docs/commentThreads
|
|
7
|
+
class CommentThread < Resource
|
|
8
|
+
|
|
9
|
+
### SNIPPET ###
|
|
10
|
+
|
|
11
|
+
# @!attribute [r] video_id
|
|
12
|
+
# @return [String] the ID of the video that the comments refer to, if
|
|
13
|
+
# any. If this property is not present or does not have a value, then
|
|
14
|
+
# the thread applies to the channel and not to a specific video.
|
|
15
|
+
delegate :video_id, to: :snippet
|
|
16
|
+
|
|
17
|
+
# @!attribute [r] total_reply_count
|
|
18
|
+
# @return [String] The total number of replies that have been submitted
|
|
19
|
+
# in response to the top-level comment.
|
|
20
|
+
delegate :total_reply_count, to: :snippet
|
|
21
|
+
|
|
22
|
+
# @return [Boolean] whether the thread, including all of its comments and
|
|
23
|
+
# comment replies, is visible to all YouTube users.
|
|
24
|
+
delegate :public?, to: :snippet
|
|
25
|
+
|
|
26
|
+
# @return [Boolean] whether the current viewer can reply to the thread.
|
|
27
|
+
delegate :can_reply?, to: :snippet
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/yt/models/snippet.rb
CHANGED
|
@@ -8,6 +8,7 @@ module Yt
|
|
|
8
8
|
# @see https://developers.google.com/youtube/v3/docs/videos#resource
|
|
9
9
|
# @see https://developers.google.com/youtube/v3/docs/playlists#resource
|
|
10
10
|
# @see https://developers.google.com/youtube/v3/docs/playlistItems#resource
|
|
11
|
+
# @see https://developers.google.com/youtube/v3/docs/commentThread#resource
|
|
11
12
|
class Snippet < Base
|
|
12
13
|
attr_reader :data
|
|
13
14
|
|
|
@@ -28,11 +29,21 @@ module Yt
|
|
|
28
29
|
has_attribute :position, type: Integer
|
|
29
30
|
has_attribute :resource_id, default: {}
|
|
30
31
|
has_attribute :thumbnails, default: {}
|
|
32
|
+
has_attribute :video_id
|
|
33
|
+
has_attribute :total_reply_count, type: Integer
|
|
31
34
|
|
|
32
35
|
def thumbnail_url(size = :default)
|
|
33
36
|
thumbnails.fetch(size.to_s, {})['url']
|
|
34
37
|
end
|
|
35
38
|
|
|
39
|
+
def public?
|
|
40
|
+
@public ||= data.fetch 'isPublic', false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def can_reply?
|
|
44
|
+
@can_reply ||= data.fetch 'canReply', false
|
|
45
|
+
end
|
|
46
|
+
|
|
36
47
|
# Returns whether YouTube API includes all attributes in this snippet.
|
|
37
48
|
# For instance, YouTube API only returns tags and categoryId on
|
|
38
49
|
# Videos#list, not on Videos#search. And returns position on
|
|
@@ -47,4 +58,4 @@ module Yt
|
|
|
47
58
|
end
|
|
48
59
|
end
|
|
49
60
|
end
|
|
50
|
-
end
|
|
61
|
+
end
|
data/lib/yt/version.rb
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'yt/models/comment_thread'
|
|
3
|
+
|
|
4
|
+
describe Yt::CommentThread do
|
|
5
|
+
subject(:comment_thread) { Yt::CommentThread.new attrs }
|
|
6
|
+
|
|
7
|
+
describe '#snippet' do
|
|
8
|
+
context 'given fetching a comment thread returns a snippet' do
|
|
9
|
+
let(:attrs) { {snippet: {"videoId" => "12345"}} }
|
|
10
|
+
it { expect(comment_thread.snippet).to be_a Yt::Snippet }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe '#video_id' do
|
|
15
|
+
context 'given a snippet with a video id' do
|
|
16
|
+
let(:attrs) { {snippet: {"videoId"=>"12345"}} }
|
|
17
|
+
it { expect(comment_thread.video_id).to eq '12345' }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context 'given a snippet without a video id' do
|
|
21
|
+
let(:attrs) { {snippet: {}} }
|
|
22
|
+
it { expect(comment_thread.video_id).to be_nil }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe '#total_reply_count' do
|
|
27
|
+
context 'given a snippet with a total reply count' do
|
|
28
|
+
let(:attrs) { {snippet: {"totalReplyCount"=>1}} }
|
|
29
|
+
it { expect(comment_thread.total_reply_count).to eq 1 }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'given a snippet without a total reply count' do
|
|
33
|
+
let(:attrs) { {snippet: {}} }
|
|
34
|
+
it { expect(comment_thread.total_reply_count).to be_nil }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe '#can_reply?' do
|
|
39
|
+
context 'given a snippet with canReply set' do
|
|
40
|
+
let(:attrs) { {snippet: {"canReply"=>true}} }
|
|
41
|
+
it { expect(comment_thread.can_reply?).to be true }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'given a snippet without canReply set' do
|
|
45
|
+
let(:attrs) { {snippet: {}} }
|
|
46
|
+
it { expect(comment_thread.can_reply?).to be false }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '#is_public?' do
|
|
51
|
+
context 'given a snippet with isPublic set' do
|
|
52
|
+
let(:attrs) { {snippet: {"isPublic"=>true}} }
|
|
53
|
+
it { expect(comment_thread).to be_public }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'given a snippet without isPublic set' do
|
|
57
|
+
let(:attrs) { {snippet: {}} }
|
|
58
|
+
it { expect(comment_thread).to_not be_public }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'yt/models/comment_thread'
|
|
3
|
+
|
|
4
|
+
describe Yt::CommentThread, :server_app do
|
|
5
|
+
subject(:comment_thread) { Yt::CommentThread.new attrs }
|
|
6
|
+
|
|
7
|
+
context 'given an existing comment thread ID about a channel' do
|
|
8
|
+
let(:attrs) { {id: 'z13vsnnbwtv4sbnug232erczcmi3wzaug'} }
|
|
9
|
+
|
|
10
|
+
it { expect(comment_thread.video_id).to be_nil }
|
|
11
|
+
it { expect(comment_thread.total_reply_count).to be_an Integer }
|
|
12
|
+
it { expect(comment_thread.can_reply?).to be false }
|
|
13
|
+
it { expect(comment_thread).to be_public }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context 'given an comment thread ID about a video' do
|
|
17
|
+
let(:attrs) { {id: 'z13ij10h2z3qxpcte23hc5oh2vfzeptk4'} }
|
|
18
|
+
it { expect(comment_thread.video_id).to be_a String }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'given an unknown comment thread ID' do
|
|
22
|
+
let(:attrs) { {id: 'not-a-comment-thread-id'} }
|
|
23
|
+
it { expect{comment_thread.total_reply_count}.to raise_error Yt::Errors::NoItems }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
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.25.
|
|
4
|
+
version: 0.25.25
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Claudio Baccigalupo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-03-
|
|
11
|
+
date: 2016-03-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -189,6 +189,7 @@ files:
|
|
|
189
189
|
- lib/yt/models/claim.rb
|
|
190
190
|
- lib/yt/models/claim_event.rb
|
|
191
191
|
- lib/yt/models/claim_history.rb
|
|
192
|
+
- lib/yt/models/comment_thread.rb
|
|
192
193
|
- lib/yt/models/configuration.rb
|
|
193
194
|
- lib/yt/models/content_detail.rb
|
|
194
195
|
- lib/yt/models/content_owner.rb
|
|
@@ -248,6 +249,7 @@ files:
|
|
|
248
249
|
- spec/models/claim_event_spec.rb
|
|
249
250
|
- spec/models/claim_history_spec.rb
|
|
250
251
|
- spec/models/claim_spec.rb
|
|
252
|
+
- spec/models/comment_thread_spec.rb
|
|
251
253
|
- spec/models/configuration_spec.rb
|
|
252
254
|
- spec/models/content_detail_spec.rb
|
|
253
255
|
- spec/models/content_owner_detail_spec.rb
|
|
@@ -294,6 +296,7 @@ files:
|
|
|
294
296
|
- spec/requests/as_content_owner/video_group_spec.rb
|
|
295
297
|
- spec/requests/as_content_owner/video_spec.rb
|
|
296
298
|
- spec/requests/as_server_app/channel_spec.rb
|
|
299
|
+
- spec/requests/as_server_app/comment_thread_spec.rb
|
|
297
300
|
- spec/requests/as_server_app/playlist_item_spec.rb
|
|
298
301
|
- spec/requests/as_server_app/playlist_spec.rb
|
|
299
302
|
- spec/requests/as_server_app/video_spec.rb
|
|
@@ -351,6 +354,7 @@ test_files:
|
|
|
351
354
|
- spec/models/claim_event_spec.rb
|
|
352
355
|
- spec/models/claim_history_spec.rb
|
|
353
356
|
- spec/models/claim_spec.rb
|
|
357
|
+
- spec/models/comment_thread_spec.rb
|
|
354
358
|
- spec/models/configuration_spec.rb
|
|
355
359
|
- spec/models/content_detail_spec.rb
|
|
356
360
|
- spec/models/content_owner_detail_spec.rb
|
|
@@ -397,6 +401,7 @@ test_files:
|
|
|
397
401
|
- spec/requests/as_content_owner/video_group_spec.rb
|
|
398
402
|
- spec/requests/as_content_owner/video_spec.rb
|
|
399
403
|
- spec/requests/as_server_app/channel_spec.rb
|
|
404
|
+
- spec/requests/as_server_app/comment_thread_spec.rb
|
|
400
405
|
- spec/requests/as_server_app/playlist_item_spec.rb
|
|
401
406
|
- spec/requests/as_server_app/playlist_spec.rb
|
|
402
407
|
- spec/requests/as_server_app/video_spec.rb
|