brainzz 0.0.17 → 0.0.18

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: b6418d3735dad22f691496671fd91823b989fd41
4
- data.tar.gz: f461383e5187d29bc2863e0e2aa5c963bb5c2bd0
3
+ metadata.gz: 5668feb21fed30f063d10478004bb6ba7ecc6317
4
+ data.tar.gz: ecaed5994b411412064964aeefa3d998aeaee60e
5
5
  SHA512:
6
- metadata.gz: 87f7e178e3958e7db688a4c1afd297c270b1297e97c44ead20e0611744b19e5c5c5bc668edd9a19f10b51a8aba6fb9d7bbec51b7d29fc52f06c442c1e1379ec6
7
- data.tar.gz: 95ea36d3619fe42f04ac599e66f8710558c32d8d1db6e36089bf122bcea64ac5b069b307bc54462381b77c88f1192e42861c3dcb2da86dc89fd467de5597d2b4
6
+ metadata.gz: 1ab0494e395822611986b33fccc75cca750909c8880e3046f3fad28c376c51642855662f95dd6a4323b6cfde82d1a9386f0b380f016e9c1911f07f5ac5c3c2df
7
+ data.tar.gz: bddf04cd072595c7e32a58def7c3b7282d8813fe70e2c6dbd6ec4c5c8a3ba4eb616189334f5e837041ac7d941dd2451537360944564a54a282500f990340ce46
@@ -35,6 +35,8 @@ require_relative 'brainzz/models/view_percentage'
35
35
  require_relative 'brainzz/models/view_duration'
36
36
  require_relative 'brainzz/models/playlist_item'
37
37
  require_relative 'brainzz/models/playlist_items_wrapper'
38
+ require_relative 'brainzz/models/video_search_item'
39
+ require_relative 'brainzz/models/video_search_wrapper'
38
40
 
39
41
  require_relative 'brainzz/services/access_token_service'
40
42
 
@@ -42,6 +44,7 @@ require_relative 'brainzz/params/base_params'
42
44
  require_relative 'brainzz/params/analytics_params'
43
45
  require_relative 'brainzz/params/stats_params'
44
46
  require_relative 'brainzz/params/video_details_params'
47
+ require_relative 'brainzz/params/video_search_params'
45
48
  require_relative 'brainzz/params/channel_details_params'
46
49
  require_relative 'brainzz/params/video_stats_params'
47
50
  require_relative 'brainzz/params/channel_stats_params'
@@ -50,6 +53,7 @@ require_relative 'brainzz/params/playlist_items_params'
50
53
  require_relative 'brainzz/responses/playlist_items_response'
51
54
  require_relative 'brainzz/responses/details_response'
52
55
  require_relative 'brainzz/responses/video_details_response'
56
+ require_relative 'brainzz/responses/video_search_response'
53
57
  require_relative 'brainzz/responses/channel_details_response'
54
58
  require_relative 'brainzz/responses/video_stats_response'
55
59
  require_relative 'brainzz/responses/view_count_response'
@@ -74,6 +78,7 @@ require_relative 'brainzz/commands/base_command'
74
78
  require_relative 'brainzz/commands/data_command'
75
79
  require_relative 'brainzz/commands/playlist_items_command'
76
80
  require_relative 'brainzz/commands/video_details_command'
81
+ require_relative 'brainzz/commands/video_search_command'
77
82
  require_relative 'brainzz/commands/channel_details_command'
78
83
  require_relative 'brainzz/commands/analytics_command'
79
84
  require_relative 'brainzz/commands/stats_command'
@@ -3,8 +3,9 @@ module Brainzz
3
3
  class << self
4
4
  private
5
5
 
6
- def on_execute(video_ids, options={})
7
- video_details_params = VideoDetailsParams.new(video_ids, options)
6
+ def on_execute(video_ids, options={}, content_owner_id=nil)
7
+ video_details_params = VideoDetailsParams
8
+ .new(video_ids, options, content_owner_id)
8
9
 
