yt-core 0.1.5 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38fe8ee547f6c51750be3b935de33654304a92bc
4
- data.tar.gz: ca5b035d73c726d4f9f4a2428b3a4cc6cb573515
3
+ metadata.gz: 9ecd986ee6a7ae04f3d23ae8a9bd91eb4739e059
4
+ data.tar.gz: a0ea45421a464e5707c0a75e712764b44b39b91e
5
5
  SHA512:
6
- metadata.gz: 3201de66a86b9df6caf10792426616f01ea177153983090cb32d1bd19f83f99b947b79f9012d4e33f34411930e5f3c978664d6d9c3f7b2c536ccbb4412523a52
7
- data.tar.gz: 0f1daea896d3ea422837992e8b3f1aeefb04d0576af63e51f783ae00ac5234b45ccf7ce3d77b2fc84578968fc1e69a37befb9ac9d32b3c3cfb7ef2669c0653b1
6
+ metadata.gz: 2115a2bf9c7517768e1bf1bfc44c21c37e6167cc5672240a6b7a5411e0bd28e9809d6a4fafadc2e8e7568d0792d44e33010ded0a24c88f5fe2c17b88464445cb
7
+ data.tar.gz: ff578ed38057d5873d68c97b2dedbb4223e929a9f4da1f8a5c5f83a349b4eb16edde57c22add762b77cf3e227cd7f11e53f9bdcba04ea136db66d4c552508e10
@@ -6,6 +6,15 @@ 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.1.7 - 2017-08-27
10
+
11
+ * [FEATURE] Add `Channel#groups` and `Yt::Group`
12
+ * [ENHANCEMENT] Call `Yt#Auth.access_token_was_refreshed` after refreshing a token.
13
+
14
+ ## 0.1.6 - 2017-08-26
15
+
16
+ * [ENHANCEMENT] Compatibility with yt-auth 0.3.0.
17
+
9
18
  ## 0.1.5 - 2017-08-24
10
19
 
11
20
  * [FEATURE] Add `Yt::PlaylistItem.insert` and `Yt::PlaylistItem#delete`
@@ -38,6 +38,11 @@
38
38
  {% else %}
39
39
  <li><a href="{{ site.baseurl }}/comments.html">Comments</a></li>
40
40
  {% endif %}
41
+ {% if page.url == '/groups.html' %}
42
+ <li><a href="{{ site.baseurl }}/groups.html" class="active">Groups</a></li>
43
+ {% else %}
44
+ <li><a href="{{ site.baseurl }}/groups.html">Groups</a></li>
45
+ {% endif %}
41
46
  {% if page.url == '/errors.html' %}
42
47
  <li><a href="{{ site.baseurl }}/errors.html" class="active">Errors</a></li>
43
48
  {% else %}
@@ -171,3 +171,11 @@ channel = Yt::Channel.mine
171
171
  {% include example.html result='#&lt;Yt::Channel @id=UCwCnUcLcb9-eSrHa_RQGkQQ&gt;' %}</pre>
172
172
  </div></dd>
173
173
  </dl>
