vibedeck-youtube_it 0.0.1

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.
Files changed (37) hide show
  1. data/README.rdoc +234 -0
  2. data/Rakefile +35 -0
  3. data/lib/youtube_it/chain_io.rb +76 -0
  4. data/lib/youtube_it/client.rb +367 -0
  5. data/lib/youtube_it/middleware/faraday_authheader.rb +24 -0
  6. data/lib/youtube_it/middleware/faraday_oauth.rb +21 -0
  7. data/lib/youtube_it/middleware/faraday_youtubeit.rb +30 -0
  8. data/lib/youtube_it/model/author.rb +13 -0
  9. data/lib/youtube_it/model/category.rb +11 -0
  10. data/lib/youtube_it/model/comment.rb +16 -0
  11. data/lib/youtube_it/model/contact.rb +16 -0
  12. data/lib/youtube_it/model/content.rb +18 -0
  13. data/lib/youtube_it/model/playlist.rb +11 -0
  14. data/lib/youtube_it/model/rating.rb +23 -0
  15. data/lib/youtube_it/model/subscription.rb +7 -0
  16. data/lib/youtube_it/model/thumbnail.rb +17 -0
  17. data/lib/youtube_it/model/user.rb +26 -0
  18. data/lib/youtube_it/model/video.rb +225 -0
  19. data/lib/youtube_it/parser.rb +357 -0
  20. data/lib/youtube_it/record.rb +12 -0
  21. data/lib/youtube_it/request/base_search.rb +72 -0
  22. data/lib/youtube_it/request/error.rb +15 -0
  23. data/lib/youtube_it/request/standard_search.rb +43 -0
  24. data/lib/youtube_it/request/user_search.rb +47 -0
  25. data/lib/youtube_it/request/video_search.rb +102 -0
  26. data/lib/youtube_it/request/video_upload.rb +415 -0
  27. data/lib/youtube_it/response/video_search.rb +41 -0
  28. data/lib/youtube_it/version.rb +4 -0
  29. data/lib/youtube_it.rb +75 -0
  30. data/test/helper.rb +10 -0
  31. data/test/test_chain_io.rb +63 -0
  32. data/test/test_client.rb +418 -0
  33. data/test/test_field_search.rb +48 -0
  34. data/test/test_video.rb +43 -0
  35. data/test/test_video_feed_parser.rb +271 -0
  36. data/test/test_video_search.rb +141 -0
  37. metadata +150 -0
