yt 0.20.0 → 0.21.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +2 -2
- data/YOUTUBE_IT.md +4 -4
- data/lib/yt/models/account.rb +128 -31
- data/lib/yt/models/playlist.rb +24 -0
- data/lib/yt/models/playlist_item.rb +11 -0
- data/lib/yt/models/policy_rule.rb +0 -2
- data/lib/yt/models/resource.rb +0 -2
- data/lib/yt/models/snippet.rb +1 -1
- data/lib/yt/models/status.rb +0 -2
- data/lib/yt/models/user_info.rb +4 -27
- data/lib/yt/models/video.rb +2 -4
- data/lib/yt/version.rb +1 -1
- data/spec/models/account_spec.rb +138 -0
- data/spec/requests/as_account/account_spec.rb +4 -7
- data/spec/requests/as_content_owner/content_owner_spec.rb +1 -1
- metadata +2 -4
- data/spec/models/user_info_spec.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a257c84e731d03c889aba6d840ae8945bff703c3
|
4
|
+
data.tar.gz: acddd55c13ed4013e4e8acae7c303e864bbd114b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c82294cbdb20eebf4208eacf95c370afa8044121bf20e8b76514979a3a4d981d2e4a46fdf82cb2915f701c983aeba9802d03405203adee27726b24a83d76a86
|
7
|
+
data.tar.gz: 469b86367d016835333f6a16c06a7f5463246eb4d5c53155d12e5f8274947ec85115cd891db6cda289f138075f3b05b0b156ba384e31e4d1f62207204bbf4741
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,16 @@ 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.21.0 - 2015-04-30
|
10
|
+
|
11
|
+
**How to upgrade**
|
12
|
+
|
13
|
+
If your code doesn’t use `PolicyRule#ACTIONS`, then you are good to go.
|
14
|
+
If it does, then you should redefine the constant in your own app.
|
15
|
+
|
16
|
+
* [REMOVAL] Remove `PolicyRule#ACTIONS` (was `%q(block monetize takedown track)`).
|
17
|
+
* [BUGFIX] Make `account.playlists` and `account.channel.playlists` behave the same.
|
18
|
+
|
9
19
|
## 0.20.0 - 2015-04-29
|
10
20
|
|
11
21
|
**How to upgrade**
|
data/README.md
CHANGED
@@ -41,7 +41,7 @@ To install on your system, run
|
|
41
41
|
|
42
42
|
To use inside a bundled Ruby project, add this line to the Gemfile:
|
43
43
|
|
44
|
-
gem 'yt', '~> 0.
|
44
|
+
gem 'yt', '~> 0.21.0'
|
45
45
|
|
46
46
|
Since the gem follows [Semantic Versioning](http://semver.org),
|
47
47
|
indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
|
@@ -74,7 +74,7 @@ account.channel #=> #<Yt::Models::Channel @id=...>
|
|
74
74
|
account.videos.count #=> 12
|
75
75
|
account.videos.first #=> #<Yt::Models::Video @id=...>
|
76
76
|
|
77
|
-
account.upload_video 'my_video.mp4', title: 'My new video', privacy_status: 'private', category_id: 17
|
77
|
+
account.upload_video 'my_video.mp4', title: 'My new video', privacy_status: 'private', category_id: '17'
|
78
78
|
account.upload_video 'http://example.com/remote.m4v', title: 'My other video', tags: ['music']
|
79
79
|
|
80
80
|
account.create_playlist title: 'New playlist', privacy_status: 'unlisted' #=> true
|
data/YOUTUBE_IT.md
CHANGED
@@ -370,7 +370,7 @@ client = # new client initialized with either OAuth or AuthSub
|
|
370
370
|
client.video_upload(File.open("test.mov"), :title => "test",:description => 'some description', :category => 'People',:keywords => %w[cool blah test])
|
371
371
|
# with yt
|
372
372
|
account = Yt::Account.new access_token: 'access_token'
|
373
|
-
account.upload_video 'test.mov', title: 'test', description: 'some description', category_id: 22, tags: %w(cool blah test)
|
373
|
+
account.upload_video 'test.mov', title: 'test', description: 'some description', category_id: '22', tags: %w(cool blah test)
|
374
374
|
```
|
375
375
|
|
376
376
|
Upload remote video:
|
@@ -381,7 +381,7 @@ client = # new client initialized with either OAuth or AuthSub
|
|
381
381
|
client.video_upload("http://url/myvideo.mp4", :title => "test",:description => 'some description', :category => 'People',:keywords => %w[cool blah test])
|
382
382
|
# with yt
|
383
383
|
account = Yt::Account.new access_token: 'access_token'
|
384
|
-
account.upload_video 'http://url/myvideo.mp4', title: 'test', description: 'some description', category_id: 22, tags: %w(cool blah test)
|
384
|
+
account.upload_video 'http://url/myvideo.mp4', title: 'test', description: 'some description', category_id: '22', tags: %w(cool blah test)
|
385
385
|
```
|
386
386
|
|
387
387
|
Upload video with a developer tag:
|
@@ -401,7 +401,7 @@ client = # new client initialized with either OAuth or AuthSub
|
|
401
401
|
client.video_upload("http://media.railscasts.com/assets/episodes/videos/412-fast-rails-commands.mp4", :title => "test",:description => 'some description', :category => 'People',:keywords => %w[cool blah test])
|
402
402
|
# with yt
|
403
403
|
account = Yt::Account.new access_token: 'access_token'
|
404
|
-
account.upload_video 'http://media.railscasts.com/assets/episodes/videos/412-fast-rails-commands.mp4', title: 'test', description: 'some description', category_id: 22, tags: %w(cool blah test)
|
404
|
+
account.upload_video 'http://media.railscasts.com/assets/episodes/videos/412-fast-rails-commands.mp4', title: 'test', description: 'some description', category_id: '22', tags: %w(cool blah test)
|
405
405
|
```
|
406
406
|
|
407
407
|
Upload private video:
|
@@ -412,7 +412,7 @@ client = # new client initialized with either OAuth or AuthSub
|
|
412
412
|
client.video_upload(File.open("test.mov"), :title => "test",:description => 'some description', :category => 'People',:keywords => %w[cool blah test], :private => true)
|
413
413
|
# with yt
|
414
414
|
account = Yt::Account.new access_token: 'access_token'
|
415
|
-
account.upload_video 'test.mov', privacy_status: :private, title: 'test', description: 'some description', category_id: 22, tags: %w(cool blah test)
|
415
|
+
account.upload_video 'test.mov', privacy_status: :private, title: 'test', description: 'some description', category_id: '22', tags: %w(cool blah test)
|
416
416
|
```
|
417
417
|
|
418
418
|
Update video:
|
data/lib/yt/models/account.rb
CHANGED
@@ -6,47 +6,60 @@ module Yt
|
|
6
6
|
# Provides methods to interact with YouTube accounts.
|
7
7
|
# @see https://developers.google.com/youtube/v3/guides/authentication
|
8
8
|
class Account < Base
|
9
|
-
# @!attribute [r] channel
|
10
|
-
# @return [Yt::Models::Channel] the account’s channel.
|
11
|
-
has_one :channel
|
12
|
-
delegate :playlists, :delete_playlists,
|
13
|
-
:subscribed_channels, to: :channel
|
14
9
|
|
15
|
-
|
16
|
-
|
10
|
+
### USER INFO ###
|
11
|
+
|
17
12
|
has_one :user_info
|
18
|
-
delegate :id, :email, :has_verified_email?, :gender, :name, :given_name,
|
19
|
-
:family_name, :profile_url, :avatar_url, :locale, :hd, to: :user_info
|
20
13
|
|
21
|
-
# @!attribute [r]
|
22
|
-
#
|
23
|
-
|
14
|
+
# @!attribute [r] id
|
15
|
+
# @return [String] the (Google+) account’s ID.
|
16
|
+
delegate :id, to: :user_info
|
24
17
|
|
25
|
-
# @!attribute [r]
|
26
|
-
#
|
27
|
-
|
18
|
+
# @!attribute [r] email
|
19
|
+
# @return [String] the account’s email address.
|
20
|
+
delegate :email, to: :user_info
|
28
21
|
|
29
|
-
# @return [
|
30
|
-
|
31
|
-
|
22
|
+
# @return [Boolean] whether the email address is verified.
|
23
|
+
def has_verified_email?
|
24
|
+
user_info.verified_email
|
25
|
+
end
|
32
26
|
|
33
|
-
|
27
|
+
# @!attribute [r] name
|
28
|
+
# @return [String] the account’s full name.
|
29
|
+
delegate :name, to: :user_info
|
34
30
|
|
35
|
-
# @!attribute [r]
|
36
|
-
#
|
37
|
-
|
38
|
-
has_many :resumable_sessions
|
31
|
+
# @!attribute [r] given_name
|
32
|
+
# @return [String] the user’s given (first) name.
|
33
|
+
delegate :given_name, to: :user_info
|
39
34
|
|
40
|
-
# @!attribute [r]
|
41
|
-
#
|
42
|
-
|
43
|
-
has_many :content_owners
|
35
|
+
# @!attribute [r] family_name
|
36
|
+
# @return [String] the user’s family (last) name.
|
37
|
+
delegate :family_name, to: :user_info
|
44
38
|
|
45
|
-
#
|
46
|
-
|
47
|
-
|
39
|
+
# @return [String] the URL of the account’s (Google +) profile page.
|
40
|
+
def profile_url
|
41
|
+
user_info.link
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [String] the URL of the account’s (Google +) profile picture.
|
45
|
+
def avatar_url
|
46
|
+
user_info.picture
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [String] the account’s gender. Possible values include, but
|
50
|
+
# are not limited to, +'male'+, +'female'+, +'other'+.
|
51
|
+
delegate :gender, to: :user_info
|
48
52
|
|
49
|
-
#
|
53
|
+
# @return [String] the account’s preferred locale.
|
54
|
+
delegate :locale, to: :user_info
|
55
|
+
|
56
|
+
# @return [String] the hosted domain name for the user’s Google Apps
|
57
|
+
# account. For instance, example.com.
|
58
|
+
delegate :hd, to: :user_info
|
59
|
+
|
60
|
+
### ACTIONS ###
|
61
|
+
|
62
|
+
# Uploads a video to the account’s channel.
|
50
63
|
# @param [String] path_or_url the video to upload. Can either be the
|
51
64
|
# path of a local file or the URL of a remote file.
|
52
65
|
# @param [Hash] params the metadata to add to the uploaded video.
|
@@ -64,10 +77,94 @@ module Yt
|
|
64
77
|
end
|
65
78
|
end
|
66
79
|
|
80
|
+
# Creates a playlist in the account’s channel.
|
81
|
+
# @return [Yt::Models::Playlist] the newly created playlist.
|
82
|
+
# @param [Hash] params the attributes of the playlist.
|
83
|
+
# @option params [String] :title The new playlist’s title.
|
84
|
+
# Cannot have more than 100 characters. Can include the characters
|
85
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
86
|
+
# @option params [String] :description The new playlist’s description.
|
87
|
+
# Cannot have more than 5000 bytes. Can include the characters
|
88
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
89
|
+
# @option params [Array<String>] :tags The new playlist’s tags.
|
90
|
+
# Cannot have more than 500 characters. Can include the characters
|
91
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
92
|
+
# @option params [String] :privacy_status The new playlist’s privacy
|
93
|
+
# status. Must be one of: private, unscheduled, public.
|
94
|
+
# @example Create a playlist titled "My favorites".
|
95
|
+
# account.create_playlist title: 'My favorites'
|
67
96
|
def create_playlist(params = {})
|
68
97
|
playlists.insert params
|
69
98
|
end
|
70
99
|
|
100
|
+
# Deletes the account’s playlists matching all the given attributes.
|
101
|
+
# @return [Array<Boolean>] whether each playlist matching the given
|
102
|
+
# attributes was deleted.
|
103
|
+
# @param [Hash] attributes the attributes to match the playlists by.
|
104
|
+
# @option attributes [<String, Regexp>] :title The playlist’s title.
|
105
|
+
# Pass a String for perfect match or a Regexp for advanced match.
|
106
|
+
# @option attributes [<String, Regexp>] :description The playlist’s
|
107
|
+
# description. Pass a String (perfect match) or a Regexp (advanced).
|
108
|
+
# @option attributes [Array<String>] :tags The playlist’s tags.
|
109
|
+
# All tags must match exactly.
|
110
|
+
# @option attributes [String] :privacy_status The playlist’s privacy
|
111
|
+
# status.
|
112
|
+
delegate :delete_playlists, to: :channel
|
113
|
+
|
114
|
+
### CONTENT OWNERS ###
|
115
|
+
|
116
|
+
# @!attribute [r] content_owners
|
117
|
+
# @return [Yt::Collections::ContentOwners] the content owners that
|
118
|
+
# the account can manage.
|
119
|
+
has_many :content_owners
|
120
|
+
|
121
|
+
# @return [String] name of the CMS account, if the account is partnered.
|
122
|
+
# @return [nil] if the account is not a partnered content owner.
|
123
|
+
attr_reader :owner_name
|
124
|
+
|
125
|
+
### ASSOCIATIONS ###
|
126
|
+
|
127
|
+
# @!attribute [r] channel
|
128
|
+
# @return [Yt::Model::Channel] the YouTube channel of the account.
|
129
|
+
has_one :channel
|
130
|
+
|
131
|
+
# @!attribute [r] playlists
|
132
|
+
# @return [Yt::Collections::Playlists] the playlists owned by the account.
|
133
|
+
delegate :playlists, to: :channel
|
134
|
+
|
135
|
+
# @!attribute [r] subscribed_channels
|
136
|
+
# @return [Yt::Collections::SubscribedChannels] the channels that the
|
137
|
+
# account is subscribed to.
|
138
|
+
delegate :subscribed_channels, to: :channel
|
139
|
+
|
140
|
+
# @!attribute [r] videos
|
141
|
+
# @return [Yt::Collections::Videos] the videos owned by the account.
|
142
|
+
has_many :videos
|
143
|
+
|
144
|
+
# @!attribute [r] subscribers
|
145
|
+
# @return [Yt::Collections::Subscribers] the channels subscribed to
|
146
|
+
# the account’s channel.
|
147
|
+
has_many :subscribers
|
148
|
+
|
149
|
+
# @private
|
150
|
+
# @!attribute [r] resumable_sessions
|
151
|
+
# @return [Yt::Collections::ResumableSessions] the sessions used to
|
152
|
+
# upload videos using the resumable upload protocol.
|
153
|
+
has_many :resumable_sessions
|
154
|
+
|
155
|
+
### PRIVATE API ###
|
156
|
+
|
157
|
+
has_authentication
|
158
|
+
|
159
|
+
# @private
|
160
|
+
# Initialize user info if included in the response
|
161
|
+
def initialize(options = {})
|
162
|
+
super options
|
163
|
+
if options[:user_info]
|
164
|
+
@user_info = UserInfo.new data: options[:user_info]
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
71
168
|
# @private
|
72
169
|
# Tells `has_many :videos` that account.videos should return all the
|
73
170
|
# videos *owned by* the account (public, private, unlisted).
|
data/lib/yt/models/playlist.rb
CHANGED
@@ -52,6 +52,30 @@ module Yt
|
|
52
52
|
!exists?
|
53
53
|
end
|
54
54
|
|
55
|
+
# Updates the attributes of a playlist.
|
56
|
+
# @return [Boolean] whether the playlist was successfully updated.
|
57
|
+
# @raise [Yt::Errors::Unauthorized] if {Resource#auth auth} is not an
|
58
|
+
# authenticated Yt::Account with permissions to update the playlist.
|
59
|
+
# @param [Hash] attributes the attributes to update.
|
60
|
+
# @option attributes [String] :title The new playlist’s title.
|
61
|
+
# Cannot have more than 100 characters. Can include the characters
|
62
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
63
|
+
# @option attributes [String] :description The new playlist’s description.
|
64
|
+
# Cannot have more than 5000 bytes. Can include the characters
|
65
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
66
|
+
# @option attributes [Array<String>] :tags The new playlist’s tags.
|
67
|
+
# Cannot have more than 500 characters. Can include the characters
|
68
|
+
# < and >, which are replaced to ‹ › in order to be accepted by YouTube.
|
69
|
+
# @option attributes [String] :privacy_status The new playlist’s privacy
|
70
|
+
# status. Must be one of: private, unscheduled, public.
|
71
|
+
# @example Update title and description of a playlist.
|
72
|
+
# playlist.update title: 'New title', description: 'New description'
|
73
|
+
# @example Update tags and status of a playlist.
|
74
|
+
# playlist.update tags: ['new', 'tags'], privacy_status: 'public'
|
75
|
+
def update(attributes = {})
|
76
|
+
super
|
77
|
+
end
|
78
|
+
|
55
79
|
# Adds a video to the playlist.
|
56
80
|
# Unlike {#add_video!}, does not raise an error if video can’t be added.
|
57
81
|
# @param [String] video_id the video to add to the playlist.
|
@@ -63,6 +63,17 @@ module Yt
|
|
63
63
|
!exists?
|
64
64
|
end
|
65
65
|
|
66
|
+
# Updates the attributes of a playlist item.
|
67
|
+
# @return [Boolean] whether the item was successfully updated.
|
68
|
+
# @raise [Yt::Errors::Unauthorized] if {Resource#auth auth} is not an
|
69
|
+
# authenticated Yt::Account with permissions to update the item.
|
70
|
+
# @param [Hash] attributes the attributes to update.
|
71
|
+
# @option attributes [Integer] the order in which the item should appear
|
72
|
+
# in a playlist. The value is zero-based, so the first position of 0.
|
73
|
+
def update(attributes = {})
|
74
|
+
super
|
75
|
+
end
|
76
|
+
|
66
77
|
### ASSOCIATIONS ###
|
67
78
|
|
68
79
|
# @return [Yt::Models::Video] the video referred by the item.
|
@@ -11,8 +11,6 @@ module Yt
|
|
11
11
|
@data = options[:data]
|
12
12
|
end
|
13
13
|
|
14
|
-
ACTIONS = %q(block monetize takedown track)
|
15
|
-
|
16
14
|
# Return the policy that YouTube should enforce if the rule’s conditions
|
17
15
|
# are all valid for an asset or for an attempt to view that asset on
|
18
16
|
# YouTube. Possible values are: +'block'+, +'monetize'+, +'takedown'+,
|
data/lib/yt/models/resource.rb
CHANGED
data/lib/yt/models/snippet.rb
CHANGED
@@ -2,7 +2,7 @@ require 'yt/models/description'
|
|
2
2
|
|
3
3
|
module Yt
|
4
4
|
module Models
|
5
|
-
# Provides methods to interact with the snippet YouTube resources.
|
5
|
+
# Provides methods to interact with the snippet of YouTube resources.
|
6
6
|
# @see https://developers.google.com/youtube/v3/docs/channels#resource
|
7
7
|
# @see https://developers.google.com/youtube/v3/docs/videos#resource
|
8
8
|
# @see https://developers.google.com/youtube/v3/docs/playlists#resource
|
data/lib/yt/models/status.rb
CHANGED
data/lib/yt/models/user_info.rb
CHANGED
@@ -9,40 +9,17 @@ module Yt
|
|
9
9
|
@data = options[:data]
|
10
10
|
end
|
11
11
|
|
12
|
-
# @return [String] the user’s ID.
|
13
12
|
has_attribute :id, default: ''
|
14
|
-
|
15
|
-
# @return [String] the user’s email address.
|
16
13
|
has_attribute :email, default: ''
|
17
|
-
|
18
|
-
# @return [Boolean] whether the email address is verified.
|
19
|
-
has_attribute :has_verified_email?, from: :verified_email, default: false, camelize: false
|
20
|
-
|
21
|
-
# @return [String] the user's full name.
|
14
|
+
has_attribute :verified_email, default: false, camelize: false
|
22
15
|
has_attribute :name, default: ''
|
23
|
-
|
24
|
-
# @return [String] the user’s given (first) name.
|
25
16
|
has_attribute :given_name, default: '', camelize: false
|
26
|
-
|
27
|
-
# @return [String] the user’s family (last) name.
|
28
17
|
has_attribute :family_name, default: '', camelize: false
|
29
|
-
|
30
|
-
|
31
|
-
has_attribute :profile_url, from: :link, default: ''
|
32
|
-
|
33
|
-
# @return [String] the URL of the user’s profile picture.
|
34
|
-
has_attribute :avatar_url, from: :picture, default: ''
|
35
|
-
|
36
|
-
# @return [String] the person’s gender. Possible values include, but
|
37
|
-
# are not limited to, +'male'+, +'female'+, +'other'+.
|
18
|
+
has_attribute :link, default: ''
|
19
|
+
has_attribute :picture, default: ''
|
38
20
|
has_attribute :gender, default: ''
|
39
|
-
|
40
|
-
# @return [String] the user’s preferred locale.
|
41
21
|
has_attribute :locale, default: ''
|
42
|
-
|
43
|
-
# @return [String] the hosted domain name for the user’s Google Apps
|
44
|
-
# account. For instance, example.com.
|
45
22
|
has_attribute :hd, default: ''
|
46
23
|
end
|
47
24
|
end
|
48
|
-
end
|
25
|
+
end
|
data/lib/yt/models/video.rb
CHANGED
@@ -312,7 +312,6 @@ module Yt
|
|
312
312
|
video_category.title
|
313
313
|
end
|
314
314
|
|
315
|
-
|
316
315
|
### ADVERTISING OPTIONS ###
|
317
316
|
|
318
317
|
has_one :advertising_options_set
|
@@ -324,7 +323,6 @@ module Yt
|
|
324
323
|
# +'trueview_instream'+.
|
325
324
|
delegate :ad_formats, to: :advertising_options_set
|
326
325
|
|
327
|
-
|
328
326
|
### LIVE STREAMING DETAILS ###
|
329
327
|
|
330
328
|
has_one :live_streaming_detail
|
@@ -370,6 +368,8 @@ module Yt
|
|
370
368
|
# @return [Yt::Collections::Annotations] the video’s annotations.
|
371
369
|
has_many :annotations
|
372
370
|
|
371
|
+
has_many :resumable_sessions
|
372
|
+
|
373
373
|
### ANALYTICS ###
|
374
374
|
|
375
375
|
# @macro report_by_video_dimensions
|
@@ -468,8 +468,6 @@ module Yt
|
|
468
468
|
|
469
469
|
### ACTIONS (UPLOAD, UPDATE, DELETE) ###
|
470
470
|
|
471
|
-
has_many :resumable_sessions
|
472
|
-
|
473
471
|
# Uploads a thumbnail
|
474
472
|
# @param [String] path_or_url the image to upload. Can either be the
|
475
473
|
# path of a local file or the URL of a remote file.
|
data/lib/yt/version.rb
CHANGED
data/spec/models/account_spec.rb
CHANGED
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yt/models/account'
|
3
|
+
|
4
|
+
describe Yt::Video do
|
5
|
+
subject(:account) { Yt::Account.new attrs }
|
6
|
+
|
7
|
+
describe '#id' do
|
8
|
+
context 'given a user info with an ID' do
|
9
|
+
let(:attrs) { {user_info: {"id"=>"103024385"}} }
|
10
|
+
it { expect(account.id).to eq '103024385' }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'given a user info without an ID' do
|
14
|
+
let(:attrs) { {user_info: {}} }
|
15
|
+
it { expect(account.id).to eq '' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#email' do
|
20
|
+
context 'given a user info with an email' do
|
21
|
+
let(:attrs) { {user_info: {"email"=>"user@example.com"}} }
|
22
|
+
it { expect(account.email).to eq 'user@example.com' }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'given a user info without an email' do
|
26
|
+
let(:attrs) { {user_info: {}} }
|
27
|
+
it { expect(account.email).to eq '' }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#has_verified_email?' do
|
32
|
+
context 'given a user info with a verified email' do
|
33
|
+
let(:attrs) { {user_info: {"verified_email"=>true}} }
|
34
|
+
it { expect(account).to have_verified_email }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'given a user info without a verified email' do
|
38
|
+
let(:attrs) { {user_info: {"verified_email"=>false}} }
|
39
|
+
it { expect(account).not_to have_verified_email }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#name' do
|
44
|
+
context 'given a user info with a name' do
|
45
|
+
let(:attrs) { {user_info: {"name"=>"User Example"}} }
|
46
|
+
it { expect(account.name).to eq 'User Example' }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'given a user info without a name' do
|
50
|
+
let(:attrs) { {user_info: {}} }
|
51
|
+
it { expect(account.name).to eq '' }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#given_name' do
|
56
|
+
context 'given a user info with a given name' do
|
57
|
+
let(:attrs) { {user_info: {"given_name"=>"User"}} }
|
58
|
+
it { expect(account.given_name).to eq 'User' }
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'given a user info without a given name' do
|
62
|
+
let(:attrs) { {user_info: {}} }
|
63
|
+
it { expect(account.given_name).to eq '' }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#family_name' do
|
68
|
+
context 'given a user info with a family name' do
|
69
|
+
let(:attrs) { {user_info: {"family_name"=>"Example"}} }
|
70
|
+
it { expect(account.family_name).to eq 'Example' }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'given a user info without a family name' do
|
74
|
+
let(:attrs) { {user_info: {}} }
|
75
|
+
it { expect(account.family_name).to eq '' }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#profile_url' do
|
80
|
+
context 'given a user info with a link' do
|
81
|
+
let(:attrs) { {user_info: {"link"=>"https://plus.google.com/1234"}} }
|
82
|
+
it { expect(account.profile_url).to eq 'https://plus.google.com/1234' }
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'given a user info without a link' do
|
86
|
+
let(:attrs) { {user_info: {}} }
|
87
|
+
it { expect(account.profile_url).to eq '' }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#avatar_url' do
|
92
|
+
context 'given a user info with a picture' do
|
93
|
+
let(:attrs) { {user_info: {"picture"=>"https://lh3.googleusercontent.com/photo.jpg"}} }
|
94
|
+
it { expect(account.avatar_url).to eq 'https://lh3.googleusercontent.com/photo.jpg' }
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'given a user info without a picture' do
|
98
|
+
let(:attrs) { {user_info: {}} }
|
99
|
+
it { expect(account.avatar_url).to eq '' }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#gender' do
|
104
|
+
context 'given a user info with a gender' do
|
105
|
+
let(:attrs) { {user_info: {"gender"=>"male"}} }
|
106
|
+
it { expect(account.gender).to eq 'male' }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'given a user info without a gender' do
|
110
|
+
let(:attrs) { {user_info: {}} }
|
111
|
+
it { expect(account.gender).to eq '' }
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe '#locale' do
|
116
|
+
context 'given a user info with a locale' do
|
117
|
+
let(:attrs) { {user_info: {"locale"=>"en"}} }
|
118
|
+
it { expect(account.locale).to eq 'en' }
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'given a user info without a locale' do
|
122
|
+
let(:attrs) { {user_info: {}} }
|
123
|
+
it { expect(account.locale).to eq '' }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '#hd' do
|
128
|
+
context 'given a user info with a Google App domain' do
|
129
|
+
let(:attrs) { {user_info: {"hd"=>"example.com"}} }
|
130
|
+
it { expect(account.hd).to eq 'example.com' }
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'given a user info without a Google App domain' do
|
134
|
+
let(:attrs) { {user_info: {}} }
|
135
|
+
it { expect(account.hd).to eq '' }
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -10,13 +10,10 @@ describe Yt::Account, :device_app do
|
|
10
10
|
after { @playlist.delete }
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
describe '.user_info' do
|
18
|
-
it { expect($account.user_info).to be_a Yt::UserInfo }
|
19
|
-
end
|
13
|
+
it { expect($account.channel).to be_a Yt::Channel }
|
14
|
+
it { expect($account.playlists.first).to be_a Yt::Playlist }
|
15
|
+
it { expect($account.subscribed_channels.first).to be_a Yt::Channel }
|
16
|
+
it { expect($account.user_info).to be_a Yt::UserInfo }
|
20
17
|
|
21
18
|
describe '.videos' do
|
22
19
|
let(:video) { $account.videos.where(order: 'viewCount').first }
|
@@ -210,7 +210,7 @@ describe Yt::ContentOwner, :partner do
|
|
210
210
|
expect(policy.id).to be_a String
|
211
211
|
expect(policy.name).to be_a String
|
212
212
|
expect(policy.updated_at).to be_a Time
|
213
|
-
expect(rule.action).to
|
213
|
+
expect(rule.action).to be_a String
|
214
214
|
expect(rule.included_territories).to be_an Array
|
215
215
|
expect(rule.excluded_territories).to be_an Array
|
216
216
|
expect(rule.match_duration).to be_an Array
|
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.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -259,7 +259,6 @@ files:
|
|
259
259
|
- spec/models/status_spec.rb
|
260
260
|
- spec/models/subscription_spec.rb
|
261
261
|
- spec/models/url_spec.rb
|
262
|
-
- spec/models/user_info_spec.rb
|
263
262
|
- spec/models/video_category_spec.rb
|
264
263
|
- spec/models/video_spec.rb
|
265
264
|
- spec/requests/as_account/account_spec.rb
|
@@ -362,7 +361,6 @@ test_files:
|
|
362
361
|
- spec/models/status_spec.rb
|
363
362
|
- spec/models/subscription_spec.rb
|
364
363
|
- spec/models/url_spec.rb
|
365
|
-
- spec/models/user_info_spec.rb
|
366
364
|
- spec/models/video_category_spec.rb
|
367
365
|
- spec/models/video_spec.rb
|
368
366
|
- spec/requests/as_account/account_spec.rb
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'yt/models/user_info'
|
3
|
-
require 'yt/models/account'
|
4
|
-
|
5
|
-
describe Yt::UserInfo do
|
6
|
-
describe 'given fetching a user info returns' do
|
7
|
-
subject(:user_info) { Yt::UserInfo.new data: data }
|
8
|
-
|
9
|
-
context 'an id' do
|
10
|
-
let(:data) { {"id"=>"103024385"} }
|
11
|
-
it { expect(user_info.id).to eq '103024385' }
|
12
|
-
end
|
13
|
-
|
14
|
-
context 'an email' do
|
15
|
-
let(:data) { {"email"=>"user@example.com"} }
|
16
|
-
it { expect(user_info.email).to eq 'user@example.com' }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'a verified email field set to true' do
|
20
|
-
let(:data) { {"verified_email"=>true} }
|
21
|
-
it { expect(user_info).to have_verified_email }
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'a verified email field set to false' do
|
25
|
-
let(:data) { {"verified_email"=>false} }
|
26
|
-
it { expect(user_info).not_to have_verified_email }
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'a name' do
|
30
|
-
let(:data) { {"name"=>"User Example"} }
|
31
|
-
it { expect(user_info.name).to eq 'User Example'}
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'a given name' do
|
35
|
-
let(:data) { {"given_name"=>"User"} }
|
36
|
-
it { expect(user_info.given_name).to eq 'User' }
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'a family name' do
|
40
|
-
let(:data) { {"family_name"=>"Example"} }
|
41
|
-
it { expect(user_info.family_name).to eq 'Example' }
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'a link' do
|
45
|
-
let(:data) { {"link"=>"https://plus.google.com/1234"} }
|
46
|
-
it { expect(user_info.profile_url).to eq 'https://plus.google.com/1234' }
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'a picture' do
|
50
|
-
let(:data) { {"picture"=>"https://lh3.googleusercontent.com/photo.jpg"} }
|
51
|
-
it { expect(user_info.avatar_url).to eq 'https://lh3.googleusercontent.com/photo.jpg' }
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'a gender' do
|
55
|
-
let(:data) { {"gender"=>"male"} }
|
56
|
-
it { expect(user_info.gender).to eq 'male' }
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'a locale' do
|
60
|
-
let(:data) { {"locale"=>"en"} }
|
61
|
-
it { expect(user_info.locale).to eq 'en' }
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'a Google App domain' do
|
65
|
-
let(:data) { {"hd"=>"example.com"} }
|
66
|
-
it { expect(user_info.hd).to eq 'example.com' }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|