yt-core 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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