9
10
  if video_details_params.valid?
10
11
  response = get(video_details_params)
@@ -14,15 +15,48 @@ module Brainzz
14
15
  end
15
16
  end
16
17
 
18
+ def headers(parameters)
19
+ headers = super
20
+
21
+ if parameters.content_owner_id
22
+ if parameters.content_owner_id
23
+ access_token = access_token_for(parameters.content_owner_id)
24
+ end
25
+
26
+ headers = headers.merge({
27
+ 'Authorization' => "Bearer #{access_token}",
28
+ })
29
+ end
30
+
31
+ headers
32
+ end
33
+
34
+ def access_token_for(content_owner_id)
35
+ AccessTokenService.retrieve_token_for content_owner_id
36
+ end
37
+
17
38
  def endpoint
18
39
  'videos'
19
40
  end
20
41
 
21
42
  def params(video_details_params)
22
- super.merge({
43
+ params = super.merge({
23
44
  'id' => video_details_params.video_ids.join(','),
24
45
  'part' => video_details_params.parts.join(',')
25
46
  })
47
+
48
+ if video_details_params.content_owner_id
49
+ # If we are checking on behalf of a content owner,
50
+ # we are using an access token and not a key
51
+ params.delete(:key) if video_details_params.content_owner_id
52
+
53
+ if video_details_params.content_owner_id
54
+ params['onBehalfOfContentOwner'] =
55
+ video_details_params.content_owner_id
56
+ end
57
+ end
58
+
59
+ params
26
60
  end
27
61
  end
28
62
  end
@@ -0,0 +1,72 @@
1
+ module Brainzz
2
+ class VideoSearchCommand < DataCommand
3
+ class << self
4
+ private
5
+
6
+ def on_execute(options={}, content_owner_id=nil)
7
+ video_search_params = VideoSearchParams.new(options, content_owner_id)
8
+
9
+ if video_search_params.valid?
10
+ response = get(video_search_params)
11
+ VideoSearchResponse.new response
12
+ else
13
+ VideoSearchResponse.new
14
+ end
15
+ end
16
+
17
+ def headers(parameters)
18
+ headers = super
19
+
20
+ if parameters.content_owner_id
21
+ if parameters.content_owner_id
22
+ access_token = access_token_for(parameters.content_owner_id)
23
+ end
24
+
25
+ headers = headers.merge({
26
+ 'Authorization' => "Bearer #{access_token}",
27
+ })
28
+ end
29
+
30
+ headers
31
+ end
32
+
33
+ def access_token_for(content_owner_id)
34
+ AccessTokenService.retrieve_token_for content_owner_id
35
+ end
36
+
37
+ def endpoint
38
+ 'search'
39
+ end
40
+
41
+ def params(video_search_params)
42
+ params = super.merge({
43
+ 'part' => 'snippet',
44
+ 'type' => 'video',
45
+ 'maxResults' => 50
46
+ })
47
+
48
+ if video_search_params.next_page_token
49
+ params['pageToken'] = video_search_params.next_page_token
50
+ end
51
+
52
+ params['order'] = video_search_params.order if video_search_params.order
53
+ if video_search_params.for_content_owner
54
+ params['forContentOwner'] = video_search_params.for_content_owner
55
+ end
56
+
57
+ if video_search_params.content_owner_id
58
+ # If we are checking on behalf of a content owner,
59
+ # we are using an access token and not a key
60
+ params.delete(:key) if video_search_params.content_owner_id
61
+
62
+ if video_search_params.content_owner_id
63
+ params['onBehalfOfContentOwner'] =
64
+ video_search_params.content_owner_id
65
+ end
66
+ end
67
+
68
+ params
69
+ end
70
+ end
71
+ end
72
+ end
@@ -10,8 +10,12 @@ module Brainzz
10
10
  PlaylistItemsCommand.execute playlist_id, response
11
11
  end
12
12
 
13
- def video_details_for(video_ids, options={})
14
- VideoDetailsCommand.execute video_ids, options
13
+ def video_details_for(video_ids, options={}, content_owner_id = nil)
14
+ VideoDetailsCommand.execute video_ids, options, content_owner_id
15
+ end
16
+
17
+ def video_search(options={}, content_owner_id = nil)
18
+ VideoSearchCommand.execute options, content_owner_id
15
19
  end
16
20
 
17
21
  def views_by_day_for(
@@ -1,19 +1,41 @@
1
1
  module Brainzz
2
2
  class Video < BaseModel
3
- attr_accessor :id, :title, :published_at, :duration, :tags
3
+ attr_accessor :id
4
+ attr_accessor :title
5
+ attr_accessor :description
6
+ attr_accessor :published_at
7
+ attr_accessor :duration
8
+ attr_accessor :tags
9
+ attr_accessor :view_count
10
+ attr_accessor :channel_id
11
+ attr_accessor :channel_title
12
+ attr_accessor :privacy_status
4
13
 
5
14
  def initialize(hash = {})
6
15
  @hash = hash || {}
7
16
 
8
- @id = transform(hash_id)
9
- @title = transform(hash_title)
10
- @published_at = transform_date(hash_published_at)
11
- @duration = transform_duration(hash_duration)
12
- @tags = transform(hash_tags)
17
+ @id = transform(hash_id)
18
+ @title = transform(hash_title)
19
+ @description = transform(hash_description)
20
+ @published_at = transform_date(hash_published_at)
21
+ @duration = transform_duration(hash_duration)
22
+ @tags = transform(hash_tags)
23
+ @view_count = transform(hash_view_count)
24
+ @channel_id = transform(hash_channel_id)
25
+ @channel_title = transform(hash_channel_title)
26
+ @privacy_status = transform(hash_privacy_status)
13
27
  end
14
28
 
15
29
  private
16
30
 
31
+ def status
32
+ @hash['status'] || {}
33
+ end
34
+
35
+ def file_details
36
+ @hash['fileDetails'] || {}
37
+ end
38
+
17
39
  def content_details
18
40
  @hash['contentDetails'] || {}
19
41
  end
@@ -26,6 +48,14 @@ module Brainzz
26
48
  @hash['snippet'] || {}
27
49
  end
28
50
 
51
+ def statistics
52
+ @hash['statistics'] || {}
53
+ end
54
+
55
+ def hash_view_count
56
+ statistics['viewCount']
57
+ end
58
+
29
59
  def hash_id
30
60
  @hash['videoId'] || @hash['id']
31
61
  end
@@ -34,6 +64,10 @@ module Brainzz
34
64
  snippet['title']
35
65
  end
36
66
 
67
+ def hash_description
68
+ snippet['description']
69
+ end
70
+
37
71
  def hash_published_at
38
72
  snippet['publishedAt']
39
73
  end
@@ -41,5 +75,17 @@ module Brainzz
41
75
  def hash_tags
42
76
  snippet['tags']
43
77
  end
78
+
79
+ def hash_channel_id
80
+ snippet['channelId']
81
+ end
82
+
83
+ def hash_channel_title
84
+ snippet['channelTitle']
85
+ end
86
+
87
+ def hash_privacy_status
88
+ status['privacyStatus']
89
+ end
44
90
  end
45
91
  end
@@ -0,0 +1,12 @@
1
+ module Brainzz
2
+ class VideoSearchItem
3
+ attr_accessor :id, :video
4
+
5
+ def initialize(hash = {})
6
+ @hash = hash
7
+
8
+ @id = hash['id']
9
+ @video = Video.new(hash)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module Brainzz
2
+ class VideoSearchWrapper
3
+ attr_accessor :next_page_token, :video_search_items
4
+
5
+ def initialize(video_search_data = {})
6
+ @video_search_items = []
7
+ items = video_search_data['items'] || []
8
+ items.each do |video_search_item|
9
+ @video_search_items << VideoSearchItem.new(video_search_item)
10
+ end
11
+
12
+ @next_page_token = video_search_data['nextPageToken']
13
+ end
14
+
15
+ def last_page?
16
+ !next_page_token
17
+ end
18
+ end
19
+ end
@@ -1,10 +1,11 @@
1
1
  module Brainzz
2
2
  class VideoDetailsParams
3
- attr_reader :video_ids, :parts
3
+ attr_reader :video_ids, :parts, :content_owner_id
4
4
 
5
- def initialize(video_ids, options={})
5
+ def initialize(video_ids, options={}, content_owner_id=nil)
6
6
  @video_ids = video_ids
7
7
  @parts = options.fetch(:parts, default_video_parts)
8
+ @content_owner_id = content_owner_id
8
9
  end
9
10
 
10
11
  def valid?
@@ -0,0 +1,17 @@
1
+ module Brainzz
2
+ class VideoSearchParams
3
+ attr_reader :content_owner_id, :next_page_token, :for_content_owner, :order
4
+
5
+ def initialize(options={}, content_owner_id=nil)
6
+ @for_content_owner = options.fetch(:for_content_owner, nil)
7
+ @order = options.fetch(:order, nil)
8
+ @content_owner_id = content_owner_id
9
+ @next_page_token = options.fetch(:next_page_token, nil)
10
+ end
11
+
12
+ def valid?
13
+ true
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ module Brainzz
2
+ class VideoSearchResponse < ::Reverb::Response
3
+ def on_success
4
+ self.data = VideoSearchWrapper.new(body)
5
+ end
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainzz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Herrick
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-01-08 00:00:00.000000000 Z
12
+ date: 2016-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -214,6 +214,7 @@ files:
214
214
  - lib/brainzz/commands/subscribers_lost_by_day_command.rb
215
215
  - lib/brainzz/commands/subscribers_lost_totals_command.rb
216
216
  - lib/brainzz/commands/video_details_command.rb
217
+ - lib/brainzz/commands/video_search_command.rb
217
218
  - lib/brainzz/commands/video_stats_command.rb
218
219
  - lib/brainzz/commands/view_count_by_day_command.rb
219
220
  - lib/brainzz/commands/view_duration_totals_command.rb
@@ -262,6 +263,8 @@ files:
262
263
  - lib/brainzz/models/subscribers_lost_count.rb
263
264
  - lib/brainzz/models/subscribers_lost_mixin.rb
264
265
  - lib/brainzz/models/video.rb
266
+ - lib/brainzz/models/video_search_item.rb
267
+ - lib/brainzz/models/video_search_wrapper.rb
265
268
  - lib/brainzz/models/video_stat.rb
266
269
  - lib/brainzz/models/view_count.rb
267
270
  - lib/brainzz/models/view_duration.rb
@@ -273,6 +276,7 @@ files:
273
276
  - lib/brainzz/params/playlist_items_params.rb
274
277
  - lib/brainzz/params/stats_params.rb
275
278
  - lib/brainzz/params/video_details_params.rb
279
+ - lib/brainzz/params/video_search_params.rb
276
280
  - lib/brainzz/params/video_stats_params.rb
277
281
  - lib/brainzz/responses/annotations_clickable_response.rb
278
282
  - lib/brainzz/responses/annotations_clicked_response.rb
@@ -292,6 +296,7 @@ files:
292
296
  - lib/brainzz/responses/subscribers_gained_response.rb
293
297
  - lib/brainzz/responses/subscribers_lost_response.rb
294
298
  - lib/brainzz/responses/video_details_response.rb
299
+ - lib/brainzz/responses/video_search_response.rb
295
300
  - lib/brainzz/responses/video_stats_response.rb
296
301
  - lib/brainzz/responses/view_count_response.rb
297
302
  - lib/brainzz/responses/view_duration_response.rb