yt 0.7.4 → 0.7.5

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: 3db26d07a5ba0fed297bba2c49bf6d3124620f48
4
- data.tar.gz: 9fdda77579c877c307fbd36880744ca89a925b29
3
+ metadata.gz: d346ffef89d5b5f77243722480b4182d31d23a7f
4
+ data.tar.gz: 1148ab3e8561f75edba5cf62dad118d0e4fe255d
5
5
  SHA512:
6
- metadata.gz: ee58c92e64c053f44f05634012be1804841db856118917c9a02539a47267bedc1c3e4b2f662988fac7c33fd1688db71fe45f1aabed3773da78e0a8dfe3710d0a
7
- data.tar.gz: 3fa6e55ee78ec12f9e9a6810f8a7260fd2d62313758324cb984e2f3655a784af60504614796d18f0107e9ad64ffa221df202283fb64537bcf1630e8d549a6746
6
+ metadata.gz: 7ab946dc91a6d0089042d33ada2939b0a8c6a2a8221360e3f9cd122c197cdf40835715d3b284b869c344de7af8260eaa305a83b76fddcff8fd29372dee876536
7
+ data.tar.gz: 1c9cbb659eddc7993dbd3f5c9e8206d2bed99639bfb189bf013565d7b9884773711e45f379f2ac491e3e92e4282a0b2b8b05d1692a6c8d4315d1997e433fcabb
data/.travis.yml CHANGED
@@ -6,11 +6,11 @@ matrix:
6
6
  - rvm: 1.9.3
7
7
  gemfile: gemfiles/Gemfile.activesupport-3.x
8
8
  env:
9
- - secure: Z93M7+GBYG8A7Dsjwcsgj/8AmdJ5X2KezBk9qelw89/OtAqIp1zMNQehTEg24p/NygkNjnGycb3DQuW++31v4c+mt5/MgDDhd2jXJ4+js+3gAMAIpiMtPJfEOvmKxLbC0uMaQhXLn7dGMnn8ed7hh6Zu/8P+17qZvVeI0thI3Dg=
9
+ - secure: OsmWyhhYNILEb1lhqxPX+iEfbWzC3dELuxQ7JGP9iN/FhqBtlV51cu+u2cBBdql6Gzuqi4VlMEeJSX0PQUmzOsMb0vHhOJDyp4a32NE+xry8LOT8XdCwni20ZBcUeFxC5hMUVebPuhqBTFjBWbXQKwKSXIdPnNWz31d9kyGIsxk=
10
10
  - rvm: 2.0.0
11
11
  gemfile: gemfiles/Gemfile.activesupport-4.x
12
12
  env:
13
- - secure: eIxGZcTZFVMxn0cxjaknhflAR78L6q+Q2G6jCXnFxqj8ARfgAS1F8v7ErkGaJ9h6dxfsH+5evhj4ZUc/gvHaqs8jcT9CVGUZsC7jpZz3gkfQ9k7Tm3sTnSfv4HbqGM8OkCJkLNOUQypmGr+mkPQskroNPhm6WT9Ml1vGq1RSTow=
13
+ - secure: FrmFA2BE0FYyuKsf0FEO0EAXY+h048HbD1p3lu5XPo9/lxpAl7wM5m12HsnJQuNY6UlUmZ5bp9f8upCBZpz7cLZK5e/FWLWSvkv3Fts+NVsbAcVtFgvBKOCgTznZi/qgUtqbWBevkM3gyXyylzdB+c4wWjoOO/xSDVR227m8nMA=
14
14
  env:
15
15
  global:
16
16
  - secure: ApPj5c9h6xk+AbHHf4KXL10QnleYCWwcp2+qMFolrS6RWR5vhrnKq1UBo0h59HuvXeOQIgZ/GmocuSEZovS9c1hQP3n0PHSNEnGUNJyn6CS3BiPQSWmC3p2pONo1Xv+hVWfzDoEv80b82GX5P5x/l1BSqhpxLA9geITJprWsoLg=
@@ -22,4 +22,4 @@ env:
22
22
  - secure: Ejj8tsuwyrRVmCc/R9ubKWCHWhCGpe0Dy6fc1UuPCkcMZyXq9ZC02v2obWsTQQ7epEgsCYZAO4v/gWpuv1b1huGcWdfJzMW7RCoY87cEf9HnAK0lSwGx4+/pYkEMe8y5p149C3vAR8nqczvEavN1fUq/WwPUqp+JyDP7kwFTs2Y=
