yourub 1.1.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -6
- data/Gemfile +15 -1
- data/README.md +36 -25
- data/Rakefile +18 -0
- data/config/yourub.yml +1 -1
- data/lib/yourub/client.rb +38 -10
- data/lib/yourub/config.rb +34 -1
- data/lib/yourub/default.rb +1 -1
- data/lib/yourub/meta_search.rb +134 -0
- data/lib/yourub/rest/api.rb +6 -0
- data/lib/yourub/rest/categories.rb +39 -0
- data/lib/yourub/rest/request.rb +22 -4
- data/lib/yourub/rest/search.rb +11 -149
- data/lib/yourub/rest/videos.rb +38 -0
- data/lib/yourub/result.rb +41 -0
- data/lib/yourub/validator.rb +4 -11
- data/lib/yourub/version.rb +3 -3
- data/lib/yourub.rb +2 -3
- data/spec/fixtures/categories_list.json +1 -0
- data/spec/fixtures/categories_list_formatted.json +1 -0
- data/spec/fixtures/search_list.json +1 -0
- data/spec/fixtures/single_video.json +1 -0
- data/spec/fixtures/video_with_200_views.json +1 -0
- data/spec/fixtures/videos_list.json +1 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/shared_context_result_load_fixture.rb +11 -0
- data/spec/support/shared_context_result_search_list.rb +16 -0
- data/spec/support/shared_context_result_search_list_with_single_videos.rb +24 -0
- data/spec/support/shared_context_stub_client_connection.rb +18 -0
- data/spec/yourub/client_spec.rb +29 -72
- data/spec/yourub/count_filter_spec.rb +4 -5
- data/spec/yourub/count_spec.rb +39 -0
- data/spec/yourub/integration.rb +105 -0
- data/spec/yourub/meta_search_spec.rb +141 -0
- data/spec/yourub/rest/categories_spec.rb +33 -0
- data/spec/yourub/rest/request_spec.rb +32 -0
- data/spec/yourub/rest/videos_spec.rb +24 -0
- data/spec/yourub/validator_spec.rb +54 -57
- data/yourub.gemspec +0 -5
- metadata +39 -66
- data/lib/yourub/cli.rb +0 -20
- data/lib/yourub/reader.rb +0 -21
- data/spec/fixtures/categories.json +0 -0
- data/spec/fixtures/category.json +0 -0
- data/spec/helper.rb +0 -26
data/lib/yourub/rest/search.rb
CHANGED
@@ -3,157 +3,19 @@ require 'yourub/rest/request'
|
|
3
3
|
module Yourub
|
4
4
|
module REST
|
5
5
|
module Search
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@count_filter = {}
|
18
|
-
@criteria = Yourub::Validator.confirm(criteria)
|
19
|
-
search_by_criteria
|
20
|
-
rescue ArgumentError => e
|
21
|
-
Yourub.logger.error "#{e}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def search_by_criteria
|
26
|
-
if @criteria.has_key? :id
|
27
|
-
search_by_id
|
28
|
-
else
|
29
|
-
merge_criteria_with_api_options
|
30
|
-
retrieve_categories
|
31
|
-
retrieve_videos
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def search_by_id
|
36
|
-
params = {
|
37
|
-
:id => @criteria[:id],
|
38
|
-
:part => 'snippet,statistics',
|
39
|
-
}
|
40
|
-
video_response = videos_list_request(params)
|
41
|
-
entry = Yourub::Reader.parse_videos(video_response)
|
42
|
-
add_video_to_search_result(entry.first) unless entry.nil?
|
43
|
-
end
|
44
|
-
|
45
|
-
def merge_criteria_with_api_options
|
46
|
-
mappings = {query: :q, max_results: :maxResults, country: :regionCode}
|
47
|
-
@api_options.merge! @criteria
|
48
|
-
@api_options.keys.each do |k|
|
49
|
-
@api_options[ mappings[k] ] = @api_options.delete(k) if mappings[k]
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def retrieve_categories
|
54
|
-
if @criteria.has_key? :category
|
55
|
-
get_categories_for_country(@criteria[:country])
|
56
|
-
@categories = Yourub::Validator.valid_category(@categories, @criteria[:category])
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def get_categories_for_country(country)
|
61
|
-
param = {"part" => "snippet","regionCode" => country }
|
62
|
-
categories_list = video_categories_list_request(param)
|
63
|
-
categories_list.data.items.each do |cat_result|
|
64
|
-
category_name = parse_name(cat_result["snippet"]["title"])
|
65
|
-
@categories.push(cat_result["id"] => category_name)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def retrieve_videos
|
70
|
-
consume_criteria do |criteria|
|
71
|
-
begin
|
72
|
-
req = search_list_request(criteria)
|
73
|
-
get_details_and_store req
|
74
|
-
rescue StandardError => e
|
75
|
-
Yourub.logger.error "Error #{e} retrieving videos for the criteria: #{criteria.to_s}"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def consume_criteria
|
81
|
-
to_consume = @api_options
|
82
|
-
if @criteria[:country]
|
83
|
-
@criteria[:country].each do |country|
|
84
|
-
to_consume[:regionCode] = country
|
85
|
-
consume_categories(to_consume) do |cat|
|
86
|
-
yield cat
|
87
|
-
end
|
88
|
-
end
|
89
|
-
else
|
90
|
-
yield to_consume
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def consume_categories(to_consume)
|
95
|
-
if @categories.size > 0
|
96
|
-
@categories.each do |cat|
|
97
|
-
to_consume[:videoCategoryId] = cat.keys[0].to_i
|
98
|
-
yield to_consume
|
99
|
-
end
|
100
|
-
else
|
101
|
-
yield to_consume
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def get_details_and_store(video_list)
|
106
|
-
video_list.data.items.each do |video_item|
|
107
|
-
params = video_params(video_item.id.videoId)
|
108
|
-
v = videos_list_request(params)
|
109
|
-
v = Yourub::Reader.parse_videos(v)
|
110
|
-
add_video_to_search_result(v.first) if v
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def search_list_request(params)
|
115
|
-
send_request("search", "list", params)
|
116
|
-
end
|
117
|
-
|
118
|
-
def videos_list_request(params)
|
119
|
-
send_request("videos", "list", params)
|
120
|
-
end
|
121
|
-
|
122
|
-
def video_categories_list_request(params)
|
123
|
-
send_request("video_categories", "list", params)
|
124
|
-
end
|
125
|
-
|
126
|
-
def send_request(resource_type, method, params)
|
127
|
-
#byebug
|
128
|
-
Yourub::REST::Request.new(self, resource_type, method, params)
|
129
|
-
end
|
130
|
-
|
131
|
-
def video_params(result_video_id)
|
132
|
-
fields = URI::encode(
|
133
|
-
'items(id,snippet(title,thumbnails),statistics(viewCount))'
|
134
|
-
)
|
135
|
-
{ :id => result_video_id,
|
136
|
-
:part => 'snippet,statistics,id',
|
137
|
-
:fields => fields }
|
138
|
-
end
|
139
|
-
|
140
|
-
def add_video_to_search_result(entry)
|
141
|
-
if Yourub::CountFilter.accept?(entry)
|
142
|
-
@videos.push(entry)
|
6
|
+
class << self
|
7
|
+
# @param client[Yourub::Client]
|
8
|
+
# @param params[hash]
|
9
|
+
#
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# client = Yourub::Client.new
|
13
|
+
# req = Yourub::REST::Search.list(client, params)
|
14
|
+
#
|
15
|
+
def list(client, params)
|
16
|
+
Yourub::REST::Request.new(client,"search", "list", params)
|
143
17
|
end
|
144
18
|
end
|
145
|
-
|
146
|
-
def parse_name(name)
|
147
|
-
return name.gsub("/", "-").downcase.gsub(/\s+/, "")
|
148
|
-
end
|
149
|
-
|
150
|
-
def get_views(id)
|
151
|
-
params = {:id => id, :part => 'statistics'}
|
152
|
-
request = videos_list_request(params)
|
153
|
-
v = Yourub::Reader.parse_videos(request)
|
154
|
-
v ? Yourub::CountFilter.get_views_count(v.first) : nil
|
155
|
-
end
|
156
|
-
|
157
19
|
end
|
158
20
|
end
|
159
21
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'yourub/rest/request'
|
2
|
+
|
3
|
+
module Yourub
|
4
|
+
module REST
|
5
|
+
module Videos
|
6
|
+
class << self
|
7
|
+
# @param client[Yourub::Client]
|
8
|
+
# @param params[hash]
|
9
|
+
#
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# client = Yourub::Client.new
|
13
|
+
# req = Yourub::REST::Videos.list(client, params)
|
14
|
+
#
|
15
|
+
|
16
|
+
def list(client, params)
|
17
|
+
Yourub::REST::Request.new(client, "videos", "list", params)
|
18
|
+
end
|
19
|
+
|
20
|
+
def single_video(client, video_id)
|
21
|
+
params = single_video_params(video_id)
|
22
|
+
list(client, params)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def single_video_params(video_id)
|
28
|
+
fields = URI::encode(
|
29
|
+
'items(id,snippet(title,thumbnails),statistics(viewCount))'
|
30
|
+
)
|
31
|
+
{ :id => video_id,
|
32
|
+
:part => 'snippet,statistics,id',
|
33
|
+
:fields => fields }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Yourub
|
2
|
+
module Result
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def format(request)
|
6
|
+
data = nil
|
7
|
+
if request.status == 200
|
8
|
+
data = JSON.parse(request.data.items.to_json)
|
9
|
+
end
|
10
|
+
data
|
11
|
+
end
|
12
|
+
|
13
|
+
#resp example
|
14
|
+
# [
|
15
|
+
# {"kind"=>"youtube#video",
|
16
|
+
# "etag"=>"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/WkWGKMfWxthgmGABcMV_RsED5d8\"",
|
17
|
+
# "id"=>"mN0Dbj-xHY0",
|
18
|
+
# "snippet"=>{
|
19
|
+
# "publishedAt"=>"2013-10-17T22:08:28.000Z",
|
20
|
+
# "channelId"=>"UCqhnX4jA0A5paNd1v-zEysw",
|
21
|
+
# "title"=>"GoPro: Hiero Day",
|
22
|
+
# "description"=>"Shot 100% on the HD HERO3® camera from http://GoPro.com.\n\nTo celebrate Hieroglyphics' influential force in underground music and art for over 20 years, Oakland, CA Mayor Jean Quan, proclaimed September 3rd as Hiero Day.\n\nMusic\nSouls of Mischief \"Cab Fare\"",
|
23
|
+
# "thumbnails"=>{
|
24
|
+
# "default"=>{"url"=>"https://i.ytimg.com/vi/mN0Dbj-xHY0/default.jpg", "width"=>120, "height"=>90},
|
25
|
+
# "medium"=>{"url"=>"https://i.ytimg.com/vi/mN0Dbj-xHY0/mqdefault.jpg", "width"=>320, "height"=>180},
|
26
|
+
# "high"=>{"url"=>"https://i.ytimg.com/vi/mN0Dbj-xHY0/hqdefault.jpg", "width"=>480, "height"=>360},
|
27
|
+
# "standard"=>{"url"=>"https://i.ytimg.com/vi/mN0Dbj-xHY0/sddefault.jpg", "width"=>640, "height"=>480},
|
28
|
+
# "maxres"=>{"url"=>"https://i.ytimg.com/vi/mN0Dbj-xHY0/maxresdefault.jpg", "width"=>1280, "height"=>720}
|
29
|
+
# },
|
30
|
+
# "channelTitle"=>"GoPro",
|
31
|
+
# "categoryId"=>"17",
|
32
|
+
# "liveBroadcastContent"=>"none"
|
33
|
+
# },
|
34
|
+
# "statistics"=>{
|
35
|
+
# "viewCount"=>"143272", "likeCount"=>"949", "dislikeCount"=>"219", "favoriteCount"=>"0", "commentCount"=>"91"
|
36
|
+
# }}
|
37
|
+
# ]
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/yourub/validator.rb
CHANGED
@@ -7,8 +7,8 @@ module Yourub
|
|
7
7
|
'HU','IN','IE','IL','IT','JP','JO','MY','MX','MA','NL','NZ','PE','PH',
|
8
8
|
'PL','RU','SA','SG','ZA','KR','ES','SE','CH','TW','AE','US']
|
9
9
|
ORDERS = ['date', 'rating', 'relevance', 'title', 'videoCount', 'viewCount']
|
10
|
-
VALID_PARAMS = [:country, :category, :query, :
|
11
|
-
MINIMUM_PARAMS = [:country, :category, :query
|
10
|
+
VALID_PARAMS = [:country, :category, :query, :max_results, :count_filter, :order ]
|
11
|
+
MINIMUM_PARAMS = [:country, :category, :query]
|
12
12
|
|
13
13
|
def confirm(criteria)
|
14
14
|
valid_format?(criteria)
|
@@ -17,7 +17,6 @@ module Yourub
|
|
17
17
|
remove_empty_and_non_valid_params
|
18
18
|
minimum_param_present?
|
19
19
|
|
20
|
-
keep_only_the_id_if_present
|
21
20
|
validate_order
|
22
21
|
countries_to_array
|
23
22
|
add_default_country_if_category_is_present
|
@@ -46,12 +45,6 @@ module Yourub
|
|
46
45
|
@criteria.keep_if{|k,v| ( (VALID_PARAMS.include? k) && v.size > 0) }
|
47
46
|
end
|
48
47
|
|
49
|
-
def keep_only_the_id_if_present
|
50
|
-
if @criteria.has_key? :id
|
51
|
-
@criteria.keep_if{|k, _| k == :id}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
48
|
def countries_to_array
|
56
49
|
if @criteria.has_key? :country
|
57
50
|
if @criteria[:country].is_a?(String)
|
@@ -89,7 +82,7 @@ module Yourub
|
|
89
82
|
) unless( criteria.is_a? Hash )
|
90
83
|
end
|
91
84
|
|
92
|
-
def minimum_param_present?
|
85
|
+
def minimum_param_present?
|
93
86
|
if @criteria.none?{|k,_| MINIMUM_PARAMS.include? k}
|
94
87
|
raise ArgumentError.new(
|
95
88
|
"minimum params to start a search is at least one of: #{MINIMUM_PARAMS.join(',')}"
|
@@ -101,7 +94,7 @@ module Yourub
|
|
101
94
|
if @criteria.has_key? :order
|
102
95
|
raise ArgumentError.new(
|
103
96
|
"the given order is not in the available ones: #{ORDERS.join(',')}"
|
104
|
-
) unless( ORDERS.include? @criteria[:order] )
|
97
|
+
) unless( ORDERS.include? @criteria[:order] )
|
105
98
|
end
|
106
99
|
end
|
107
100
|
|
data/lib/yourub/version.rb
CHANGED
data/lib/yourub.rb
CHANGED
@@ -5,13 +5,12 @@ require 'open-uri'
|
|
5
5
|
|
6
6
|
require 'yourub/config'
|
7
7
|
require 'yourub/client'
|
8
|
-
|
9
|
-
|
8
|
+
require 'yourub/meta_search'
|
9
|
+
require 'yourub/result'
|
10
10
|
require 'yourub/version'
|
11
11
|
require 'yourub/logger'
|
12
12
|
require 'yourub/count_filter'
|
13
13
|
require 'yourub/validator'
|
14
|
-
require 'yourub/reader'
|
15
14
|
|
16
15
|
if defined?(Rails)
|
17
16
|
require 'yourub/railtie'
|
@@ -0,0 +1 @@
|
|
1
|
+
[ {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/Xy1mB4_yLrHy_BmKmPBggty2mZQ\"", "id":"1", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Film & Animation", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/UZ1oLIIz2dxIhO45ZTFR3a3NyTA\"", "id":"2", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Autos & Vehicles", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/nqRIq97-xe5XRZTxbknKFVe5Lmg\"", "id":"10", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Music", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/HwXKamM1Q20q9BN-oBJavSGkfDI\"", "id":"15", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Pets & Animals", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/9GQMSRjrZdHeb1OEM1XVQ9zbGec\"", "id":"17", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Sports", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/FJwVpGCVZ1yiJrqZbpqe68Sy_OE\"", "id":"18", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Short Movies", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/M-3iD9dwK7YJCafRf_DkLN8CouA\"", "id":"19", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Travel & Events", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/WmA0qYEfjWsAoyJFSw2zinhn2wM\"", "id":"20", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Gaming", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/EapFaGYG7K0StIXVf8aba249tdM\"", "id":"21", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Videoblogging", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/xId8RX7vRN8rqkbYZbNIytUQDRo\"", "id":"22", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"People & Blogs", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/G9LHzQmx44rX2S5yaga_Aqtwz8M\"", "id":"23", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Comedy", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/UVB9oxX2Bvqa_w_y3vXSLVK5E_s\"", "id":"24", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Entertainment", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/QiLK0ZIrFoORdk_g2l_XR_ECjDc\"", "id":"25", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"News & Politics", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/r6Ck6Z0_L0rG37VJQR200SGNA_w\"", "id":"26", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Howto & Style", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/EoYkczo9I3RCf96RveKTOgOPkUM\"", "id":"27", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Education", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/w5HjcTD82G_XA3xBctS30zS-JpQ\"", "id":"28", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Science & Technology", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/SalkJoBWq_smSEqiAx_qyri6Wa8\"", "id":"29", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Nonprofits & Activism", "assignable":true}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/lL7uWDr_071CHxifjYG1tJrp4Uo\"", "id":"30", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Movies", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/WnuVfjO-PyFLO7NTRQIbrGE62nk\"", "id":"31", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Anime/Animation", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/ctpH2hGA_UZ3volJT_FTlOg9M00\"", "id":"32", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Action/Adventure", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/L0kR3-g1BAo5UD1PLVbQ7LkkDtQ\"", "id":"33", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Classics", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/pUZOAC_s9sfiwar639qr_wAB-aI\"", "id":"34", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Comedy", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/Xb5JLhtyNRN3AQq021Ds-OV50Jk\"", "id":"35", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Documentary", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/u8WXzF4HIhtEi805__sqjuA4lEk\"", "id":"36", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Drama", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/D04PP4Gr7wc4IV_O9G66Z4A8KWQ\"", "id":"37", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Family", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/i5-_AceGXQCEEMWU0V8CcQm_vLQ\"", "id":"38", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Foreign", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/rtlxd0zOixA9QHdIZB26-St5qgQ\"", "id":"39", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Horror", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/N1TrDFLRppxZgBowCJfJCvh0Dpg\"", "id":"40", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Sci-Fi/Fantasy", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/7UMGi6zRySqXopr_rv4sZq6Za2E\"", "id":"41", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Thriller", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/RScXhi324h8usyIetreAVb-uKeM\"", "id":"42", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Shorts", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/0n9MJVCDLpA8q7aiGVrFsuFsd0A\"", "id":"43", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Shows", "assignable":false}}, {"kind":"youtube#videoCategory", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/x5NxSf5fz8hn4loSN4rvhwzD_pY\"", "id":"44", "snippet":{"channelId":"UCBR8-60-B28hp2BmDPdntcQ", "title":"Trailers", "assignable":false}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"1":"film&animation"}, {"2":"autos&vehicles"}, {"10":"music"}, {"15":"pets&animals"}, {"17":"sports"}, {"18":"shortmovies"}, {"19":"travel&events"}, {"20":"gaming"}, {"21":"videoblogging"}, {"22":"people&blogs"}, {"23":"comedy"}, {"24":"entertainment"}, {"25":"news&politics"}, {"26":"howto&style"}, {"27":"education"}, {"28":"science&technology"}, {"29":"nonprofits&activism"}, {"30":"movies"}, {"31":"anime-animation"}, {"32":"action-adventure"}, {"33":"classics"}, {"34":"comedy"}, {"35":"documentary"}, {"36":"drama"}, {"37":"family"}, {"38":"foreign"}, {"39":"horror"}, {"40":"sci-fi-fantasy"}, {"41":"thriller"}, {"42":"shorts"}, {"43":"shows"}, {"44":"trailers"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/FaWZkxrj-a-YsuOD3bLfaC_Db1w\"", "id":{"kind":"youtube#video", "videoId":"Vo0Cazxj_yc"}, "snippet":{"publishedAt":"2010-10-25T12:43:01.000Z", "channelId":"UCIJ0lLcABPdYGp7pRMGccAQ", "title":"PEOPLE ARE AWESOME", "description":"Click here for our new video PEOPLE ARE AWESOME 2014: http://youtu.be/VWf8CXwPoqI http://www.twitter.com/PAAVideos ...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/Vo0Cazxj_yc/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/Vo0Cazxj_yc/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/Vo0Cazxj_yc/hqdefault.jpg"}}, "channelTitle":"Hadoukentheband", "liveBroadcastContent":"none"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/LVnLC4-FA4Y30ID1TBJQsny-AoM\"", "id":{"kind":"youtube#video", "videoId":"M0jmSsQ5ptw"}, "snippet":{"publishedAt":"2012-11-11T21:53:12.000Z", "channelId":"UCblfuW_4rakIf2h6aqANefA", "title":"The Athlete Machine - Red Bull Kluge", "description":"Get the behind the scenes footage here: http://youtu.be/OvvX34q0QMk Watch the Spiral Drift: http://youtu.be/_u76kWWo6GM http://www.redbullusa.com/kluge ...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/M0jmSsQ5ptw/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/M0jmSsQ5ptw/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/M0jmSsQ5ptw/hqdefault.jpg"}}, "channelTitle":"redbull", "liveBroadcastContent":"none"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/pwYBU2vxB3eVIvcYvqWKZYeDWp0\"", "id":{"kind":"youtube#video", "videoId":"83rinbq_8uI"}, "snippet":{"publishedAt":"2014-04-08T07:32:26.000Z", "channelId":"UC-KQIG4-dyR1kIHCQFOJ-hQ", "title":"The Greatness Of Ronaldinho Respect!", "description":"If you like my work, become a fan on facebook and follow me on twitter: https://facebook.com/HeilRJ https://twitter.com/HeilRJ Make a donation: https://www.p...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/83rinbq_8uI/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/83rinbq_8uI/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/83rinbq_8uI/hqdefault.jpg"}}, "channelTitle":"HeilRJ03", "liveBroadcastContent":"none"}},{"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/sFmalCqM626keSRPmEroHgq2B-A\"", "id":{"kind":"youtube#video", "videoId":"0gWxHFMog9w"}, "snippet":{"publishedAt":"2013-08-19T13:00:46.000Z", "channelId":"UCRijo3ddMTht_IHyNSNXpNQ", "title":"Stereotypes: Pickup Basketball", "description":"Pickup ballers. Love 'em or hate 'em, we all know 'em. ---------------------------------------- PLAY our iPHONE GAME - http://smarturl.it/DPGameiPhone V...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/0gWxHFMog9w/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/0gWxHFMog9w/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/0gWxHFMog9w/hqdefault.jpg"}}, "channelTitle":"corycotton", "liveBroadcastContent":"none"}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[#<Google::APIClient::Schema::Youtube::V3::Video:0x3ff0d68e9aac DATA:{"id"=>"KDOLHClNTOI", "snippet"=>{"title"=>"When We Left Earth - The NASA Missions", "thumbnails"=>{"default"=>{"url"=>"https://i.ytimg.com/vi/KDOLHClNTOI/default.jpg", "width"=>120, "height"=>90}, "medium"=>{"url"=>"https://i.ytimg.com/vi/KDOLHClNTOI/mqdefault.jpg", "width"=>320, "height"=>180}, "high"=>{"url"=>"https://i.ytimg.com/vi/KDOLHClNTOI/hqdefault.jpg", "width"=>480, "height"=>360}}}, "statistics"=>{"viewCount"=>"767700"}}>]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"id":"ljwjEyJJtJA","snippet":{"title":"Watch: NASA launches Orion space capsule aboard Delta IV","thumbnails":{"default":{"url":"https://i.ytimg.com/vi/ljwjEyJJtJA/default.jpg","width":120,"height":90},"medium":{"url":"https://i.ytimg.com/vi/ljwjEyJJtJA/mqdefault.jpg","width":320,"height":180},"high":{"url":"https://i.ytimg.com/vi/ljwjEyJJtJA/hqdefault.jpg","width":480,"height":360},"standard":{"url":"https://i.ytimg.com/vi/ljwjEyJJtJA/sddefault.jpg","width":640,"height":480}}},"statistics":{"viewCount":"200"}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/0PFW7gykxDyqGyscm_aHVBl84H8\"", "id":{"kind":"youtube#video", "videoId":"Jo_jE4LbNmM"}, "snippet":{"publishedAt":"2015-01-04T15:10:39.000Z", "channelId":"UCFzteOVJWTjODMf5wopD4wg", "title":"Granatkin Memorial 2015 Azerbaijan - Russia-2", "description":"Azerbaijan - Russia-2.", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/Jo_jE4LbNmM/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/Jo_jE4LbNmM/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/Jo_jE4LbNmM/hqdefault.jpg"}}, "channelTitle":"", "liveBroadcastContent":"none"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/qF0FXRMIy7QjDNg0OsoF_bre2A4\"", "id":{"kind":"youtube#video", "videoId":"e6xwaem8TTM"}, "snippet":{"publishedAt":"2015-01-04T14:42:11.000Z", "channelId":"UCFzteOVJWTjODMf5wopD4wg", "title":"Granatkin Memorial 2015 Moldova - Lithuania", "description":"Moldova - Lithuania.", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/e6xwaem8TTM/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/e6xwaem8TTM/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/e6xwaem8TTM/hqdefault.jpg"}}, "channelTitle":"", "liveBroadcastContent":"live"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/3UcTqyL8W5flVWDaSsj_Cd5U7Vg\"", "id":{"kind":"youtube#video", "videoId":"LP2bTAEti-8"}, "snippet":{"publishedAt":"2015-01-04T14:44:08.000Z", "channelId":"UCkb5yplo4fIbuDOuIYKALeQ", "title":"OCK -WAC", "description":"OCK - WAC.", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/LP2bTAEti-8/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/LP2bTAEti-8/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/LP2bTAEti-8/hqdefault.jpg"}}, "channelTitle":"", "liveBroadcastContent":"live"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/tpBl-obNpd4RlpJFF-1-foUiCnU\"", "id":{"kind":"youtube#video", "videoId":"R6MceF30GBw"}, "snippet":{"publishedAt":"2015-01-04T14:41:48.000Z", "channelId":"UCFbbfl042MHNUNttAGlEOlA", "title":"TARIMSPOR -", "description":"TARIMSPOR - GOL : TARIMSPOR 19\"DK. ONUR ER TARIMSPOR (1) - LKLER SPOR (0) GOL : TARIMSPOR ...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/R6MceF30GBw/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/R6MceF30GBw/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/R6MceF30GBw/hqdefault.jpg"}}, "channelTitle":"", "liveBroadcastContent":"none"}}, {"kind":"youtube#searchResult", "etag":"\"F9iA7pnxqNgrkOutjQAa9F2k8HY/uW7gbcCwbzGlX9AwQSVO7O9SbGQ\"", "id":{"kind":"youtube#video", "videoId":"YtBtTfVozXs"}, "snippet":{"publishedAt":"2015-01-04T14:33:37.000Z", "channelId":"UCvXzEblUa0cfny4HAJ_ZOWw", "title":"SEGUI JUVENTUS - INTER SU INTER CHANNEL", "description":"Inter Channel, dal 2000, il canale di informazione e intrattenimento della societ F.C. Internazionale. Ogni giorno una finestra su ci che accade nella realt ...", "thumbnails":{"default":{"url":"https://i.ytimg.com/vi/YtBtTfVozXs/default.jpg"}, "medium":{"url":"https://i.ytimg.com/vi/YtBtTfVozXs/mqdefault.jpg"}, "high":{"url":"https://i.ytimg.com/vi/YtBtTfVozXs/hqdefault.jpg"}}, "channelTitle":"INTER", "liveBroadcastContent":"none"}}]
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
#WebMock.disable_net_connect!(allow_localhost: true)
|
2
2
|
require 'webmock/rspec'
|
3
|
+
Dir["./spec/support/**/*.rb"].each {|f| require f}
|
3
4
|
|
4
5
|
RSpec.configure do |c|
|
5
6
|
c.filter_run_including :focus => true
|
7
|
+
c.run_all_when_everything_filtered = true
|
6
8
|
end
|
7
9
|
|
8
10
|
def a_get(path)
|
@@ -13,6 +15,15 @@ def stub_get(path)
|
|
13
15
|
stub_request(:get, Yourub::REST::Request::BASE_URL + path)
|
14
16
|
end
|
15
17
|
|
18
|
+
def fixture_path
|
19
|
+
File.expand_path('../fixtures', __FILE__)
|
20
|
+
end
|
21
|
+
|
22
|
+
def fixture(file)
|
23
|
+
file = File.read(fixture_path + '/' + file)
|
24
|
+
JSON.parse(file)
|
25
|
+
end
|
26
|
+
|
16
27
|
def capture_warning
|
17
28
|
begin
|
18
29
|
old_stderr = $stderr
|
@@ -0,0 +1,11 @@
|
|
1
|
+
shared_context "result load fixture" do |fixture_file|
|
2
|
+
let(:result){ double }
|
3
|
+
let(:loaded_fixture) { fixture(fixture_file) }
|
4
|
+
|
5
|
+
before do
|
6
|
+
allow(result).to receive(:status).and_return(200)
|
7
|
+
allow(result).to receive_message_chain(
|
8
|
+
:data, :items).and_return(loaded_fixture)
|
9
|
+
allow(Yourub::REST::Request).to receive(:new).and_return(result)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
shared_context "search list result load fixture" do |fixture_file|
|
2
|
+
let(:search_list_result){ double }
|
3
|
+
let(:loaded_fixture) { fixture(fixture_file) }
|
4
|
+
|
5
|
+
before do
|
6
|
+
# search list req
|
7
|
+
allow(search_list_result).to receive_message_chain(
|
8
|
+
:data, :items).and_return(loaded_fixture)
|
9
|
+
search_list_result.data.items.each do |single_video|
|
10
|
+
allow(single_video).to receive_message_chain(
|
11
|
+
:id, :videoId).and_return(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
allow(Yourub::REST::Search).to receive(:list).and_return(search_list_result)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
shared_context "search list result load fixture with single video" do |fixture_file|
|
2
|
+
let(:search_list_result) { double }
|
3
|
+
let(:video_result) { double }
|
4
|
+
let(:loaded_fixture) { fixture(fixture_file) }
|
5
|
+
let(:video_with_200_views) { fixture('video_with_200_views.json') }
|
6
|
+
|
7
|
+
before do
|
8
|
+
# stub search list req
|
9
|
+
allow(search_list_result).to receive_message_chain(
|
10
|
+
:data, :items).and_return(loaded_fixture)
|
11
|
+
search_list_result.data.items.each do |single_video|
|
12
|
+
allow(single_video).to receive_message_chain(
|
13
|
+
:id, :videoId).and_return(1)
|
14
|
+
|
15
|
+
# stub single video request
|
16
|
+
allow(video_result).to receive(:status).and_return(200)
|
17
|
+
allow(video_result).to receive_message_chain(
|
18
|
+
:data, :items).and_return(video_with_200_views)
|
19
|
+
end
|
20
|
+
|
21
|
+
allow(Yourub::REST::Search).to receive(:list).and_return(search_list_result)
|
22
|
+
allow(Yourub::REST::Videos).to receive(:single_video).and_return(video_result)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
shared_context "stub client connection" do
|
2
|
+
let(:client) { Yourub::Client.new }
|
3
|
+
let(:discovered_api) { double('youtube_api') }
|
4
|
+
let(:stubbed_response) { OpenStruct.new(data: 'bla', status: 200) }
|
5
|
+
|
6
|
+
before do
|
7
|
+
allow(discovered_api).to receive_message_chain(
|
8
|
+
:videos, :list).and_return('videos.list')
|
9
|
+
allow(discovered_api).to receive_message_chain(
|
10
|
+
:search, :list).and_return('search.list')
|
11
|
+
allow(discovered_api).to receive_message_chain(
|
12
|
+
:video_categories, :list).and_return('video_categories.list')
|
13
|
+
allow(client).to receive(:youtube_api).and_return(discovered_api)
|
14
|
+
allow(client).to receive(:execute!).and_return(stubbed_response)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
data/spec/yourub/client_spec.rb
CHANGED
@@ -1,81 +1,38 @@
|
|
1
|
+
require_relative '../spec_helper.rb'
|
1
2
|
require 'yourub'
|
2
|
-
#require 'byebug'
|
3
|
-
#require_relative '../spec_helper'
|
4
3
|
|
5
4
|
describe Yourub::Client do
|
5
|
+
it 'initialize a client through the config file' do
|
6
|
+
allow(Yourub::Config).to receive(:developer_key).and_return('secret')
|
7
|
+
allow(Yourub::Config).to receive(:application_name).and_return('youtube')
|
8
|
+
allow(Yourub::Config).to receive(:application_version).and_return(10)
|
9
|
+
|
10
|
+
client = Yourub::Client.new
|
11
|
+
expect(client.config.developer_key).to eq('secret')
|
12
|
+
expect(client.config.application_name).to eq('youtube')
|
13
|
+
expect(client.config.application_version).to eq(10)
|
14
|
+
end
|
6
15
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
expect(lambda{subject}).not_to raise_error()
|
13
|
-
end
|
14
|
-
|
15
|
-
it "give me a list of valid countries" do
|
16
|
-
expect(subject.countries).to be_a_kind_of(Array)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "retrieves more infos with the option" do
|
20
|
-
filter = {views: ">= 100"}
|
21
|
-
subject.search(country: "US", category: "Sports", count_filter: filter, extended_info: true)
|
22
|
-
expect(subject.videos.first.has_key? "statistics").to be_true
|
23
|
-
end
|
24
|
-
|
25
|
-
it "retrieves videos that have more than 100 views" do
|
26
|
-
filter = {views: ">= 100"}
|
27
|
-
subject.search(country: "US", category: "Sports", count_filter: filter)
|
28
|
-
expect(subject.videos).to_not be_empty
|
29
|
-
end
|
30
|
-
|
31
|
-
it "retrieves videos for all the categories" do
|
32
|
-
subject.search(country: "US", category: "all")
|
33
|
-
expect(subject.videos).to_not be_empty
|
34
|
-
end
|
35
|
-
|
36
|
-
it "accept an 'order' parameter within the others" do
|
37
|
-
subject.search(country: "US", category: "Sports", order: 'date')
|
38
|
-
expect(subject.videos).to_not be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
it "retrieves 5 videos for each given category" do
|
42
|
-
subject.search(country: "US, DE", category: "Sports", max_results: 5)
|
43
|
-
expect(subject.videos.count).to eq(10)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "retrieves 5 videos for each given category, also if they are passed as array" do
|
47
|
-
subject.search(country: ["US", "DE"], category: "Sports", max_results: 5)
|
48
|
-
expect(subject.videos.count).to eq(10)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "retrieves the given number of video for the given category" do
|
52
|
-
subject.search(category: "Sports", max_results: 2)
|
53
|
-
expect(subject.videos.count).to eq(2)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "retrieves the given number of video for the given word" do
|
57
|
-
subject.search(query: "casa", max_results: 3)
|
58
|
-
expect(subject.videos.count).to eq(3)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "retrieves the given number of video for the given country" do
|
62
|
-
subject.search(country: "US", max_results: 5)
|
63
|
-
expect(subject.videos.count).to eq(5)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "retrieves a video for the given id" do
|
67
|
-
subject.search(id: "mN0Dbj-xHY0")
|
68
|
-
expect(subject.videos.first["id"]).to eql("mN0Dbj-xHY0")
|
69
|
-
end
|
16
|
+
it 'initialize the client accepting an hash of option' do
|
17
|
+
options = { developer_key: 'Super',
|
18
|
+
application_name: 'yourub',
|
19
|
+
application_version: 2.0,
|
20
|
+
log_level: 3 }
|
70
21
|
|
71
|
-
|
72
|
-
|
73
|
-
|
22
|
+
client = Yourub::Client.new(options)
|
23
|
+
expect(client.config.developer_key).to eq('Super')
|
24
|
+
expect(client.config.application_name).to eq('yourub')
|
25
|
+
expect(client.config.application_version).to eq(2.0)
|
26
|
+
end
|
74
27
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
28
|
+
it 'use a default for the log level, if not provided' do
|
29
|
+
options = { developer_key: 'Super' }
|
30
|
+
client = Yourub::Client.new(options)
|
31
|
+
expect(client.config.log_level).to eq('WARN')
|
79
32
|
end
|
80
33
|
|
34
|
+
it 'raise an argument error if there is no a developer_key in the option' do
|
35
|
+
options = { application_name: 'my app' }
|
36
|
+
expect(lambda{ Yourub::Client.new(options) }).to raise_error(ArgumentError)
|
37
|
+
end
|
81
38
|
end
|
@@ -20,17 +20,16 @@ describe Yourub::CountFilter do
|
|
20
20
|
|
21
21
|
it "accept the video if satisfy the condition" do
|
22
22
|
Yourub::CountFilter.filter = {views: ">= 100"}
|
23
|
-
expect(subject).to
|
23
|
+
expect(subject).to eq true
|
24
24
|
end
|
25
25
|
|
26
26
|
it "accept the video if filter is nil" do
|
27
27
|
Yourub::CountFilter.filter = nil
|
28
|
-
expect(subject).to
|
28
|
+
expect(subject).to eq true
|
29
29
|
end
|
30
30
|
|
31
31
|
it "not accept the video if it does not satisfy the condition" do
|
32
32
|
Yourub::CountFilter.filter = {views: "<= 100"}
|
33
|
-
expect(subject).to
|
33
|
+
expect(subject).to eq false
|
34
34
|
end
|
35
|
-
|
36
|
-
end
|
35
|
+
end
|