yt 0.16.0 → 0.17.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 +13 -0
- data/README.md +1 -1
- data/lib/yt/associations/has_reports.rb +69 -10
- data/lib/yt/associations/has_viewer_percentages.rb +2 -2
- data/lib/yt/collections/resumable_sessions.rb +1 -1
- data/lib/yt/models/advertising_options_set.rb +0 -5
- data/lib/yt/models/content_detail.rb +4 -18
- data/lib/yt/models/file_detail.rb +0 -6
- data/lib/yt/models/live_streaming_detail.rb +0 -19
- data/lib/yt/models/player.rb +0 -2
- data/lib/yt/models/resource.rb +6 -3
- data/lib/yt/models/snippet.rb +6 -35
- data/lib/yt/models/status.rb +3 -270
- data/lib/yt/models/video.rb +467 -172
- data/lib/yt/request.rb +2 -4
- data/lib/yt/version.rb +1 -1
- data/spec/models/content_detail_spec.rb +0 -48
- data/spec/models/file_detail_spec.rb +0 -21
- data/spec/models/live_streaming_detail_spec.rb +0 -80
- data/spec/models/player_spec.rb +0 -8
- data/spec/models/statistics_set_spec.rb +1 -0
- data/spec/models/status_spec.rb +0 -302
- data/spec/models/video_spec.rb +494 -0
- data/spec/requests/as_account/account_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be6a02a5308ac5e0d87af25b8f92842fb7474e10
|
4
|
+
data.tar.gz: 65bd602aebf8bae1bad8dfec257a733f4b3aebfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f77000f204e230668a04045f2216d93a589b55819528851d5aeb855eafb60901eba702a00fe7608b719529d65e66a0e87ac176b097f637b8e0e492e5930bd6d
|
7
|
+
data.tar.gz: 076a1006983c59b30fa5abd80d0c1ec6d9073db27c826b6f656a436331ff822ef3c0be6087e3a14c22f2d281793414b9906d7293f29230414ec6684711c56e8c
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,19 @@ 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.17.0 - 2015-04-28
|
10
|
+
|
11
|
+
**How to upgrade**
|
12
|
+
|
13
|
+
If your code never calls video-specific methods on `video.status`, then you are
|
14
|
+
good to go.
|
15
|
+
|
16
|
+
If it does, then call the same methods on `video`, rather than `video.status`.
|
17
|
+
For instance, replace `video.status.deleted?` with `video.deleted?`.
|
18
|
+
|
19
|
+
* [ENHANCEMENT] Don’t over-delegate methods of Video.
|
20
|
+
* [ENHANCEMENT] Complete documentation of Yt::Video.
|
21
|
+
|
9
22
|
## 0.16.0 - 2015-04-27
|
10
23
|
|
11
24
|
**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.17.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*)
|
@@ -5,17 +5,76 @@ module Yt
|
|
5
5
|
# YouTube resources with reports are: {Yt::Models::Channel channels} and
|
6
6
|
# {Yt::Models::Channel videos}.
|
7
7
|
module HasReports
|
8
|
-
# @!macro
|
9
|
-
#
|
10
|
-
# @return [Float] the $1 for a single day.
|
11
|
-
# @param [#to_date] date The single day to get the $1 for.
|
8
|
+
# @!macro [new] report
|
9
|
+
# Returns the $1 of the video grouped by the given dimension.
|
12
10
|
# @!method $1(options = {})
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
|
11
|
+
# @param [Hash] options the time-range and dimensions for the $1.
|
12
|
+
# @option options [#to_date] :since The first day of the time-range.
|
13
|
+
# Also aliased as +:from+.
|
14
|
+
# @option options [#to_date] :until The last day of the time-range.
|
15
|
+
# Also aliased as +:to+.
|
16
|
+
|
17
|
+
# @!macro [new] daily_report
|
18
|
+
# @option options [Symbol] :by (:day) The dimension to collect $1 by.
|
19
|
+
# Valid values are: +:day+.
|
20
|
+
# @return [Hash<Date, Float>] if grouped by day, the $1 of the video
|
21
|
+
# for each day in the time-range.
|
22
|
+
# @example Get the video’s $1 for each day of last week:
|
23
|
+
# video.$1 since: 2.weeks.ago, until: 1.week.ago, by: :day
|
24
|
+
# # => {Wed, 8 May 2014 => 12.0, Thu, 9 May 2014 => 34.2, …}
|
25
|
+
# @macro report
|
26
|
+
|
27
|
+
# @!macro [new] views_report
|
28
|
+
# @option options [Symbol] :by (:day) The dimension to collect $1 by.
|
29
|
+
# Valid values are: +:day+, +:traffic_source+, +:playback_location+,
|
30
|
+
# +:embedded_player_location+, +:related_video+.
|
31
|
+
# @return [Hash<Date, Float>] if grouped by day, the $1 of the video
|
32
|
+
# for each day in the time-range.
|
33
|
+
# @example Get the video’s $1 for each day of last week:
|
34
|
+
# video.$1 since: 2.weeks.ago, until: 1.week.ago, by: :day
|
35
|
+
# # => {Wed, 8 May 2014 => 12.0, Thu, 9 May 2014 => 34.2, …}
|
36
|
+
# @return [Hash<Symbol, Float>] if grouped by traffic source, the
|
37
|
+
# $1 of the video for each traffic source.
|
38
|
+
# @example Get yesterday’s video’s $1 grouped by traffic source:
|
39
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :traffic_source
|
40
|
+
# # => {advertising: 53.0, channel: 7.0, …}
|
41
|
+
# @return [Hash<Symbol, Float>] if grouped by playback location, the
|
42
|
+
# $1 of the video for each traffic playback location.
|
43
|
+
# @example Get yesterday’s video’s $1 grouped by playback location:
|
44
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :playback_location
|
45
|
+
# # => {embedded: 53.0, watch: 467.0, …}
|
46
|
+
# @return [Hash<Symbol, Float>] if grouped by embedded player location,
|
47
|
+
# the $1 of the video for each embedded player location.
|
48
|
+
# @example Get yesterday’s video’s $1 by embedded player location:
|
49
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :embedded_player_location
|
50
|
+
# # => {"fullscreen.net" => 92.0, "yahoo.com" => 14.0, …}
|
51
|
+
# @return [Hash<Yt::Video, Float>] if grouped by related video, the
|
52
|
+
# $1 of the video for each related video.
|
53
|
+
# @example Get yesterday’s video’s $1 by related video:
|
54
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :related_video
|
55
|
+
# # => {#<Yt::Video @id=…> => 33.0, #<Yt::Video @id=…> => 12.0, …}
|
56
|
+
# @macro report
|
57
|
+
|
58
|
+
# @!macro [new] demographics_report
|
59
|
+
# @option options [Symbol] :by (:gender_age_group) The dimension to
|
60
|
+
# show viewer percentage by.
|
61
|
+
# Valid values are: +:gender+, +:age_group+, +:gender_age_group+.
|
62
|
+
# @return [Hash<Symbol, Float>] if grouped by gender, the video’s
|
63
|
+
# viewer percentage by gender.
|
64
|
+
# @example Get yesterday’s video’s viewer percentage by gender:
|
65
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :gender
|
66
|
+
# # => {female: 53.0, male: 47.0}
|
67
|
+
# @return [Hash<String, Float>] if grouped by age group, the video’s
|
68
|
+
# viewer percentage by age group.
|
69
|
+
# @example Get yesterday’s video’s $1 grouped by age group:
|
70
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago, by: :age_group
|
71
|
+
# # => {"18-24" => 4.54, "35-24" => 12.31, "45-34" => 8.92, …}
|
72
|
+
# @return [Hash<Symbol, [Hash<String, Float>]>] if grouped by gender
|
73
|
+
# and age group, the video’s viewer percentage by gender/age group.
|
74
|
+
# @example Get yesterday’s video’s $1 by gender and age group:
|
75
|
+
# video.$1 from: 1.day.ago, to: 1.day.ago
|
76
|
+
# # => {female: {"18-24" => 12.12, "25-34" => 16.16, …}, male:…}
|
77
|
+
# @macro report
|
19
78
|
|
20
79
|
# Defines two public instance methods to access the reports of a
|
21
80
|
# resource for a specific metric.
|
@@ -4,10 +4,10 @@ module Yt
|
|
4
4
|
#
|
5
5
|
# YouTube resources with viewer percentage reports are:
|
6
6
|
# {Yt::Models::Channel channels} and {Yt::Models::Channel videos}.
|
7
|
-
# @deprecated
|
7
|
+
# @deprecated
|
8
8
|
module HasViewerPercentages
|
9
9
|
# @!macro has_viewer_percentages
|
10
|
-
#
|
10
|
+
# @deprecated
|
11
11
|
# @!method viewer_percentages
|
12
12
|
# @return [Hash<Symbol,Hash<String,Float>>] the viewer percentages.
|
13
13
|
# The first-level hash identifies the genres (:female, :male).
|
@@ -14,7 +14,7 @@ module Yt
|
|
14
14
|
# object to upload. If the request succeeds, YouTube returns a unique
|
15
15
|
# URL to upload the object file (and eventually resume the upload).
|
16
16
|
# @param [Integer] content_length the size (bytes) of the object to upload.
|
17
|
-
# @param [Hash]
|
17
|
+
# @param [Hash] body the metadata to add to the uploaded object.
|
18
18
|
def insert(content_length, body = {})
|
19
19
|
@headers = headers_for content_length
|
20
20
|
do_insert body: body, headers: @headers
|
@@ -19,11 +19,6 @@ module Yt
|
|
19
19
|
true
|
20
20
|
end
|
21
21
|
|
22
|
-
# Return the list of ad formats that the video is allowed to show.
|
23
|
-
# Valid values for this property are: long, overlay, standard_instream,
|
24
|
-
# third_party, trueview_inslate, or trueview_instream.
|
25
|
-
# @return [Array<String>] the list of ad formats that the video is
|
26
|
-
# allowed to show.
|
27
22
|
def ad_formats
|
28
23
|
@data['adFormats']
|
29
24
|
end
|
@@ -17,24 +17,10 @@ module Yt
|
|
17
17
|
to_seconds value
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
has_attribute :
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
# @return [Boolean] whether the video is available in high definition.
|
26
|
-
has_attribute :hd?, from: :definition do |definition|
|
27
|
-
definition == 'hd'
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [Boolean] whether captions are available for the video.
|
31
|
-
has_attribute :captioned?, from: :caption do |caption|
|
32
|
-
caption == 'true'
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Boolean] whether the video represents licensed content, which
|
36
|
-
# means that the content has been claimed by a YouTube content partner.
|
37
|
-
has_attribute :licensed?, default: false, from: :licensed_content
|
20
|
+
has_attribute :dimension
|
21
|
+
has_attribute :definition
|
22
|
+
has_attribute :caption
|
23
|
+
has_attribute :licensed_content
|
38
24
|
|
39
25
|
private
|
40
26
|
|
@@ -12,14 +12,8 @@ module Yt
|
|
12
12
|
@data = options[:data] || {}
|
13
13
|
end
|
14
14
|
|
15
|
-
# @return [Integer] the file size of the video (in bytes).
|
16
15
|
has_attribute :file_size, type: Integer
|
17
|
-
|
18
|
-
# @return [String] the file type of the file. May be one of:
|
19
|
-
# archive, audio, document, image, other, project, or video.
|
20
16
|
has_attribute :file_type
|
21
|
-
|
22
|
-
# @return [String] the container of the video (e.g. 'mov').
|
23
17
|
has_attribute :container
|
24
18
|
end
|
25
19
|
end
|
@@ -12,29 +12,10 @@ module Yt
|
|
12
12
|
@data = options[:data] || {}
|
13
13
|
end
|
14
14
|
|
15
|
-
# @return [Time] if the broadcast has begun, the time that the broadcast
|
16
|
-
# actually started.
|
17
|
-
# @return [nil] if the broadcast has not begun.
|
18
15
|
has_attribute :actual_start_time, type: Time
|
19
|
-
|
20
|
-
# @return [Time] if the broadcast is over, the time that the broadcast
|
21
|
-
# actually ended.
|
22
|
-
# @return [nil] if the broadcast is not over.
|
23
16
|
has_attribute :actual_end_time, type: Time
|
24
|
-
|
25
|
-
# @return [Time] the time that the broadcast is scheduled to begin.
|
26
17
|
has_attribute :scheduled_start_time, type: Time
|
27
|
-
|
28
|
-
# @return [Time] if the broadcast is scheduled to end, the time that the
|
29
|
-
# broadcast is scheduled to end.
|
30
|
-
# @return [nil] if the broadcast is scheduled to continue indefinitely.
|
31
18
|
has_attribute :scheduled_end_time, type: Time
|
32
|
-
|
33
|
-
# @return [Integer] if the broadcast has current viewers and the
|
34
|
-
# broadcast owner has not hidden the viewcount for the video, the
|
35
|
-
# number of viewers currently watching the broadcast.
|
36
|
-
# @return [nil] if the broadcast has ended or the broadcast owner has
|
37
|
-
# hidden the viewcount for the video.
|
38
19
|
has_attribute :concurrent_viewers, type: Integer
|
39
20
|
end
|
40
21
|
end
|
data/lib/yt/models/player.rb
CHANGED
data/lib/yt/models/resource.rb
CHANGED
@@ -7,6 +7,9 @@ module Yt
|
|
7
7
|
module Models
|
8
8
|
class Resource < Base
|
9
9
|
attr_reader :auth
|
10
|
+
|
11
|
+
# @!attribute [r] id
|
12
|
+
# @return [String] the ID that YouTube uses to identify each resource.
|
10
13
|
has_one :id
|
11
14
|
|
12
15
|
has_one :snippet
|
@@ -67,17 +70,17 @@ module Yt
|
|
67
70
|
{}.tap do |body|
|
68
71
|
update_parts.each do |name, part|
|
69
72
|
if should_include_part_in_update? part, attributes
|
70
|
-
body[name] = build_update_body_part part, attributes
|
73
|
+
body[name] = build_update_body_part name, part, attributes
|
71
74
|
sanitize_brackets! body[name] if part[:sanitize_brackets]
|
72
75
|
end
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
76
79
|
|
77
|
-
def build_update_body_part(part, attributes = {})
|
80
|
+
def build_update_body_part(name, part, attributes = {})
|
78
81
|
{}.tap do |body_part|
|
79
82
|
part[:keys].map do |key|
|
80
|
-
body_part[camelize key] = attributes.fetch key,
|
83
|
+
body_part[camelize key] = attributes.fetch key, public_send(name).public_send(key)
|
81
84
|
end
|
82
85
|
end
|
83
86
|
end
|
data/lib/yt/models/snippet.rb
CHANGED
@@ -22,9 +22,6 @@ module Yt
|
|
22
22
|
# @return [String] if the resource is a channel, the channel’s title.
|
23
23
|
# @return [String] if the resource is a playlist, the playlist’s title.
|
24
24
|
# @return [String] if the resource is a playlist item, the item’s title.
|
25
|
-
# @return [String] if the resource is a video, the video’s title. Has a
|
26
|
-
# maximum of 100 characters and may contain all valid UTF-8 characters
|
27
|
-
# except < and >.
|
28
25
|
has_attribute :title, default: ''
|
29
26
|
|
30
27
|
# @return [Yt::Models::Description] if the resource is a channel, the
|
@@ -33,9 +30,6 @@ module Yt
|
|
33
30
|
# playlist’s description.
|
34
31
|
# @return [Yt::Models::Description] if the resource is a playlist item,
|
35
32
|
# the item’s description.
|
36
|
-
# @return [Yt::Models::Description] if the resource is a video, the
|
37
|
-
# video’s description. Has a maximum of 5000 bytes and may contain all
|
38
|
-
# valid UTF-8 characters except < and >.
|
39
33
|
has_attribute :description, default: '' do |description_text|
|
40
34
|
Description.new description_text
|
41
35
|
end
|
@@ -46,23 +40,21 @@ module Yt
|
|
46
40
|
# the playlist was created.
|
47
41
|
# @return [Time] if the resource is a playlist item, the date and time
|
48
42
|
# that the item was added to the playlist.
|
49
|
-
# @return [Time] if the resource is a video, the date and time that the
|
50
|
-
# video was published.
|
51
43
|
has_attribute :published_at, type: Time
|
52
44
|
|
53
45
|
# @param [Symbol, String] size The size of the thumbnail to retrieve.
|
54
46
|
# @return [String] if the resource is a channel and +size+ is +default+,
|
55
47
|
# the URL of an 88x88px image.
|
56
|
-
# @return [String] if the resource is a playlist
|
57
|
-
#
|
48
|
+
# @return [String] if the resource is a playlist or a playlist item and
|
49
|
+
# +size+ is +default+, the URL of an 120x90px image.
|
58
50
|
# @return [String] if the resource is a channel and +size+ is +medium+,
|
59
51
|
# the URL of an 240x240px image.
|
60
|
-
# @return [String] if the resource is a playlist
|
61
|
-
#
|
52
|
+
# @return [String] if the resource is a playlist or a playlist item and
|
53
|
+
# +size+ is +medium+, the URL of an 320x180px image.
|
62
54
|
# @return [String] if the resource is a channel and +size+ is +high+,
|
63
55
|
# the URL of an 800x800px image.
|
64
|
-
# @return [String] if the resource is a playlist
|
65
|
-
#
|
56
|
+
# @return [String] if the resource is a playlist or a playlist item and
|
57
|
+
# +size+ is +high+, the URL of an 480x360px image.
|
66
58
|
# @return [nil] if the +size+ is not +default+, +medium+ or +high+.
|
67
59
|
def thumbnail_url(size = :default)
|
68
60
|
thumbnails.fetch(size.to_s, {})['url']
|
@@ -72,8 +64,6 @@ module Yt
|
|
72
64
|
# uses to uniquely identify the channel that the playlist belongs to.
|
73
65
|
# @return [String] if the resource is a playlist item, the ID that YouTube
|
74
66
|
# uses to uniquely identify the channel that the playlist belongs to.
|
75
|
-
# @return [String] if the resource is a video, the ID that YouTube uses
|
76
|
-
# to uniquely identify the channel that the video was uploaded to.
|
77
67
|
# @return [nil] if the resource is a channel.
|
78
68
|
has_attribute :channel_id
|
79
69
|
|
@@ -81,8 +71,6 @@ module Yt
|
|
81
71
|
# channel that the playlist belongs to.
|
82
72
|
# @return [String] if the resource is a playlist item, the title of the
|
83
73
|
# channel that the playlist item belongs to.
|
84
|
-
# @return [String] if the resource is a video, the title of the channel
|
85
|
-
# that the video was uploaded to.
|
86
74
|
# @return [nil] if the resource is a channel.
|
87
75
|
has_attribute :channel_title
|
88
76
|
|
@@ -92,32 +80,18 @@ module Yt
|
|
92
80
|
# list of keyword tags associated with the playlist.
|
93
81
|
# @return [Array<Yt::Models::Tag>] if the resource is a playlist item,
|
94
82
|
# an empty array.
|
95
|
-
# @return [Array<Yt::Models::Tag>] if the resource is a video, the list
|
96
|
-
# of keyword tags associated with the video.
|
97
83
|
has_attribute :tags, default: []
|
98
84
|
|
99
|
-
# @return [String] if the resource is a video, the YouTube video
|
100
|
-
# category associated with the video.
|
101
|
-
# @return [nil] if the resource is a channel.
|
102
|
-
# @return [nil] if the resource is a playlist.
|
103
|
-
# @return [nil] if the resource is a playlist item.
|
104
|
-
# @see https://developers.google.com/youtube/v3/docs/videoCategories/list
|
105
85
|
has_attribute :category_id
|
106
86
|
|
107
87
|
BROADCAST_TYPES = %q(live none upcoming)
|
108
88
|
|
109
|
-
# @return [String] if the resource is a video, whether the resource is a
|
110
|
-
# live broadcast. Valid values are: live, none, upcoming.
|
111
|
-
# @return [nil] if the resource is a channel.
|
112
|
-
# @return [nil] if the resource is a playlist.
|
113
|
-
# @return [nil] if the resource is a playlist item.
|
114
89
|
has_attribute :live_broadcast_content
|
115
90
|
|
116
91
|
# @return [String] if the resource is a playlist item, the ID that
|
117
92
|
# YouTube uses to uniquely identify the playlist that the item is in.
|
118
93
|
# @return [nil] if the resource is a channel.
|
119
94
|
# @return [nil] if the resource is a playlist.
|
120
|
-
# @return [nil] if the resource is a video.
|
121
95
|
has_attribute :playlist_id
|
122
96
|
|
123
97
|
# @return [Integer] if the resource is a playlist item, the order in
|
@@ -125,14 +99,12 @@ module Yt
|
|
125
99
|
# first item has a position of 0, the second item of 1, and so forth.
|
126
100
|
# @return [nil] if the resource is a channel.
|
127
101
|
# @return [nil] if the resource is a playlist.
|
128
|
-
# @return [nil] if the resource is a video.
|
129
102
|
has_attribute :position, type: Integer
|
130
103
|
|
131
104
|
# @return [String] if the resource is a playlist item, the ID of the
|
132
105
|
# video the playlist item represents in the playlist.
|
133
106
|
# @return [nil] if the resource is a channel.
|
134
107
|
# @return [nil] if the resource is a playlist.
|
135
|
-
# @return [nil] if the resource is a video.
|
136
108
|
def video_id
|
137
109
|
resource_id['videoId']
|
138
110
|
end
|
@@ -141,7 +113,6 @@ module Yt
|
|
141
113
|
# the playlist.
|
142
114
|
# @return [nil] if the resource is a channel.
|
143
115
|
# @return [nil] if the resource is a playlist.
|
144
|
-
# @return [nil] if the resource is a video.
|
145
116
|
def video
|
146
117
|
@video ||= Video.new id: video_id, auth: @auth if video_id
|
147
118
|
end
|
data/lib/yt/models/status.rb
CHANGED
@@ -41,283 +41,16 @@ module Yt
|
|
41
41
|
privacy_status == 'unlisted'
|
42
42
|
end
|
43
43
|
|
44
|
-
# Upload status (Video only)
|
45
|
-
|
46
|
-
# Returns the upload status of a video.
|
47
|
-
# @return [String] if the resource is a video, the status of the
|
48
|
-
# uploaded video. Valid values are: deleted, failed, processed,
|
49
|
-
# rejected, uploading.
|
50
|
-
# @return [nil] if the resource is not a video.
|
51
44
|
has_attribute :upload_status
|
52
|
-
|
53
|
-
# Returns whether an uploaded video was deleted.
|
54
|
-
# @return [Boolean] if the resource is a video, whether the uploaded
|
55
|
-
# video was deleted by the user.
|
56
|
-
# @return [nil] if the resource is not a video.
|
57
|
-
def deleted?
|
58
|
-
upload_status == 'deleted' if video?
|
59
|
-
end
|
60
|
-
|
61
|
-
# Returns whether a video failed to upload. If true, the reason why
|
62
|
-
# the video upload failed can be obtained with +failure_reason+.
|
63
|
-
# @return [Boolean] if the resource is a video, whether the video failed
|
64
|
-
# to upload.
|
65
|
-
# @return [nil] if the resource is not a video.
|
66
|
-
def failed?
|
67
|
-
upload_status == 'failed' if video?
|
68
|
-
end
|
69
|
-
|
70
|
-
# Returns whether an uploaded video is being processed by YouTube.
|
71
|
-
# @return [Boolean] if the resource is a video, whether the uploaded
|
72
|
-
# video is being processed by YouTube.
|
73
|
-
# @return [nil] if the resource is not a video.
|
74
|
-
def processed?
|
75
|
-
upload_status == 'processed' if video?
|
76
|
-
end
|
77
|
-
|
78
|
-
# Returns whether the video was rejected by YouTube. If true, the reason
|
79
|
-
# why the video was rejected can be obtained with +rejection_reason+.
|
80
|
-
# @return [Boolean] if the resource is a video, whether the video was
|
81
|
-
# rejected by YouTube.
|
82
|
-
# @return [nil] if the resource is not a video.
|
83
|
-
def rejected?
|
84
|
-
upload_status == 'rejected' if video?
|
85
|
-
end
|
86
|
-
|
87
|
-
# Returns whether a video is being uploaded to YouTube.
|
88
|
-
# @return [Boolean] if the resource is a video, whether the video is
|
89
|
-
# being uploaded.
|
90
|
-
# @return [nil] if the resource is not a video.
|
91
|
-
def uploading?
|
92
|
-
upload_status == 'uploaded' if video?
|
93
|
-
end
|
94
|
-
|
95
|
-
# @deprecated Use {uploading?} instead.
|
96
|
-
def uploaded?
|
97
|
-
uploading?
|
98
|
-
end
|
99
|
-
|
100
|
-
# Failure reason (Video only)
|
101
|
-
|
102
|
-
# Returns the reason why a video failed to upload.
|
103
|
-
# @return [String] if resource is a video with a 'failed' upload status,
|
104
|
-
# the reason why the video failed to upload. Valid values are: codec,
|
105
|
-
# conversion, emptyFile, invalidFile, tooSmall, uploadAborted.
|
106
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
107
45
|
has_attribute :failure_reason
|
108
|
-
|
109
|
-
# Returns whether a video upload failed because of the codec.
|
110
|
-
# @return [Boolean] if the resource is a video, whether the video uses
|
111
|
-
# a codec not supported by YouTube.
|
112
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
113
|
-
# @see https://support.google.com/youtube/answer/1722171
|
114
|
-
def uses_unsupported_codec?
|
115
|
-
failure_reason == 'codec' if video?
|
116
|
-
end
|
117
|
-
|
118
|
-
# Returns whether YouTube was unable to convert an uploaded video.
|
119
|
-
# @return [Boolean] if the resource is a video, whether YouTube was
|
120
|
-
# unable to convert the video.
|
121
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
122
|
-
def has_failed_conversion?
|
123
|
-
failure_reason == 'conversion' if video?
|
124
|
-
end
|
125
|
-
|
126
|
-
# Returns whether a video upload failed because the file was empty.
|
127
|
-
# @return [Boolean] if the resource is a video, whether the video file
|
128
|
-
# is empty.
|
129
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
130
|
-
def empty?
|
131
|
-
failure_reason == 'emptyFile' if video?
|
132
|
-
end
|
133
|
-
|
134
|
-
# Returns whether a video upload failed because of the file format.
|
135
|
-
# @return [Boolean] if the resource is a video, whether the video uses
|
136
|
-
# a file format not supported by YouTube.
|
137
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
138
|
-
# @see https://support.google.com/youtube/troubleshooter/2888402?hl=en
|
139
|
-
def invalid?
|
140
|
-
failure_reason == 'invalidFile' if video?
|
141
|
-
end
|
142
|
-
|
143
|
-
# Returns whether a video upload failed because the file was too small.
|
144
|
-
# @return [Boolean] if the resource is a video, whether the video file
|
145
|
-
# is too small for YouTube.
|
146
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
147
|
-
def too_small?
|
148
|
-
failure_reason == 'tooSmall' if video?
|
149
|
-
end
|
150
|
-
|
151
|
-
# Returns whether a video upload failed because the upload was aborted.
|
152
|
-
# @return [Boolean] if the resource is a video, whether the uploading
|
153
|
-
# process was aborted.
|
154
|
-
# @return [nil] if the resource is not a video or upload has not failed.
|
155
|
-
def aborted?
|
156
|
-
failure_reason == 'uploadAborted' if video?
|
157
|
-
end
|
158
|
-
|
159
|
-
# Rejection reason (Video only)
|
160
|
-
|
161
|
-
# Returns the reason why a video was rejected by YouTube.
|
162
|
-
# @return [String] if resource is a video with a 'rejected' upload
|
163
|
-
# status, the reason why the video was rejected. Valid values are:
|
164
|
-
# claim, copyright, duplicate, inappropriate, length, termsOfUse,
|
165
|
-
# trademark, uploaderAccountClosed, uploaderAccountSuspended.
|
166
|
-
# @return [nil] if the resource is not a rejected video.
|
167
46
|
has_attribute :rejection_reason
|
168
|
-
|
169
|
-
# Returns whether a video was rejected because it was claimed.
|
170
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
171
|
-
# video was claimed by a different account.
|
172
|
-
# @return [nil] if the resource is not a rejected video.
|
173
|
-
def claimed?
|
174
|
-
rejection_reason == 'claim' if video?
|
175
|
-
end
|
176
|
-
|
177
|
-
# Returns whether a video was rejected because of copyright infringement.
|
178
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
179
|
-
# video commits a copyright infringement.
|
180
|
-
# @return [nil] if the resource is not a rejected video.
|
181
|
-
def infringes_copyright?
|
182
|
-
rejection_reason == 'copyright' if video?
|
183
|
-
end
|
184
|
-
|
185
|
-
# Returns whether a video was rejected because it is a duplicate.
|
186
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
187
|
-
# video is a duplicate of another uploaded video.
|
188
|
-
# @return [nil] if the resource is not a rejected video.
|
189
|
-
def duplicate?
|
190
|
-
rejection_reason == 'duplicate' if video?
|
191
|
-
end
|
192
|
-
|
193
|
-
# Returns whether a video was rejected because of inappropriate content.
|
194
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
195
|
-
# video contains inappropriate content.
|
196
|
-
# @return [nil] if the resource is not a rejected video.
|
197
|
-
def inappropriate?
|
198
|
-
rejection_reason == 'inappropriate' if video?
|
199
|
-
end
|
200
|
-
|
201
|
-
# Returns whether a video was rejected because it is too long.
|
202
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
203
|
-
# video exceeds the maximum duration.
|
204
|
-
# @return [nil] if the resource is not a rejected video.
|
205
|
-
# @see https://support.google.com/youtube/answer/71673?hl=en
|
206
|
-
def too_long?
|
207
|
-
rejection_reason == 'length' if video?
|
208
|
-
end
|
209
|
-
|
210
|
-
# Returns whether a video was rejected because it violates terms of use.
|
211
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
212
|
-
# video commits a terms of use violation.
|
213
|
-
# @return [nil] if the resource is not a rejected video.
|
214
|
-
def violates_terms_of_use?
|
215
|
-
rejection_reason == 'termsOfUse' if video?
|
216
|
-
end
|
217
|
-
|
218
|
-
# Returns whether a video was rejected because of trademark infringement.
|
219
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
220
|
-
# video commits a trademark infringement.
|
221
|
-
# @return [nil] if the resource is not a rejected video.
|
222
|
-
# @see https://support.google.com/youtube/answer/2801979?hl=en
|
223
|
-
def infringes_trademark?
|
224
|
-
rejection_reason == 'trademark' if video?
|
225
|
-
end
|
226
|
-
|
227
|
-
# Returns whether a video was rejected because the account was closed.
|
228
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
229
|
-
# account associated with the video has been closed.
|
230
|
-
# @return [nil] if the resource is not a rejected video.
|
231
|
-
def belongs_to_closed_account?
|
232
|
-
rejection_reason == 'uploaderAccountClosed' if video?
|
233
|
-
end
|
234
|
-
|
235
|
-
# Returns whether a video was rejected because the account was suspended.
|
236
|
-
# @return [Boolean] if the resource is a rejected video, whether the
|
237
|
-
# account associated with the video has been suspended.
|
238
|
-
# @return [nil] if the resource is not a rejected video.
|
239
|
-
def belongs_to_suspended_account?
|
240
|
-
rejection_reason == 'uploaderAccountSuspended' if video?
|
241
|
-
end
|
242
|
-
|
243
|
-
# Scheduled publication (Video only)
|
244
|
-
|
245
|
-
# Returns the date and time when a video is scheduled to be published.
|
246
|
-
# @return [Time] if resource is a private video scheduled to be
|
247
|
-
# published, the date and time when the video is scheduled to publish.
|
248
|
-
# @return [nil] if the resource is not a private video scheduled to be
|
249
|
-
# published.
|
250
|
-
def scheduled_at
|
251
|
-
publish_at if scheduled?
|
252
|
-
end
|
253
|
-
|
254
|
-
# Returns whether the video is scheduled to be published.
|
255
|
-
# @return [Boolean] if the resource is a video, whether it is currently
|
256
|
-
# private and is scheduled to become public in the future.
|
257
|
-
# @return [nil] if the resource is not a video.
|
258
|
-
def scheduled?
|
259
|
-
private? && publish_at if video?
|
260
|
-
end
|
261
|
-
|
262
|
-
# License (Video only)
|
263
|
-
|
264
|
-
# Returns the video’s license.
|
265
|
-
# @return [String] if resource is a video, its license. Valid values are:
|
266
|
-
# creativeCommon, youtube.
|
267
|
-
# @return [nil] if the resource is not a video.
|
268
47
|
has_attribute :license
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
# Creative Commons license.
|
273
|
-
# @return [nil] if the resource is not a video.
|
274
|
-
# @see https://support.google.com/youtube/answer/2797468?hl=en
|
275
|
-
def licensed_as_creative_commons?
|
276
|
-
license == 'creativeCommon' if video?
|
277
|
-
end
|
278
|
-
|
279
|
-
# Returns whether the video uses the Standard YouTube license.
|
280
|
-
# @return [Boolean] if the resource is a video, whether it uses the
|
281
|
-
# Standard YouTube license.
|
282
|
-
# @return [nil] if the resource is not a video.
|
283
|
-
# @see https://www.youtube.com/static?template=terms
|
284
|
-
def licensed_as_standard_youtube?
|
285
|
-
license == 'youtube' if video?
|
286
|
-
end
|
287
|
-
|
288
|
-
# Embed (Video only)
|
289
|
-
|
290
|
-
# Returns whether the video can be embedded on another website.
|
291
|
-
# @return [Boolean] if the resource is a video, whether it can be
|
292
|
-
# embedded on another website.
|
293
|
-
# @return [nil] if the resource is not a video.
|
294
|
-
has_attribute :embeddable?, from: :embeddable
|
295
|
-
|
296
|
-
# @deprecated Use {#embeddable?} instead.
|
297
|
-
def embeddable
|
298
|
-
embeddable?
|
299
|
-
end
|
300
|
-
|
301
|
-
# Public stats (Video only)
|
302
|
-
|
303
|
-
# Returns whether the video statistics are publicly viewable.
|
304
|
-
# @return [Boolean] if the resource is a video, whether the extended
|
305
|
-
# video statistics on the video’s watch page are publicly viewable.
|
306
|
-
# By default, those statistics are viewable, and statistics like a
|
307
|
-
# video’s viewcount and ratings will still be publicly visible even
|
308
|
-
# if this property’s value is set to false.
|
309
|
-
# @return [nil] if the resource is not a video.
|
310
|
-
has_attribute :has_public_stats_viewable?, from: :public_stats_viewable
|
311
|
-
|
312
|
-
# @deprecated Use {#has_public_stats_viewable?} instead.
|
313
|
-
def public_stats_viewable
|
314
|
-
has_public_stats_viewable?
|
315
|
-
end
|
48
|
+
has_attribute :embeddable
|
49
|
+
has_attribute :public_stats_viewable
|
50
|
+
has_attribute :publish_at, type: Time
|
316
51
|
|
317
52
|
private
|
318
53
|
|
319
|
-
has_attribute :publish_at, type: Time
|
320
|
-
|
321
54
|
def video?
|
322
55
|
upload_status.present?
|
323
56
|
end
|