23
23
  - secure: gE5kAT1R54hmS+W3YYGcUtlD8ZskvTctVR3sr+C5CUjVPdq6Ktx5Q/a6EJyAVVrhxpaCOuk3LG+VkzdQIVFUNRiDPcOulkond4HkSQDoy+IJ/wTXvUS+lIJ1ERUnWega+APrQUjH5s2WayPGZUBqWt/u8Tt9EmSUZfuKZSEXqZk=
24
24
  - secure: ZUx5v/wHW/TENg8NfFINiiMoe2D031ntDTiuIBdf88c/bMClkEtRRgomtK9RBkFonEyGEOkXxUm2SLzRf340V3eIXWQhil7ab1lcYs8X59aVS/NK/GqChH8Nia17gc3OTQ9k6rYvj4Lp60Dh9WG1cijLPd4/OvPmf6qX9uYfJMw=
25
- - secure: DumQVO01Y3Ki1skuOYOZzosDb6jS0XyG1O8Agy3mVxXGJzQE+s1z2UFz4gMpsU9o/gmiNMddp7I6+RtbZjo9hN3H7vlRRwEeB7tuUMiDyomSx1FlHcCFfPdTmhxGg8X78SErMWqNC6eReGrCTgBdIq1ho7dIu53qJNxTEFqx7eI=
25
+ - secure: DumQVO01Y3Ki1skuOYOZzosDb6jS0XyG1O8Agy3mVxXGJzQE+s1z2UFz4gMpsU9o/gmiNMddp7I6+RtbZjo9hN3H7vlRRwEeB7tuUMiDyomSx1FlHcCFfPdTmhxGg8X78SErMWqNC6eReGrCTgBdIq1ho7dIu53qJNxTEFqx7eI=
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yt (0.7.4)
4
+ yt (0.7.5)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (4.1.1)
10
+ activesupport (4.1.2)
11
11
  i18n (~> 0.6, >= 0.6.9)
12
12
  json (~> 1.7, >= 1.7.7)
13
13
  minitest (~> 5.1)
@@ -20,7 +20,7 @@ GEM
20
20
  term-ansicolor
21
21
  thor
22
22
  diff-lcs (1.2.5)
23
- docile (1.1.4)
23
+ docile (1.1.5)
24
24
  i18n (0.6.9)
25
25
  json (1.8.1)
26
26
  mime-types (2.3)
@@ -33,14 +33,14 @@ GEM
33
33
  rspec-core (~> 3.0.0)
34
34
  rspec-expectations (~> 3.0.0)
35
35
  rspec-mocks (~> 3.0.0)
36
- rspec-core (3.0.1)
36
+ rspec-core (3.0.2)
37
37
  rspec-support (~> 3.0.0)
38
- rspec-expectations (3.0.1)
38
+ rspec-expectations (3.0.2)
39
39
  diff-lcs (>= 1.2.0, < 2.0)
40
40
  rspec-support (~> 3.0.0)
41
- rspec-mocks (3.0.1)
41
+ rspec-mocks (3.0.2)
42
42
  rspec-support (~> 3.0.0)
43
- rspec-support (3.0.0)
43
+ rspec-support (3.0.2)
44
44
  simplecov (0.8.2)
45
45
  docile (~> 1.1.0)
46
46
  multi_json
data/HISTORY.md CHANGED
@@ -12,6 +12,7 @@ v0.7 - 2014/06/18
12
12
  * Sort channel.videos by most recent first
13
13
  * Extract Reports (earnings, views) into module with macro `has_report`
14
14
  * New channel reports: comments, likes, dislikes, shares and impressions
15
+ * Allow both normal and partnered channels to retrieve reports about views, comments, likes, dislikes, shares
15
16
 
16
17
  v0.6 - 2014/06/05
17
18
  -----------------
data/README.md CHANGED
@@ -122,6 +122,12 @@ channel.subscribe #=> true
122
122
 
123
123
  channel.create_playlist title: 'New playlist' #=> true
124
124
  channel.delete_playlists title: 'New playlist' #=> [true]