@@ -0,0 +1,271 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ class TestVideoFeedParser < Test::Unit::TestCase
4
+
5
+ def test_should_raise_bad_request_exception_when_id_not_found
6
+ bad_url = "http://gdata.youtube.com/feeds/api/videos/abc?v=2"
7
+
8
+ assert_raise(OpenURI::HTTPError) do
9
+ parser = YouTubeIt::Parser::VideoFeedParser.new bad_url
10
+ end
11
+ end
12
+
13
+ # VIDEO ATTRIBUTES AFFECTED BY PARSING
14
+
15
+ def test_should_display_unique_id_correctly_after_parsing
16
+ with_video_response do |parser|
17
+ video = parser.parse
18
+ assert_equal "AbC123DeFgH", video.unique_id
19
+ end
20
+ end
21
+
22
+ # PARSED VIDEO ATTRIBUTES
23
+ def test_should_parse_duration_correctly
24
+ with_video_response do |parser|
25
+ video = parser.parse
26
+ assert_equal 356, video.duration
27
+ end
28
+ end
29
+
30
+ def test_should_parse_widescreen_correctly
31
+ with_video_response do |parser|
32
+ video = parser.parse
33
+ assert_equal true, video.widescreen?
34
+ end
35
+ end
36
+
37
+ def test_should_parse_noembed_correctly
38
+ with_video_response do |parser|
39
+ video = parser.parse
40
+ assert_equal false, video.noembed
41
+ end
42
+ end
43
+
44
+ def test_should_parse_racy_correctly
45
+ with_video_response do |parser|
46
+ video = parser.parse
47
+ assert_equal false, video.racy
48
+ end
49
+ end
50
+
51
+ def test_should_parse_video_id_correctly
52
+ with_video_response do |parser|
53
+ video = parser.parse
54
+ assert_equal "tag:youtube.com,2008:video:AbC123DeFgH", video.video_id
55
+ end
56
+ end
57
+
58
+ def test_should_parse_published_at_correctly
59
+ with_video_response do |parser|
60
+ video = parser.parse
61
+ assert_equal Time.parse("Wed Dec 29 13:57:49 UTC 2010"), video.published_at
62
+ end
63
+ end
64
+
65
+ def test_should_parse_updated_at_correctly
66
+ with_video_response do |parser|
67
+ video = parser.parse
68
+ assert_equal Time.parse("Wed Feb 23 13:54:16 UTC 2011"), video.updated_at
69
+ end
70
+ end
71
+
72
+ def test_should_parse_categories_correctly
73
+ with_video_response do |parser|
74
+ video = parser.parse
75
+ assert_equal "Test", video.categories.first.label
76
+ assert_equal "Test", video.categories.first.term
77
+ end
78
+ end
79
+
80
+ def test_should_parse_keywords_correctly
81
+ with_video_response do |parser|
82
+ video = parser.parse
83
+ assert_equal ["test"], video.keywords
84
+ end
85
+ end
86
+
87
+ def test_should_parse_description_correctly
88
+ with_video_response do |parser|
89
+ video = parser.parse
90
+ assert_equal "Youtube Test Video", video.description
91
+ end
92
+ end
93
+
94
+ def test_should_parse_title_correctly
95
+ with_video_response do |parser|
96
+ video = parser.parse
97
+ assert_equal "YouTube Test Video", video.title
98
+ end
99
+ end
100
+
101
+ def test_should_parse_html_content_correctly
102
+ with_video_response do |parser|
103
+ video = parser.parse
104
+ assert_equal nil, video.html_content
105
+ end
106
+ end
107
+
108
+ def test_should_parse_thumbnails_correctly
109
+ with_video_response do |parser|
110
+ video = parser.parse
111
+ thumbnail = video.thumbnails.first
112
+ assert_equal 90, thumbnail.height
113
+ assert_equal "00:02:58", thumbnail.time
114
+ assert_equal "http://i.ytimg.com/vi/AbC123DeFgH/default.jpg", thumbnail.url
115
+ assert_equal 120, thumbnail.width
116
+ end
117
+ end
118
+
119
+ def test_should_parse_player_url_correctly
120
+ with_video_response do |parser|
121
+ video = parser.parse
122
+ assert_equal "http://www.youtube.com/watch?v=AbC123DeFgH&feature=youtube_gdata_player", video.player_url
123
+ end
124
+ end
125
+
126
+ def test_should_parse_view_count_correctly
127
+ with_video_response do |parser|
128
+ video = parser.parse
129
+ assert_equal 240000, video.view_count
130
+ end
131
+ end
132
+
133
+ def test_should_parse_favorite_count_correctly
134
+ with_video_response do |parser|
135
+ video = parser.parse
136
+ assert_equal 200, video.favorite_count
137
+ end
138
+ end
139
+
140
+ # RATING
141
+
142
+ def test_should_parse_average_correctly
143
+ with_video_response do |parser|
144
+ video = parser.parse
145
+ assert_equal 4.305027, video.rating.average
146
+ end
147
+ end
148
+
149
+ def test_should_parse_max_correctly
150
+ with_video_response do |parser|
151
+ video = parser.parse
152
+ assert_equal 5, video.rating.max
153
+ end
154
+ end
155
+
156
+ def test_should_parse_min_correctly
157
+ with_video_response do |parser|
158
+ video = parser.parse
159
+ assert_equal 1, video.rating.min
160
+ end
161
+ end
162
+
163
+ def test_should_parse_rater_count_correctly
164
+ with_video_response do |parser|
165
+ video = parser.parse
166
+ assert_equal 2049, video.rating.rater_count
167
+ end
168
+ end
169
+
170
+ def test_should_parse_likes_correctly
171
+ with_video_response do |parser|
172
+ video = parser.parse
173
+ assert_equal 1700, video.rating.likes
174
+ end
175
+ end
176
+
177
+ def test_should_parse_dislikes_correctly
178
+ with_video_response do |parser|
179
+ video = parser.parse
180
+ assert_equal 350, video.rating.dislikes
181
+ end
182
+ end
183
+
184
+ # TOD: GEODATA
185
+
186
+ def test_should_parse_where_geodata_correctly
187
+ with_video_response do |parser|
188
+ video = parser.parse
189
+ assert_equal nil, video.where
190
+ end
191
+ end
192
+
193
+ def test_should_parse_position_geodata_correctly
194
+ with_video_response do |parser|
195
+ video = parser.parse
196
+ assert_equal nil, video.position
197
+ end
198
+ end
199
+
200
+ def test_should_parse_latitude_geodata_correctly
201
+ with_video_response do |parser|
202
+ video = parser.parse
203
+ assert_equal nil, video.latitude
204
+ end
205
+ end
206
+
207
+ def test_should_parse_longitude_geodata_correctly
208
+ with_video_response do |parser|
209
+ video = parser.parse
210
+ assert_equal nil, video.longitude
211
+ end
212
+ end
213
+
214
+ # AUTHOR
215
+
216
+ def test_should_parse_author_name_correctly
217
+ with_video_response do |parser|
218
+ video = parser.parse
219
+ assert_equal "Test user", video.author.name
220
+ end
221
+ end
222
+
223
+ def test_should_parse_author_uri_correctly
224
+ with_video_response do |parser|
225
+ video = parser.parse
226
+ assert_equal "http://gdata.youtube.com/feeds/api/users/test_user", video.author.uri
227
+ end
228
+ end
229
+
230
+ # MEDIA CONTENT
231
+
232
+ def test_should_parse_if_media_content_is_default_content_correctly
233
+ with_video_response do |parser|
234
+ video = parser.parse
235
+ content = video.media_content.first
236
+ assert_equal true, content.default
237
+ end
238
+ end
239
+
240
+ def test_should_parse_duration_of_media_contents_correctly
241
+ with_video_response do |parser|
242
+ video = parser.parse
243
+ content = video.media_content.first
244
+ assert_equal 356, content.duration
245
+ end
246
+ end
247
+
248
+ def test_should_parse_mime_type_of_media_content_correctly
249
+ with_video_response do |parser|
250
+ video = parser.parse
251
+ content = video.media_content.first
252
+ assert_equal "application/x-shockwave-flash", content.mime_type
253
+ end
254
+ end
255
+
256
+ def test_should_parse_url_of_media_content_correctly
257
+ with_video_response do |parser|
258
+ video = parser.parse
259
+ content = video.media_content.first
260
+ assert_equal "http://www.youtube.com/v/AbC123DeFgH?f=videos&app=youtube_gdata", content.url
261
+ end
262
+ end
263
+
264
+ def with_video_response &block
265
+ File.open(File.dirname(__FILE__) + '/files/youtube_video_response.xml') do |xml|
266
+ parser = YouTubeIt::Parser::VideoFeedParser.new xml.read
267
+ yield parser
268
+ end
269
+ end
270
+
271
+ end
@@ -0,0 +1,141 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ class TestVideoSearch < Test::Unit::TestCase
4
+
5
+ def test_should_build_basic_query_url
6
+ request = YouTubeIt::Request::VideoSearch.new(:query => "penguin")
7
+ assert_equal "http://gdata.youtube.com/feeds/api/videos?q=penguin&v=2", request.url
8
+ end
9
+
10
+ def test_should_build_multiword_metasearch_query_url
11
+ request = YouTubeIt::Request::VideoSearch.new(:query => 'christina ricci')
12
+ assert_equal "http://gdata.youtube.com/feeds/api/videos?q=christina+ricci&v=2", request.url
13
+ end
14
+
15
+ def test_should_build_video_id_url
16
+ request = YouTubeIt::Request::VideoSearch.new(:video_id => 'T7YazwP8GtY')
17
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/T7YazwP8GtY?v=2", request.url
18
+ end
19
+
20
+ def test_should_build_one_tag_query_url
21
+ request = YouTubeIt::Request::VideoSearch.new(:tags => ['panther'])
22
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/panther/?v=2", request.url
23
+ end
24
+
25
+ def test_should_build_multiple_tags_query_url
26
+ request = YouTubeIt::Request::VideoSearch.new(:tags => ['tiger', 'leopard'])
27
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/tiger/leopard/?v=2", request.url
28
+ end
29
+
30
+ def test_should_build_one_category_query_url
31
+ request = YouTubeIt::Request::VideoSearch.new(:categories => [:news])
32
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News/?v=2", request.url
33
+ end
34
+
35
+ def test_should_build_multiple_categories_query_url
36
+ request = YouTubeIt::Request::VideoSearch.new(:categories => [:news, :sports])
37
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News/Sports/?v=2", request.url
38
+ end
39
+
40
+ def test_should_build_categories_and_tags_query_url
41
+ request = YouTubeIt::Request::VideoSearch.new(:categories => [:news, :sports], :tags => ['soccer', 'football'])
42
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News/Sports/soccer/football/?v=2", request.url
43
+ end
44
+
45
+ def test_should_build_categories_and_tags_url_with_max_results
46
+ request = YouTubeIt::Request::VideoSearch.new(:categories => [:music], :tags => ['classic', 'rock'], :max_results => 2)
47
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/Music/classic/rock/?max-results=2&v=2", request.url
48
+ end
49
+
50
+ def test_should_build_author_query_url
51
+ request = YouTubeIt::Request::VideoSearch.new(:author => "davidguetta")
52
+ assert_equal "http://gdata.youtube.com/feeds/api/videos?author=davidguetta&v=2", request.url
53
+ end
54
+
55
+ def test_should_build_language_query_url
56
+ request = YouTubeIt::Request::VideoSearch.new(:query => 'christina ricci', :lang => 'pt')
57
+ assert_equal "http://gdata.youtube.com/feeds/api/videos?lr=pt&q=christina+ricci&v=2", request.url
58
+ end
59
+
60
+ # -- Standard Feeds --------------------------------------------------------------------------------
61
+
62
+ def test_should_build_url_for_most_viewed
63
+ request = YouTubeIt::Request::StandardSearch.new(:most_viewed)
64
+ assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed?v=2", request.url
65
+ end
66
+
67
+ def test_should_build_url_for_top_rated_for_today
68
+ request = YouTubeIt::Request::StandardSearch.new(:top_rated, :time => :today)
69
+ assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?time=today&v=2", request.url
70
+ end
71
+
72
+ def test_should_build_url_for_most_viewed_offset_and_max_results_without_time
73
+ request = YouTubeIt::Request::StandardSearch.new(:top_rated, :offset => 5, :max_results => 10)
74
+ assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?max-results=10&start-index=5&v=2", request.url
75
+ end
76
+
77
+ def test_should_build_url_for_most_viewed_offset_and_max_results_with_time
78
+ request = YouTubeIt::Request::StandardSearch.new(:top_rated, :offset => 5, :max_results => 10, :time => :today)
79
+ assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?max-results=10&start-index=5&time=today&v=2", request.url
80
+ end
81
+
82
+ def test_should_raise_exception_for_invalid_type
83
+ assert_raise RuntimeError do
84
+ request = YouTubeIt::Request::StandardSearch.new(:most_viewed_yo)
85
+ end
86
+ end
87
+
88
+ # -- Complex Video Queries -------------------------------------------------------------------------
89
+
90
+ def test_should_build_url_for_boolean_or_case_for_categories
91
+ request = YouTubeIt::Request::VideoSearch.new(:categories => { :either => [:news, :sports] })
92
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News%7CSports/?v=2", request.url
93
+ end
94
+
95
+ def test_should_build_url_for_boolean_or_and_exclude_case_for_categories
96
+ request = YouTubeIt::Request::VideoSearch.new(:categories => { :either => [:news, :sports], :exclude => [:comedy] })
97
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News%7CSports/-Comedy/?v=2", request.url
98
+ end
99
+
100
+ def test_should_build_url_for_exclude_case_for_tags
101
+ request = YouTubeIt::Request::VideoSearch.new(:categories => { :either => [:news, :sports], :exclude => [:comedy] },
102
+ :tags => { :include => ['football'], :exclude => ['soccer'] })
103
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News%7CSports/-Comedy/football/-soccer/?v=2", request.url
104
+ end
105
+
106
+ def test_should_build_url_for_either_case_for_tags
107
+ request = YouTubeIt::Request::VideoSearch.new(:categories => { :either => [:news, :sports], :exclude => [:comedy] },
108
+ :tags => { :either => ['soccer', 'football', 'donkey'] })
109
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/News%7CSports/-Comedy/soccer%7Cfootball%7Cdonkey/?v=2", request.url
110
+ end
111
+
112
+ def test_should_build_url_for_query_search_with_categories_excluded
113
+ request = YouTubeIt::Request::VideoSearch.new(:query => 'bench press',
114
+ :categories => { :exclude => [:comedy, :entertainment] },
115
+ :max_results => 10)
116
+ assert_equal "http://gdata.youtube.com/feeds/api/videos/-/-Comedy/-Entertainment/?max-results=10&q=bench+press&v=2", request.url
117
+ end
118
+
119
+ # -- User Queries ---------------------------------------------------------------------------------
120
+
121
+ def test_should_build_url_for_videos_by_user
122
+ request = YouTubeIt::Request::UserSearch.new(:user => 'liz')
123
+ assert_equal "http://gdata.youtube.com/feeds/api/users/liz/uploads?v=2", request.url
124
+ end
125
+
126
+ def test_should_build_url_for_videos_by_user_paginate_and_order
127
+ request = YouTubeIt::Request::UserSearch.new(:user => 'liz', :offset => 20, :max_results => 10, :order_by => 'published')
128
+ assert_equal "http://gdata.youtube.com/feeds/api/users/liz/uploads?max-results=10&orderby=published&start-index=20&v=2", request.url
129
+ end
130
+
131
+ def test_should_build_url_for_favorite_videos_by_user
132
+ request = YouTubeIt::Request::UserSearch.new(:favorites, :user => 'liz')
133
+ assert_equal "http://gdata.youtube.com/feeds/api/users/liz/favorites?v=2", request.url
134
+ end
135
+
136
+ def test_should_build_url_for_favorite_videos_by_user_paginate
137
+ request = YouTubeIt::Request::UserSearch.new(:favorites, :user => 'liz', :offset => 20, :max_results => 10)
138
+ assert_equal "http://gdata.youtube.com/feeds/api/users/liz/favorites?max-results=10&start-index=20&v=2", request.url
139
+ end
140
+
141
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vibedeck-youtube_it
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - kylejginavan
13
+ - chebyte
14
+ - mseppae
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-08-22 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: oauth
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ - 4
32
+ - 4
33
+ version: 0.4.4
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: simple_oauth
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 1
46
+ - 5
47
+ version: 0.1.5
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: faraday
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 0
59
+ - 6
60
+ version: "0.6"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: builder
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ type: :runtime
74
+ version_requirements: *id004
75
+ description: Upload, delete, update, comment on youtube videos all from one gem.
76
+ email: kylejginavan@gmail.com
77
+ executables: []
78
+
79
+ extensions: []
80
+
81
+ extra_rdoc_files:
82
+ - README.rdoc
83
+ files:
84
+ - lib/youtube_it/chain_io.rb
85
+ - lib/youtube_it/client.rb
86
+ - lib/youtube_it/middleware/faraday_authheader.rb
87
+ - lib/youtube_it/middleware/faraday_oauth.rb
88
+ - lib/youtube_it/middleware/faraday_youtubeit.rb
89
+ - lib/youtube_it/model/author.rb
90
+ - lib/youtube_it/model/category.rb
91
+ - lib/youtube_it/model/comment.rb
92
+ - lib/youtube_it/model/contact.rb
93
+ - lib/youtube_it/model/content.rb
94
+ - lib/youtube_it/model/playlist.rb
95
+ - lib/youtube_it/model/rating.rb
96
+ - lib/youtube_it/model/subscription.rb
97
+ - lib/youtube_it/model/thumbnail.rb
98
+ - lib/youtube_it/model/user.rb
99
+ - lib/youtube_it/model/video.rb
100
+ - lib/youtube_it/parser.rb
101
+ - lib/youtube_it/record.rb
102
+ - lib/youtube_it/request/base_search.rb
103
+ - lib/youtube_it/request/error.rb
104
+ - lib/youtube_it/request/standard_search.rb
105
+ - lib/youtube_it/request/user_search.rb
106
+ - lib/youtube_it/request/video_search.rb
107
+ - lib/youtube_it/request/video_upload.rb
108
+ - lib/youtube_it/response/video_search.rb
109
+ - lib/youtube_it/version.rb
110
+ - lib/youtube_it.rb
111
+ - README.rdoc
112
+ - Rakefile
113
+ has_rdoc: true
114
+ homepage: http://github.com/kylejginavan/youtube_it
115
+ licenses: []
116
+
117
+ post_install_message:
118
+ rdoc_options: []
119
+
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ segments:
127
+ - 0
128
+ version: "0"
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ requirements: []
137
+
138
+ rubyforge_project: vibedeck-youtube_it
139
+ rubygems_version: 1.3.6
140
+ signing_key:
141
+ specification_version: 3
142
+ summary: The most complete Ruby wrapper for youtube api's
143
+ test_files:
144
+ - test/helper.rb
145
+ - test/test_chain_io.rb
146
+ - test/test_client.rb
147
+ - test/test_field_search.rb
148
+ - test/test_video.rb
149
+ - test/test_video_feed_parser.rb
150
+ - test/test_video_search.rb