174
+
175
+ <dl>
176
+ {% include dt.html title="Channel’s analytics groups" label="warning" auth="must authenticate as the channel’s account" %}
177
+ <dd><a class="anchor" id="groups"></a><div class="highlight"><pre>
178
+ {% include doc.html instance="Channel#groups" %}{% include example.html object='<span class="no">Yt</span><span class="o">::</span><span class="no">Channel</span>' method='mine.groups' %}
179
+ {% include example.html result='#&lt;Yt::Relation [#&lt;Yt::Group @id=ABVSo3DwAAA&gt;, ...]&gt;' %}</pre>
180
+ </div></dd>
181
+ </dl>
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: "Yt::Group"
3
+ h2: "Groups"
4
+ ---
5
+
6
+ <p>
7
+ <code>Yt::Group</code> represents a <a href="https://developers.google.com/youtube/analytics/v1/reference/groups">YouTube Analytics group</a>.
8
+ Initialize using its YouTube ID:
9
+ </p>
10
+
11
+ <dl>
12
+ <dd><a class="anchor" id="new"></a><div class="highlight"><pre>
13
+ {% include doc.html instance="Group#initialize" %}{% include example.html object='group = <span class="no">Yt</span><span class="o">::</span><span class="no">Group</span>' method='new' params=' <span class="ss">id:</span> <span class="s1">"ABVSo3DwAAA"</span>' %}
14
+ {% include example.html result='#&lt;Yt::Group @id=ABVSo3DwAAA&gt;' %}
15
+ {% include doc.html instance="Group#canonical_url" %}{% include example.html object='group' method='title' %}
16
+ {% include example.html result='"Video group"' %}</pre>
17
+ </div></dd>
18
+ </dl>
19
+
20
+ <hr />
21
+ <h4>Authentication</h4>
22
+
23
+ <p>
24
+ All methods of <code>Yt::Group</code> <strong>act on behalf of YouTube accounts</strong> (e.g.: to fetch a group).<br />
25
+ To use these methods (marked with <span class="label label-warning">&nbsp;</span> below), you need to <a href="{{ site.baseurl }}/#api_client">get an API Client ID/Secret from Google</a>, then <a href="{{ site.baseurl }}/#tokens">obtain a refresh token</a> from the account you want to act as, and finally configure the values:
26
+ </p>
27
+
28
+ {% highlight ruby %}
29
+ Yt.configuration.client_id = "<your ID>" ## replace with your client ID
30
+ Yt.configuration.client_secret = "<your secret>" ## replace with your client secret
31
+ Yt.configuration.refresh_token = "<token>" ## use the account’s refresh token
32
+
33
+ Yt::Group.new(id: 'ABVSo3DwAAA').title
34
+ # => "Video group"
35
+ {% endhighlight %}
36
+
37
+ <hr />
38
+ <h4>List of <code>Yt::Group</code> data methods</h4>
39
+ <dl>
40
+ {% include dt.html title="Group’s snippet" label="warning" auth="must authenticate as the channel’s account" %}
41
+ <dd><a class="anchor" id="snippet"></a><div class="highlight"><pre>
42
+ {% include doc.html instance="Group#id" %}{% include example.html object='group' method='id' result='"ABVSo3DwAAA"' %}
43
+ {% include doc.html instance="Group#title" %}{% include example.html object='group' method='title' result='"Video Group"' %}
44
+ {% include doc.html instance="Group#published_at" %}{% include example.html object='group' method='published_at' result='2014-05-02 20:12:57 UTC' %}</pre>
45
+ </div></dd>
46
+
47
+ {% include dt.html title="Group’s content details" label="warning" auth="must authenticate as the group’s account" %}
48
+ <dd><a class="anchor" id="content_details"></a><div class="highlight"><pre>
49
+ {% include doc.html instance="Group#item_count" %}{% include example.html object='group' method='item_count' result='4' %}
50
+ {% include doc.html instance="Group#item_type" %}{% include example.html object='group' method='item_type' result='"youtube#video"' %}</pre>
51
+ </div></dd>
52
+ </dl>
@@ -132,6 +132,14 @@ module Yt
132
132
  end
133
133
  end
134
134
 
135
+ # @return [Yt::Relation<Yt::Group>] the analytics groups of the channel.
136
+ # @see https://developers.google.com/youtube/analytics/v1/reference/groups
137
+ def groups
138
+ @groups ||= Relation.new(Group) do |options|
139
+ get '/youtube/analytics/v1/groups', mine: true
140
+ end
141
+ end
142
+
135
143
  # @return [Yt::Relation<Yt::Playlist>] the public playlists of the channel.
136
144
  def playlists
137
145
  @playlists ||= Relation.new(Playlist, channel_id: id) do |options|
@@ -9,6 +9,7 @@ require 'yt/resource'
9
9
  require 'yt/response'
10
10
 
11
11
  require 'yt/channel'
12
+ require 'yt/group'
12
13
  require 'yt/playlist'
13
14
  require 'yt/playlist_item'
14
15
  require 'yt/video'
@@ -3,6 +3,6 @@ module Yt
3
3
  module Core
4
4
  # @return [String] the SemVer-compatible gem version.