125
+
126
+ channel.views since: 7.days.ago #=> {Wed, 28 May 2014 => 12.0, Thu, 29 May 2014 => 3.0, …}
127
+ channel.comments until: 2.days.ago #=> {Wed, 28 May 2014 => 9.0, Thu, 29 May 2014 => 4.0, …}
128
+ channel.likes from: 8.days.ago #=> {Tue, 27 May 2014 => 7.0, Wed, 28 May 2014 => 0.0, …}
129
+ channel.dislikes to: 2.days.ago #=> {Tue, 27 May 2014 => 0.0, Wed, 28 May 2014 => 1.0, …}
130
+ channel.shares since: 7.days.ago, until: 7.days.ago #=> {Wed, 28 May 2014 => 3.0}
125
131
  ```
126
132
 
127
133
  *The methods above require to be authenticated as a YouTube account (see below).*
@@ -133,8 +139,8 @@ channel = Yt::Channel.new id: 'UCxO1tY8h1AhOz0T4ENwmpow', auth: content_owner
133
139
  channel.earnings_on 5.days.ago #=> 12.23
134
140
  channel.views since: 7.days.ago #=> {Wed, 28 May 2014 => 12.0, Thu, 29 May 2014 => 3.0, …}
135
141
  channel.comments until: 2.days.ago #=> {Wed, 28 May 2014 => 9.0, Thu, 29 May 2014 => 4.0, …}
136
- channel.ch.likes from: 8.days.ago #=> {Tue, 27 May 2014 => 7.0, Wed, 28 May 2014 => 0.0, …}
137
- channel.ch.dislikes to: 2.days.ago #=> {Tue, 27 May 2014 => 0.0, Wed, 28 May 2014 => 1.0, …}
142
+ channel.likes from: 8.days.ago #=> {Tue, 27 May 2014 => 7.0, Wed, 28 May 2014 => 0.0, …}
143
+ channel.dislikes to: 2.days.ago #=> {Tue, 27 May 2014 => 0.0, Wed, 28 May 2014 => 1.0, …}
138
144
  channel.shares since: 7.days.ago, until: 7.days.ago #=> {Wed, 28 May 2014 => 3.0}
139
145
  channel.impressions_on 5.days.ago #=> 157.0
140
146
  ```
@@ -394,7 +400,7 @@ with an extra `code` parameter that looks something like `4/Ja60jJ7_Kw0`.
394
400
  Just pass the code to the following method to authenticate and initialize the account:
395
401
 
396
402
  ```ruby
397
- account = Yt::Account.new authorization_code: '4/Ja60jJ7_Kw0'
403
+ account = Yt::Account.new authorization_code: '4/Ja60jJ7_Kw0', redirect_uri: redirect_uri
398
404
  account.email #=> (retrieves the account’s e-mail address)
399
405
  account.videos #=> (lists a video to an account’s playlist)
400
406
  ```
@@ -433,7 +439,7 @@ To install on your system, run
433
439
 
434
440
  To use inside a bundled Ruby project, add this line to the Gemfile:
435
441
 
436
- gem 'yt', '~> 0.7.4'
442
+ gem 'yt', '~> 0.7.5'
437
443
 
