yt 0.10.2 → 0.10.3

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: bffd4b8b4a58a2b17033305eeeb4e4e3c6e517de
4
- data.tar.gz: 23c5b423485af978fae17f0aea4fa99412df83ae
3
+ metadata.gz: ed082f94cdaa3fa496bd9ef6cffd95754fb292c1
4
+ data.tar.gz: 38a76b4cca68dcea1c70ab1bfe1423e6502a9922
5
5
  SHA512:
6
- metadata.gz: a31c789b981109c7821771d861d86c00b69689703269e964770caceddf21c4d734dde0052bb1ac356b43182d5957e3e551ac9afdba09d54673cc56fb4eff39d9
7
- data.tar.gz: 3618b8c13fb8344c7b26333524fa0fb628b81133435ce73b8fa9559cb4246a95a4a7861f09b727bb865656338f26192b0808b3ee3c209c0e18cb93d4b7257901
6
+ metadata.gz: c28709d46e78e6ed3b0b20d1c72d106b5330477e70088bd21193547963113b97594f44258c597a7b9203ba00e26defb838a748fb14bd958c59ea095fceb192f5
7
+ data.tar.gz: 535292f6eb80998cb0b46e6032eff963e7a0bae948b260d2be881c910f0e4eb5e664b72eff631155d6a1970e0e67c3210a3f5d9aa0053cb8d1d5094bda3c0680
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@ 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.10.3 - 2014-08-12
10
+
11
+ * [FEATURE] Add methods to insert and delete ContentID references
12
+ * [FEATURE] Add `.match_reference_id` to Claim model
13
+
9
14
  ## 0.10.2 - 2014-08-11
10
15
 
11
16
  * [FEATURE] Add `MatchPolicy` class with `.update` to change the policy used by an asset
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yt (0.10.2)
4
+ yt (0.10.3)
5
5
  activesupport
6
6
 
7
7
  GEM
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.10.2'
44
+ gem 'yt', '~> 0.10.3'
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*)
@@ -7,11 +7,25 @@ module Yt
7
7
  #
8
8
  # Resources with references are: {Yt::Models::ContentOwner content owners}.
9
9
  class References < Base
10
+ def insert(attributes = {})
11
+ underscore_keys! attributes
12
+ body = {contentType: attributes[:content_type] }
13
+ params = {claimId: attributes[:claim_id], onBehalfOfContentOwner: @auth.owner_name}
14
+ do_insert(params: params, body: body)
15
+ end
10
16
 
11
17
  private
12
18
 
13
19
  def new_item(data)
14
- Yt::Reference.new data: data
20
+ Yt::Reference.new data: data, auth: @auth
21
+ end
22
+
23
+ # @return [Hash] the parameters to submit to YouTube to add a reference.
24
+ # @see https://developers.google.com/youtube/partner/docs/v1/references/insert
25
+ def insert_params
26
+ super.tap do |params|
27
+ params[:path] = '/youtube/partner/v1/references'
28
+ end
15
29
  end
16
30
 
17
31
  # @return [Hash] the parameters to submit to YouTube to list references
@@ -27,6 +41,16 @@ module Yt
27
41
  def references_params
28
42
  apply_where_params! on_behalf_of_content_owner: @parent.owner_name
29
43
  end
44
+
45
+ # If we dropped support for ActiveSupport 3, then we could simply
46
+ # invoke transform_keys!{|key| key.to_s.underscore.to_sym}
47
+ def underscore_keys!(hash)
48
+ hash.dup.each_key{|key| hash[underscore key] = hash.delete key}
49
+ end
50
+
51
+ def underscore(value)
52
+ value.to_s.underscore.to_sym
53
+ end
30
54
  end
31
55
  end
32
56
  end
@@ -131,6 +131,12 @@ module Yt
131
131
  def block_outside_ownership?
132
132
  @block_outside_ownership ||= @data["blockOutsideOwnership"]
133
133
  end
134
+
135
+ # @return [String] The unique ID that YouTube uses to identify the
136
+ # reference that generated the match.
137
+ def match_reference_id
138
+ @match_reference_id ||= @data.fetch('matchInfo', {})['referenceId']
139
+ end
134
140
  end
135
141
  end
136
142
  end
@@ -27,6 +27,10 @@ module Yt
27
27
  super options
28
28
  @owner_name = options[:owner_name]
29
29
  end
30
+
31
+ def create_reference(params = {})
32
+ references.insert params
33
+ end
30
34
  end
31
35
  end
32
36
  end
@@ -7,6 +7,21 @@ module Yt
7
7
  class Reference < Base
8
8
  def initialize(options = {})
9
9
  @data = options[:data]
