yt 0.7.4 → 0.7.5

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: 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