5
5
  # @see http://semver.org
6
- VERSION = '0.1.5'
6
+ VERSION = '0.1.7'
7
7
  end
8
8
  end
@@ -0,0 +1,32 @@
1
+ module Yt
2
+ # Provides methods to interact with YouTube Analytics groups.
3
+ # @see https://developers.google.com/youtube/analytics/v1/reference/groups
4
+ class Group < Resource
5
+ # @!attribute [r] title
6
+ # @return [String] the group’s title.
7
+ has_attribute :title, in: :snippet
8
+
9
+ # @!attribute [r] published_at
10
+ # @return [Time] the date and time that the group was created.
11
+ has_attribute :published_at, in: :snippet, type: Time
12
+
13
+ # @!attribute [r] item_count
14
+ # @return [Integer] the number of items in the group.
15
+ has_attribute :item_count, in: :content_details, type: Integer
16
+
17
+ # @!attribute [r] item_type
18
+ # @return [String] the type of items in the group.
19
+ has_attribute :item_type, in: :content_details
20
+
21
+ def initialize(data = {})
22
+ super
23
+ @selected_data_parts = %i(id snippet content_details)
24
+ end
25
+
26
+ private
27
+
28
+ def part_params
29
+ super.merge api: 'youtube/analytics/v1'
30
+ end
31
+ end
32
+ end
@@ -61,7 +61,7 @@ module Yt
61
61
  end
62
62
 
63
63
  def get_part(required_part)
64
- resources = Relation.new(self.class, ids: [id]) do |options|
64
+ resources = Relation.new(self.class, part_params) do |options|
65
65
  get resources_path, resource_params(options)
66
66
  end
67
67
 
@@ -74,6 +74,10 @@ module Yt
74
74
  end
75
75
  end
76
76
 
77
+ def part_params
78
+ {ids: [id]}
79
+ end
80
+
77
81
  def type_cast(value, type)
78
82
  case [type]
79
83
  when [Time]
@@ -50,14 +50,15 @@ module Yt
50
50
 
51
51
  def refresh_access_token
52
52
  if Yt.configuration.refresh_token
53
- auth = Auth.new refresh_token: Yt.configuration.refresh_token
53
+ auth = Auth.find_by refresh_token: Yt.configuration.refresh_token
54
+ auth.access_token_was_refreshed
54
55
  Yt.configuration.access_token = auth.access_token
55
56
  end
56
57
  end
57
58
 
58
59
  def resources_path
59
60
  @options[:item_class].name.split('::').last.gsub(/^(\w{1})(.*)/) do
60
- "/youtube/v3/#{$1.downcase}#{$2}s"
61
+ "/#{@options.fetch(:api, 'youtube/v3')}/#{$1.downcase}#{$2}s"
61
62
  end
62
63
  end
63
64
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ['lib']
25
25
 
26
- spec.add_dependency 'yt-auth', '>= 0.2.3'
26
+ spec.add_dependency 'yt-auth', '>= 0.3.1'
27
27
  spec.add_dependency 'yt-support', '>= 0.1.3'
28
28
 
29
29
  spec.add_development_dependency 'bundler', '~> 1.14'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yt-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claudio Baccigalupo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-24 00:00:00.000000000 Z
11
+ date: 2017-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yt-auth
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.3
19
+ version: 0.3.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.3
26
+ version: 0.3.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: yt-support
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,7 @@ files:
178
178
  - docs/fonts/SecondaRound-Regular.ttf
179
179
  - docs/fonts/SecondaRound-Regular.woff
180
180
  - docs/fonts/SecondaRound-Regular.woff2
181
+ - docs/groups.html
181
182
  - docs/images/console-01.png
182
183
  - docs/images/console-02.png
183
184
  - docs/images/console-03.png
@@ -198,6 +199,7 @@ files:
198
199
  - lib/yt/comment_thread.rb
199
200
  - lib/yt/core.rb
200
201
  - lib/yt/core/version.rb
202
+ - lib/yt/group.rb
201
203
  - lib/yt/no_items_error.rb
202
204
  - lib/yt/playlist.rb
203
205
  - lib/yt/playlist_item.rb