438
444
  Since the gem follows [Semantic Versioning](http://semver.org),
439
445
  indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
@@ -9,7 +9,7 @@ module Yt
9
9
  private
10
10
 
11
11
  def new_item(data)
12
- data['refresh_token'] = auth_params[:refresh_token]
12
+ data['refresh_token'] ||= auth_params[:refresh_token]
13
13
  Yt::Authentication.new data
14
14
  end
15
15
 
@@ -20,14 +20,16 @@ module Yt
20
20
  def list_params
21
21
  super.tap do |params|
22
22
  params[:path] = '/youtube/analytics/v1/reports'
23
- params[:params] = {}.tap do |params|
24
- params['ids'] = "contentOwner==#{@auth.owner_name}"
25
- params['filters'] = "channel==#{@parent.id}"
26
- params['start-date'] = @days_range.begin
27
- params['end-date'] = @days_range.end
28
- params['metrics'] = @metric
29
- params['dimensions'] = :day
30
- end
23
+ params[:params] = @parent.reports_params.merge reports_params
24
+ end
25
+ end
26
+
27
+ def reports_params
28
+ {}.tap do |params|
29
+ params['start-date'] = @days_range.begin
30
+ params['end-date'] = @days_range.end
31
+ params['metrics'] = @metric
32
+ params['dimensions'] = :day
31
33
  end
32
34
  end
33
35
 
@@ -24,6 +24,10 @@ module Yt
24
24
  # @return [Yt::Collections::Videos] the videos owned by the account.
25
25
  has_many :videos
26
26
 
27
+ # @return [String] name of the CMS account, if the account is partnered.
28
+ # @return [nil] if the account is not a partnered content owner.
29
+ attr_reader :owner_name
30
+
27
31
  # @private
28
32
  # Tells `has_many :videos` that account.videos should return all the
29
33
  # videos *owned by* the account (public, private, unlisted).
@@ -121,6 +121,21 @@ module Yt
121
121
  def videos_params
122
122
  {channelId: id}
123
123
  end
124
+
125
+ # @private
126
+ # Tells `has_reports` to retrieve the reports from YouTube Analytics API
127
+ # either as a Channel or as a Content Owner.
128
+ # @see https://developers.google.com/youtube/analytics/v1/reports
129
+ def reports_params
130
+ {}.tap do |params|
131
+ if auth.owner_name
132
+ params['ids'] = "contentOwner==#{auth.owner_name}"
133
+ params['filters'] = "channel==#{id}"
134
+ else
135
+ params['ids'] = "channel==#{id}"
136
+ end
137
+ end
138
+ end
124
139
  end
125
140
  end
126
141
  end
@@ -11,9 +11,6 @@ module Yt
11
11
  # @return [Yt::Collection::PartneredChannels] the channels managed by the CMS account.
12
12
  has_many :partnered_channels
13
13
 
14
- # @return [String] the name of the CMS account.
15
- attr_reader :owner_name
16
-
17
14
  def initialize(options = {})
18
15
  super options
19
16
  @owner_name = options[:owner_name]
data/lib/yt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yt
2
- VERSION = '0.7.4'
2
+ VERSION = '0.7.5'
3
3
  end
@@ -70,6 +70,26 @@ describe Yt::Channel, :device_app do
70
70
  # rather than a more logical 4xx error. Hopefully this will get fixed
71
71
  # and this code (and test) removed.
72
72
  it { expect{channel.subscribe}.to raise_error Yt::Errors::ServerError }
73
+
74
+ it 'returns valid reports for channel-related metrics' do
75
+ # Some reports are only available to Content Owners.
76
+ # See content ownere test for more details about what the methods return.
77
+ expect{channel.views}.not_to raise_error
78
+ expect{channel.comments}.not_to raise_error
79
+ expect{channel.likes}.not_to raise_error
80
+ expect{channel.dislikes}.not_to raise_error
81
+ expect{channel.shares}.not_to raise_error
82
+ expect{channel.earnings}.to raise_error Yt::Errors::Unauthorized
83
+ expect{channel.impressions}.to raise_error Yt::Errors::Unauthorized
84
+
85
+ expect{channel.views_on 3.days.ago}.not_to raise_error
86
+ expect{channel.comments_on 3.days.ago}.not_to raise_error
87
+ expect{channel.likes_on 3.days.ago}.not_to raise_error
88
+ expect{channel.dislikes_on 3.days.ago}.not_to raise_error
89
+ expect{channel.shares_on 3.days.ago}.not_to raise_error
90
+ expect{channel.earnings_on 3.days.ago}.to raise_error Yt::Errors::Unauthorized
91
+ expect{channel.impressions_on 3.days.ago}.to raise_error Yt::Errors::Unauthorized
92
+ end
73
93
  end
74
94
 
75
95
  context 'given an unknown channel' do
@@ -182,6 +182,18 @@ describe Yt::Channel, :partner do
182
182
  end
183
183
  end
184
184
 
185
+ describe 'shares can be retrieved for a specific day' do
186
+ context 'in which the channel was partnered' do
187
+ let(:shares) { channel.shares_on 5.days.ago}
188
+ it { expect(shares).to be_a Float }
189
+ end
190
+
191
+ context 'in which the channel was not partnered' do
192
+ let(:shares) { channel.shares_on 20.years.ago}
193
+ it { expect(shares).to be_nil }
194
+ end
195
+ end
196
+
185
197
  describe 'shares can be retrieved for a range of days' do
186
198
  let(:date) { 4.days.ago }
187
199
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claudio Baccigalupo