10
+ @id = options[:id]
11
+ @auth = options[:auth]
12
+ end
13
+
14
+ # Soft-deletes the reference.
15
+ #
16
+ # @note YouTube API does not provide a +delete+ method for the Reference
17
+ # resource, but only an +update+ method. Updating the +status+ of a
18
+ # Reference to "inactive" can be considered a soft-deletion, since it
19
+ # allows to successively create new references for the same claim.
20
+ # @return [Boolean] whether the reference is inactive.
21
+ def delete
22
+ body = {id: id, status: :inactive}
23
+ do_update(body: body) {|data| @data = data}
24
+ inactive?
10
25
  end
11
26
 
12
27
  # @return [String] the ID that YouTube assigns and uses to uniquely
@@ -173,6 +188,17 @@ module Yt
173
188
  def audiovisual?
174
189
  content_type == 'audiovisual'
175
190
  end
191
+
192
+ private
193
+
194
+ # @see https://developers.google.com/youtube/partner/docs/v1/references/update
195
+ def update_params
196
+ super.tap do |params|
197
+ params[:expected_response] = Net::HTTPOK
198
+ params[:path] = "/youtube/partner/v1/references/#{id}"
199
+ params[:params] = {onBehalfOfContentOwner: @auth.owner_name}
200
+ end
201
+ end
176
202
  end
177
203
  end
178
204
  end
data/lib/yt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yt
2
- VERSION = '0.10.2'
2
+ VERSION = '0.10.3'
3
3
  end
@@ -190,6 +190,13 @@ describe Yt::Claim do
190
190
  end
191
191
  end
192
192
 
193
+ describe '#match_reference_id' do
194
+ context 'given fetching a claim returns matchInfo' do
195
+ let(:data) { {"matchInfo"=>{"referenceId"=>"0r3JDtcRLuQ"}} }
196
+ it { expect(claim.match_reference_id).to eq "0r3JDtcRLuQ" }
197
+ end
198
+ end
199
+
193
200
  describe '#third_party?' do
194
201
  context 'given fetching a claim returns thirdPartyClaim true' do
195
202
  let(:data) { {"thirdPartyClaim"=>true} }
@@ -334,7 +334,7 @@ describe Yt::Video, :device_app do
334
334
  let!(:old_privacy_status) { 'private' }
335
335
  after { video.delete}
336
336
 
337
- let!(:new_scheduled_at) { Yt::Timestamp.parse("#{rand 30 + 1} Jan 2020", Time.now) }
337
+ let!(:new_scheduled_at) { Yt::Timestamp.parse("#{rand(30) + 1} Jan 2020", Time.now) }
338
338
 
339
339
  context 'passing the parameter in underscore syntax' do
340
340
  let(:attrs) { {publish_at: new_scheduled_at} }
@@ -95,6 +95,33 @@ describe Yt::ContentOwner, :partner do
95
95
  end
96
96
  end
97
97
 
98
+ describe 'references' do
99
+ let(:claim_id) { ENV['YT_TEST_PARTNER_REFERENCE_CLAIM_ID'] }
100
+ let(:content_type) { ENV['YT_TEST_PARTNER_REFERENCE_CONTENT_TYPE'] }
101
+ let(:params) { {claim_id: claim_id, content_type: content_type} }
102
+
103
+ specify 'can be added' do
104
+ begin
105
+ expect($content_owner.create_reference params).to be_a Yt::Reference
106
+ rescue Yt::Errors::RequestError => e
107
+ # @note: Every time this test runs, a reference is inserted for the
108
+ # same claim, but YouTube does not allow this, and responds with an
109
+ # error message like "You attempted to create a reference using the
110
+ # content of a previously claimed video, but such a reference already
111
+ # exists. The ID of the duplicate reference is xhpACYclOdc."
112
+ # For the sake of testing, we delete the duplicate and try again.
113
+ # @note: Deleting a reference does not work if the reference status is
114
+ # "checking" or "pending" and it can take up to 4 minutes for a new
115
+ # reference to be checked. The +sleep+ statement takes care of this
116
+ # case in the only way allowed by YouTube: sadly waiting.
117
+ raise unless e.reasons.include? 'referenceAlreadyExists'
118
+ id = e.kind['message'].match(/reference is (.*?)\.$/) {|re| re[1]}
119
+ sleep 15 until Yt::Reference.new(id: id, auth: $content_owner).delete
120
+ expect($content_owner.create_reference params).to be_a Yt::Reference
121
+ end
122
+ end
123
+ end
124
+
98
125
  describe '.references' do
99
126
  describe '.where(id: reference_id)' do
100
127
  let(:reference) { $content_owner.references.where(id: reference_id).first }
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.10.2
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claudio Baccigalupo