slainer68_vimeo 1.4.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.
Files changed (167) hide show
  1. data/CHANGELOG.rdoc +24 -0
  2. data/LICENSE +20 -0
  3. data/README.markdown +330 -0
  4. data/Rakefile +100 -0
  5. data/VERSION.yml +5 -0
  6. data/init.rb +2 -0
  7. data/lib/vimeo/advanced/album.rb +55 -0
  8. data/lib/vimeo/advanced/base.rb +126 -0
  9. data/lib/vimeo/advanced/channel.rb +55 -0
  10. data/lib/vimeo/advanced/contact.rb +30 -0
  11. data/lib/vimeo/advanced/group.rb +62 -0
  12. data/lib/vimeo/advanced/group_events.rb +25 -0
  13. data/lib/vimeo/advanced/group_forums.rb +19 -0
  14. data/lib/vimeo/advanced/person.rb +47 -0
  15. data/lib/vimeo/advanced/simple_upload/chunk.rb +50 -0
  16. data/lib/vimeo/advanced/simple_upload/task.rb +85 -0
  17. data/lib/vimeo/advanced/simple_upload.rb +46 -0
  18. data/lib/vimeo/advanced/test.rb +19 -0
  19. data/lib/vimeo/advanced/upload.rb +35 -0
  20. data/lib/vimeo/advanced/video.rb +141 -0
  21. data/lib/vimeo/advanced/video_embed.rb +17 -0
  22. data/lib/vimeo/advanced.rb +20 -0
  23. data/lib/vimeo/simple/activity.rb +42 -0
  24. data/lib/vimeo/simple/album.rb +21 -0
  25. data/lib/vimeo/simple/base.rb +10 -0
  26. data/lib/vimeo/simple/channel.rb +21 -0
  27. data/lib/vimeo/simple/group.rb +28 -0
  28. data/lib/vimeo/simple/user.rb +89 -0
  29. data/lib/vimeo/simple/video.rb +14 -0
  30. data/lib/vimeo/simple.rb +14 -0
  31. data/lib/vimeo.rb +12 -0
  32. data/slainer68_vimeo.gemspec +227 -0
  33. data/test/fixtures/advanced/album/add_video.json +4 -0
  34. data/test/fixtures/advanced/album/create.json +7 -0
  35. data/test/fixtures/advanced/album/delete.json +4 -0
  36. data/test/fixtures/advanced/album/get_all.json +111 -0
  37. data/test/fixtures/advanced/album/get_videos.json +30 -0
  38. data/test/fixtures/advanced/album/remove_video.json +4 -0
  39. data/test/fixtures/advanced/album/set_description.json +4 -0
  40. data/test/fixtures/advanced/album/set_password.json +4 -0
  41. data/test/fixtures/advanced/album/set_title.json +4 -0
  42. data/test/fixtures/advanced/auth/access_token.txt +1 -0
  43. data/test/fixtures/advanced/auth/check_access_token.json +9 -0
  44. data/test/fixtures/advanced/auth/check_token.json +13 -0
  45. data/test/fixtures/advanced/auth/get_frob.json +5 -0
  46. data/test/fixtures/advanced/auth/get_token.json +13 -0
  47. data/test/fixtures/advanced/auth/request_token.txt +1 -0
  48. data/test/fixtures/advanced/channel/add_video.json +4 -0
  49. data/test/fixtures/advanced/channel/get_all.json +1357 -0
  50. data/test/fixtures/advanced/channel/get_info.json +55 -0
  51. data/test/fixtures/advanced/channel/get_moderators.json +45 -0
  52. data/test/fixtures/advanced/channel/get_subscribers.json +44 -0
  53. data/test/fixtures/advanced/channel/get_videos.json +19 -0
  54. data/test/fixtures/advanced/channel/remove_video.json +4 -0
  55. data/test/fixtures/advanced/channel/subscribe.json +4 -0
  56. data/test/fixtures/advanced/channel/unsubscribe.json +4 -0
  57. data/test/fixtures/advanced/contact/get_all.json +117 -0
  58. data/test/fixtures/advanced/contact/get_mutual.json +80 -0
  59. data/test/fixtures/advanced/contact/get_online.json +47 -0
  60. data/test/fixtures/advanced/contact/get_who_added.json +117 -0
  61. data/test/fixtures/advanced/group/add_video.json +4 -0
  62. data/test/fixtures/advanced/group/get_all.json +1532 -0
  63. data/test/fixtures/advanced/group/get_files.json +255 -0
  64. data/test/fixtures/advanced/group/get_info.json +72 -0
  65. data/test/fixtures/advanced/group/get_members.json +862 -0
  66. data/test/fixtures/advanced/group/get_moderators.json +44 -0
  67. data/test/fixtures/advanced/group/get_video_comments.json +96 -0
  68. data/test/fixtures/advanced/group/get_videos.json +102 -0
  69. data/test/fixtures/advanced/group/join.json +4 -0
  70. data/test/fixtures/advanced/group/leave.json +4 -0
  71. data/test/fixtures/advanced/group_events/get_month.json +141 -0
  72. data/test/fixtures/advanced/group_events/get_past.json +141 -0
  73. data/test/fixtures/advanced/group_events/get_upcoming.json +141 -0
  74. data/test/fixtures/advanced/group_forums/get_topic_comments.json +222 -0
  75. data/test/fixtures/advanced/group_forums/get_topics.json +504 -0
  76. data/test/fixtures/advanced/person/add_contact.json +4 -0
  77. data/test/fixtures/advanced/person/add_subscription.json +4 -0
  78. data/test/fixtures/advanced/person/find_by_email.json +9 -0
  79. data/test/fixtures/advanced/person/get_hd_embeds.json +8 -0
  80. data/test/fixtures/advanced/person/get_info.json +20 -0
  81. data/test/fixtures/advanced/person/get_portrait_urls.json +28 -0
  82. data/test/fixtures/advanced/person/remove_contact.json +4 -0
  83. data/test/fixtures/advanced/person/remove_subscription.json +4 -0
  84. data/test/fixtures/advanced/test/echo.json +8 -0
  85. data/test/fixtures/advanced/test/login.json +8 -0
  86. data/test/fixtures/advanced/test/null.json +4 -0
  87. data/test/fixtures/advanced/upload/get_quota.json +16 -0
  88. data/test/fixtures/advanced/upload/get_ticket.json +8 -0
  89. data/test/fixtures/advanced/upload/sample_iTunes.mov +0 -0
  90. data/test/fixtures/advanced/video/add_cast.json +4 -0
  91. data/test/fixtures/advanced/video/add_comment.json +7 -0
  92. data/test/fixtures/advanced/video/add_photos.json +4 -0
  93. data/test/fixtures/advanced/video/add_tags.json +4 -0
  94. data/test/fixtures/advanced/video/clear_tags.json +4 -0
  95. data/test/fixtures/advanced/video/delete.json +4 -0
  96. data/test/fixtures/advanced/video/delete_comment.json +4 -0
  97. data/test/fixtures/advanced/video/edit_comment.json +4 -0
  98. data/test/fixtures/advanced/video/get_all.json +30 -0
  99. data/test/fixtures/advanced/video/get_appears_in.json +10 -0
  100. data/test/fixtures/advanced/video/get_by_tag.json +237 -0
  101. data/test/fixtures/advanced/video/get_cast.json +42 -0
  102. data/test/fixtures/advanced/video/get_comments_list.json +52 -0
  103. data/test/fixtures/advanced/video/get_contacts_liked.json +48 -0
  104. data/test/fixtures/advanced/video/get_contacts_uploaded.json +237 -0
  105. data/test/fixtures/advanced/video/get_info.json +246 -0
  106. data/test/fixtures/advanced/video/get_likes.json +32 -0
  107. data/test/fixtures/advanced/video/get_subscriptions.json +237 -0
  108. data/test/fixtures/advanced/video/get_thumbnail_urls.json +28 -0
  109. data/test/fixtures/advanced/video/get_uploaded.json +30 -0
  110. data/test/fixtures/advanced/video/remove_cast.json +4 -0
  111. data/test/fixtures/advanced/video/remove_tag.json +4 -0
  112. data/test/fixtures/advanced/video/search.json +237 -0
  113. data/test/fixtures/advanced/video/set_description.json +4 -0
  114. data/test/fixtures/advanced/video/set_like.json +4 -0
  115. data/test/fixtures/advanced/video/set_preset.json +4 -0
  116. data/test/fixtures/advanced/video/set_privacy.json +4 -0
  117. data/test/fixtures/advanced/video/set_title.json +4 -0
  118. data/test/fixtures/advanced/video_embed/get_presets.json +8 -0
  119. data/test/fixtures/advanced/video_embed/set_preset.json +4 -0
  120. data/test/fixtures/simple/activity/contacts_did.json +1 -0
  121. data/test/fixtures/simple/activity/everyone_did.json +1 -0
  122. data/test/fixtures/simple/activity/happened_to_contacts.json +1 -0
  123. data/test/fixtures/simple/activity/happened_to_user.json +1 -0
  124. data/test/fixtures/simple/activity/user_did.json +1 -0
  125. data/test/fixtures/simple/album/info.json +1 -0
  126. data/test/fixtures/simple/album/videos.json +1 -0
  127. data/test/fixtures/simple/channel/info.json +1 -0
  128. data/test/fixtures/simple/channel/videos.json +1 -0
  129. data/test/fixtures/simple/group/info.json +1 -0
  130. data/test/fixtures/simple/group/users.json +1 -0
  131. data/test/fixtures/simple/group/videos.json +1 -0
  132. data/test/fixtures/simple/user/albums.json +1 -0
  133. data/test/fixtures/simple/user/all_videos.json +1 -0
  134. data/test/fixtures/simple/user/appears_in.json +1 -0
  135. data/test/fixtures/simple/user/channels.json +1 -0
  136. data/test/fixtures/simple/user/contacts_like.json +1 -0
  137. data/test/fixtures/simple/user/contacts_videos.json +1 -0
  138. data/test/fixtures/simple/user/groups.json +1 -0
  139. data/test/fixtures/simple/user/info.json +1 -0
  140. data/test/fixtures/simple/user/likes.json +1 -0
  141. data/test/fixtures/simple/user/subscriptions.json +1 -0
  142. data/test/fixtures/simple/user/videos.json +1 -0
  143. data/test/fixtures/simple/video/info.json +1 -0
  144. data/test/test_helper.rb +64 -0
  145. data/test/vimeo/advanced/album_test.rb +75 -0
  146. data/test/vimeo/advanced/auth_test.rb +30 -0
  147. data/test/vimeo/advanced/base_test.rb +21 -0
  148. data/test/vimeo/advanced/channels_test.rb +79 -0
  149. data/test/vimeo/advanced/contacts_test.rb +40 -0
  150. data/test/vimeo/advanced/group_events_test.rb +33 -0
  151. data/test/vimeo/advanced/group_forums_test.rb +26 -0
  152. data/test/vimeo/advanced/groups_test.rb +82 -0
  153. data/test/vimeo/advanced/person_test.rb +69 -0
  154. data/test/vimeo/advanced/test_test.rb +33 -0
  155. data/test/vimeo/advanced/upload_test.rb +25 -0
  156. data/test/vimeo/advanced/videos_embed_test.rb +27 -0
  157. data/test/vimeo/advanced/videos_test.rb +212 -0
  158. data/test/vimeo/advanced_test.rb +0 -0
  159. data/test/vimeo/simple/activity_test.rb +60 -0
  160. data/test/vimeo/simple/album_test.rb +31 -0
  161. data/test/vimeo/simple/channel_test.rb +31 -0
  162. data/test/vimeo/simple/group_test.rb +41 -0
  163. data/test/vimeo/simple/user_test.rb +112 -0
  164. data/test/vimeo/simple/video_test.rb +22 -0
  165. data/test/vimeo/simple_test.rb +0 -0
  166. data/test/vimeo_test.rb +0 -0
  167. metadata +304 -0
@@ -0,0 +1,55 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Channel < Vimeo::Advanced::Base
4
+
5
+ # Adds a video to a channel.
6
+ create_api_method :add_video,
7
+ "vimeo.channels.addVideo",
8
+ :required => [:channel_id, :video_id]
9
+
10
+ # Returns a list of all channels.
11
+ create_api_method :get_all,
12
+ "vimeo.channels.getAll",
13
+ :optional => [:page, :per_page, :sort, :user_id]
14
+
15
+ # Returns information about a channel.
16
+ create_api_method :get_info,
17
+ "vimeo.channels.getInfo",
18
+ :required => [:channel_id]
19
+
20
+ # Returns a list of the moderators of a channel.
21
+ create_api_method :get_moderators,
22
+ "vimeo.channels.getModerators",
23
+ :required => [:channel_id],
24
+ :optional => [:page, :per_page]
25
+
26
+ # Returns a list of the subscribers of a channel.
27
+ create_api_method :get_subscribers,
28
+ "vimeo.channels.getSubscribers",
29
+ :required => [:channel_id],
30
+ :optional => [:page, :per_page]
31
+
32
+ # Returns a list of the videos in a channel.
33
+ create_api_method :get_videos,
34
+ "vimeo.channels.getVideos",
35
+ :required => [:channel_id],
36
+ :optional => [:page, :per_page, :full_response]
37
+
38
+ # Removes a video from a channel.
39
+ create_api_method :remove_video,
40
+ "vimeo.channels.removeVideo",
41
+ :required => [:channel_id, :video_id]
42
+
43
+ # Subscribes to a channel
44
+ create_api_method :subscribe,
45
+ "vimeo.channels.subscribe",
46
+ :required => [:channel_id]
47
+
48
+ # Unsubscribes from a channel
49
+ create_api_method :unsubscribe,
50
+ "vimeo.channels.unsubscribe",
51
+ :required => [:channel_id]
52
+
53
+ end # Channel
54
+ end # Advanced
55
+ end # Vimeo
@@ -0,0 +1,30 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Contact < Vimeo::Advanced::Base
4
+
5
+ # Returns a list of a user's contacts.
6
+ create_api_method :get_all,
7
+ "vimeo.contacts.getAll",
8
+ :required => [:user_id],
9
+ :optional => [:page, :per_page, :sort]
10
+
11
+ # Returns a list of your mutual contacts with a user.
12
+ create_api_method :get_mutual,
13
+ "vimeo.contacts.getMutual",
14
+ :required => [:user_id],
15
+ :optional => [:page, :per_page]
16
+
17
+ # Returns a list of your contacts who are online.
18
+ create_api_method :get_online,
19
+ "vimeo.contacts.getOnline",
20
+ :optional => [:page, :per_page]
21
+
22
+ # Returns a list of users who added a user as a contact.
23
+ create_api_method :get_who_added,
24
+ "vimeo.contacts.getWhoAdded",
25
+ :required => [:user_id],
26
+ :optional => [:page, :per_page, :sort]
27
+
28
+ end # Contact
29
+ end # Advanced
30
+ end # Vimeo
@@ -0,0 +1,62 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Group < Vimeo::Advanced::Base
4
+
5
+ # Adds a video to a group.
6
+ create_api_method :add_video,
7
+ "vimeo.groups.addVideo",
8
+ :required => [:group_id, :video_id]
9
+
10
+ # Returns a list of all groups.
11
+ create_api_method :get_all,
12
+ "vimeo.groups.getAll",
13
+ :optional => [:page, :per_page, :sort, :user_id]
14
+
15
+ # Returns a list of a group's files.
16
+ create_api_method :get_files,
17
+ "vimeo.groups.getFiles",
18
+ :required => [:group_id],
19
+ :optional => [:page, :per_page]
20
+
21
+ # Returns information about a group.
22
+ create_api_method :get_info,
23
+ "vimeo.groups.getInfo",
24
+ :required => [:group_id]
25
+
26
+ # Returns a list of the members in a group.
27
+ create_api_method :get_members,
28
+ "vimeo.groups.getMembers",
29
+ :required => [:group_id],
30
+ :optional => [:page, :per_page, :sort]
31
+
32
+ # Returns a list of the moderators of a group.
33
+ create_api_method :get_moderators,
34
+ "vimeo.groups.getModerators",
35
+ :required => [:group_id],
36
+ :optional => [:page, :per_page]
37
+
38
+ # Returns a list of the comments on a video in a group.
39
+ create_api_method :get_video_comments,
40
+ "vimeo.groups.getVideoComments",
41
+ :required => [:group_id, :video_id],
42
+ :optional => [:page, :per_page]
43
+
44
+ # Returns a list of the videos in a group.
45
+ create_api_method :get_videos,
46
+ "vimeo.groups.getVideos",
47
+ :required => [:group_id],
48
+ :optional => [:page, :per_page, :sort, :full_response]
49
+
50
+ # Joins a group.
51
+ create_api_method :join,
52
+ "vimeo.groups.join",
53
+ :required => [:group_id]
54
+
55
+ # Leaves a group.
56
+ create_api_method :leave,
57
+ "vimeo.groups.leave",
58
+ :required => [:group_id]
59
+
60
+ end # Group
61
+ end # Advanced
62
+ end # Vimeo
@@ -0,0 +1,25 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class GroupEvents < Vimeo::Advanced::Base
4
+
5
+ # Returns a list of events from a group for a specific month.
6
+ create_api_method :get_month,
7
+ "vimeo.groups.events.getMonth",
8
+ :required => [:group_id],
9
+ :optional => [:page, :per_page, :month, :year]
10
+
11
+ # Returns a list of all past events from a group.
12
+ create_api_method :get_past,
13
+ "vimeo.groups.events.getPast",
14
+ :required => [:group_id],
15
+ :optional => [:page, :per_page]
16
+
17
+ # Returns a list of all upcoming events from a group.
18
+ create_api_method :get_upcoming,
19
+ "vimeo.groups.events.getUpcoming",
20
+ :required => [:group_id],
21
+ :optional => [:page, :per_page]
22
+
23
+ end # GroupEvents
24
+ end # Advanced
25
+ end # Vimeo
@@ -0,0 +1,19 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class GroupForums < Vimeo::Advanced::Base
4
+
5
+ # Returns a list of comments for a group forum topic.
6
+ create_api_method :get_topic_comments,
7
+ "vimeo.groups.forums.getTopicComments",
8
+ :required => [:group_id, :topic_id],
9
+ :optional => [:page, :per_page]
10
+
11
+ # Returns a list of all group forum topics.
12
+ create_api_method :get_topics,
13
+ "vimeo.groups.forums.getTopics",
14
+ :required => [:group_id],
15
+ :optional => [:page, :per_page]
16
+
17
+ end # GroupForums
18
+ end # Advanced
19
+ end # Vimeo
@@ -0,0 +1,47 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Person < Vimeo::Advanced::Base
4
+
5
+ # Adds a user to your contact list.
6
+ create_api_method :add_contact,
7
+ "vimeo.people.addContact",
8
+ :required => [:user_id]
9
+
10
+ # Adds a subscription to your subscriptions.
11
+ # Types is a comma-delimited string. Valid options: "likes", "appears", "uploads"
12
+ create_api_method :add_subscription,
13
+ "vimeo.people.addSubscription",
14
+ :required => [:user_id, :types]
15
+
16
+ # Finds a user by their e-mail.
17
+ create_api_method :find_by_email,
18
+ "vimeo.people.findByEmail",
19
+ :required => [:user_id]
20
+
21
+ create_api_method :get_hd_embeds,
22
+ "vimeo.people.getHDEmbeds"
23
+
24
+ # Returns a user's information
25
+ create_api_method :get_info,
26
+ "vimeo.people.getInfo",
27
+ :required => [:user_id]
28
+
29
+ # Returns a user's portrait URLs.
30
+ create_api_method :get_portrait_urls,
31
+ "vimeo.people.getPortraitUrls",
32
+ :required => [:user_id]
33
+
34
+ # Removes a user from your contact list.
35
+ create_api_method :remove_contact,
36
+ "vimeo.people.removeContact",
37
+ :required => [:user_id]
38
+
39
+ # Removes a subscription to your subscriptions.
40
+ # Types is a comma-delimited string. Valid options: "likes", "appears", "uploads"
41
+ create_api_method :remove_subscription,
42
+ "vimeo.people.removeSubscription",
43
+ :required => [:user_id, :types]
44
+
45
+ end # Person
46
+ end # Advanced
47
+ end # Vimeo
@@ -0,0 +1,50 @@
1
+ module Vimeo
2
+ module Advanced
3
+ module SimpleUpload
4
+ class Chunk
5
+ MULTIPART_BOUNDARY = "-----------RubyMultipartPost"
6
+
7
+ attr_reader :id, :index
8
+ attr_reader :task, :vimeo
9
+ attr_reader :data, :size
10
+
11
+ def initialize(task, data)
12
+ @task = task
13
+ @vimeo = task.vimeo
14
+ @data = data
15
+ @size = data.size
16
+ @index = task.chunks.count
17
+ end
18
+
19
+ # Performs the upload via Multipart.
20
+ def upload
21
+ endpoint = "#{task.endpoint}&chunk_id=#{index}"
22
+
23
+ response = task.oauth_consumer.request(:post, endpoint, vimeo.get_access_token, {}, {}) do |req|
24
+ req.set_content_type("multipart/form-data", { "boundary" => MULTIPART_BOUNDARY })
25
+
26
+ io = StringIO.new(data)
27
+ io.instance_variable_set :"@original_filename", task.filename
28
+ def io.original_filename; @original_filename; end
29
+ def io.content_type; "application/octet-stream"; end
30
+
31
+ parts = []
32
+ parts << Parts::FilePart.new(MULTIPART_BOUNDARY, "file_data", io)
33
+ parts << Parts::EpiloguePart.new(MULTIPART_BOUNDARY)
34
+
35
+ ios = parts.map{|p| p.to_io }
36
+ req.content_length = parts.inject(0) {|sum,i| sum + i.length }
37
+ req.body_stream = CompositeReadIO.new(*ios)
38
+
39
+ :continue
40
+ end
41
+
42
+ # free memory (for big file uploads)
43
+ @data = nil
44
+
45
+ @id = response.body
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,85 @@
1
+ module Vimeo
2
+ module Advanced
3
+ module SimpleUpload
4
+ class Task
5
+ CHUNK_SIZE = 2 * 1024 * 1024 # 2 megabytes
6
+
7
+ attr_reader :vimeo, :oauth_consumer
8
+ attr_reader :io, :size, :filename
9
+ attr_reader :chunks, :endpoint
10
+ attr_reader :id, :video_id
11
+
12
+ def initialize(vimeo, oauth_consumer, io, size, filename)
13
+ @vimeo, @oauth_consumer = vimeo, oauth_consumer
14
+ @io, @size, @filename = io, size, filename
15
+ @chunks = []
16
+ end
17
+
18
+ # Uploads the file to Vimeo and returns the +video_id+ on success.
19
+ def execute
20
+ check_quota
21
+ authorize
22
+ upload
23
+ raise UploadError.new, "Validation of chunks failed." unless valid?
24
+ complete
25
+
26
+ return video_id
27
+ end
28
+
29
+ protected
30
+
31
+ # Checks whether the file can be uploaded.
32
+ def check_quota
33
+ quota = vimeo.get_quota
34
+ free = quota["user"]["upload_space"]["free"].to_i
35
+
36
+ raise UploadError.new, "file size exceeds quota. required: #{size}, free: #{free}" if size > free
37
+ end
38
+
39
+ # Gets a +ticket_id+ for the upload.
40
+ def authorize
41
+ ticket = vimeo.get_ticket
42
+
43
+ @id = ticket["ticket"]["id"]
44
+ @endpoint = ticket["ticket"]["endpoint"]
45
+ max_file_size = ticket["ticket"]["max_file_size"].to_i
46
+
47
+ raise UploadError.new, "file was too big: #{size}, maximum: #{max_file_size}" if size > max_file_size
48
+ end
49
+
50
+ # Performs the upload.
51
+ def upload
52
+ while (chunk_data = io.read(CHUNK_SIZE)) do
53
+ chunk = Chunk.new(self, chunk_data)
54
+ chunk.upload
55
+ chunks << chunk
56
+ end
57
+ end
58
+
59
+ # Tells vimeo that the upload is complete.
60
+ def complete
61
+ @video_id = vimeo.complete(id, filename)
62
+ end
63
+
64
+ # Compares Vimeo's chunk list with own chunk list. Returns +true+ if identical.
65
+ def valid?
66
+ received, sent = received_chunk_sizes, sent_chunk_sizes
67
+ sent.all? { |id, size| received[id] == size }
68
+ end
69
+
70
+ # Returns a hash of the sent chunks and their respective sizes.
71
+ def sent_chunk_sizes
72
+ Hash[chunks.map { |chunk| [chunk.id, chunk.size] }]
73
+ end
74
+
75
+ # Returns a of Vimeo's received chunks and their respective sizes.
76
+ def received_chunk_sizes
77
+ verification = vimeo.verify_chunks(id)
78
+ chunk_list = verification["ticket"]["chunks"]["chunk"]
79
+ chunk_list = [chunk_list] unless chunk_list.is_a?(Array)
80
+ Hash[chunk_list.map { |chunk| [chunk["id"], chunk["size"].to_i] }]
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,46 @@
1
+ module Vimeo
2
+ module Advanced
3
+ module SimpleUpload
4
+ class UploadError < RuntimeError; end
5
+
6
+ autoload :Task, 'vimeo/advanced/simple_upload/task'
7
+ autoload :Chunk, 'vimeo/advanced/simple_upload/chunk'
8
+
9
+ # Uploads data (IO streams or files) to Vimeo.
10
+ def upload(uploadable)
11
+ case uploadable
12
+ when File
13
+ upload_file(uploadable)
14
+ when String
15
+ upload_file(File.new(uploadable))
16
+ else
17
+ upload_io(uploadable)
18
+ end
19
+ end
20
+
21
+ protected
22
+
23
+ # Uploads an IO to Vimeo.
24
+ def upload_io(io, size, filename = 'io.data')
25
+ raise "#{io.inspect} must respond to #read" unless io.respond_to?(:read)
26
+ task = Task.new(self, @oauth_consumer, io, size, filename)
27
+ task.execute
28
+ task.video_id
29
+ end
30
+
31
+ # Helper for uploading files to Vimeo.
32
+ def upload_file(file)
33
+ file_path = file.path
34
+
35
+ size = File.size(file_path)
36
+ basename = File.basename(file_path)
37
+ io = File.open(file_path)
38
+ io.binmode
39
+
40
+ upload_io(io, size, basename).tap do
41
+ io.close
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,19 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Test < Vimeo::Advanced::Base
4
+
5
+ # http://vimeo.com/api/docs/methods/vimeo.test.echo
6
+ create_api_method :echo,
7
+ "vimeo.test.echo"
8
+
9
+ # http://vimeo.com/api/docs/methods/vimeo.test.login
10
+ create_api_method :login,
11
+ "vimeo.test.login"
12
+
13
+ # http://vimeo.com/api/docs/methods/vimeo.test.null
14
+ create_api_method :null,
15
+ "vimeo.test.null"
16
+
17
+ end # Test
18
+ end # Advanced
19
+ end # Vimeo
@@ -0,0 +1,35 @@
1
+ require 'json'
2
+
3
+ module Vimeo
4
+ module Advanced
5
+
6
+ class Upload < Vimeo::Advanced::Base
7
+ # Check to make sure an upload ticket is still valid.
8
+ create_api_method :check_ticket,
9
+ "vimeo.videos.upload.checkTicket",
10
+ :required => [:ticket_id]
11
+
12
+ # Complete the upload process.
13
+ create_api_method :complete,
14
+ "vimeo.videos.upload.complete",
15
+ :required => [:ticket_id, :filename]
16
+
17
+ # Returns an upload ticket.
18
+ create_api_method :get_ticket,
19
+ "vimeo.videos.upload.getTicket",
20
+ :optional => [:video_id]
21
+
22
+ # Returns the space and HD uploads left for a user.
23
+ create_api_method :get_quota,
24
+ "vimeo.videos.upload.getQuota"
25
+
26
+ # Verify that the chunks were uploaded properly.
27
+ create_api_method :verify_chunks,
28
+ "vimeo.videos.upload.verifyChunks",
29
+ :required => [:ticket_id]
30
+
31
+ include Vimeo::Advanced::SimpleUpload
32
+
33
+ end # Upload
34
+ end # Advanced
35
+ end # Vimeo
@@ -0,0 +1,141 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class Video < Vimeo::Advanced::Base
4
+
5
+ create_api_method :add_cast,
6
+ "vimeo.videos.addCast",
7
+ :required => [:video_id, :user_id],
8
+ :optional => [:role]
9
+
10
+ create_api_method :add_photos,
11
+ "vimeo.videos.addPhotos",
12
+ :required => [:video_id, :photo_urls]
13
+
14
+ create_api_method :add_tags,
15
+ "vimeo.videos.addTags",
16
+ :required => [:video_id, :tags]
17
+
18
+ create_api_method :clear_tags,
19
+ "vimeo.videos.clearTags",
20
+ :required => [:video_id]
21
+
22
+ create_api_method :delete,
23
+ "vimeo.videos.delete",
24
+ :required => [:video_id]
25
+
26
+ create_api_method :get_all,
27
+ "vimeo.videos.getAll",
28
+ :required => [:user_id],
29
+ :optional => [:page, :per_page, :full_response, :sort]
30
+
31
+ create_api_method :get_appears_in,
32
+ "vimeo.videos.getAppearsIn",
33
+ :required => [:user_id],
34
+ :optional => [:page, :per_page, :full_response, :sort]
35
+
36
+ create_api_method :get_by_tag,
37
+ "vimeo.videos.getByTag",
38
+ :required => [:tag],
39
+ :optional => [:page, :per_page, :full_response, :sort]
40
+
41
+ create_api_method :get_cast,
42
+ "vimeo.videos.getCast",
43
+ :required => [:video_id],
44
+ :optional => [:page, :per_page]
45
+
46
+ create_api_method :get_contacts_liked,
47
+ "vimeo.videos.getContactsLiked",
48
+ :required => [:user_id],
49
+ :optional => [:page, :per_page, :full_response, :sort]
50
+
51
+ create_api_method :get_contacts_uploaded,
52
+ "vimeo.videos.getContactsUploaded",
53
+ :required => [:user_id],
54
+ :optional => [:page, :per_page, :full_response, :sort]
55
+
56
+ create_api_method :get_info,
57
+ "vimeo.videos.getInfo",
58
+ :required => [:video_id]
59
+
60
+ create_api_method :get_likes,
61
+ "vimeo.videos.getLikes",
62
+ :required => [:user_id],
63
+ :optional => [:page, :per_page, :full_response, :sort]
64
+
65
+ create_api_method :get_subscriptions,
66
+ "vimeo.videos.getSubscriptions",
67
+ :required => [:user_id],
68
+ :optional => [:page, :per_page, :full_response, :sort]
69
+
70
+ create_api_method :get_thumbnail_urls,
71
+ "vimeo.videos.getThumbnailUrls",
72
+ :required => [:video_id]
73
+
74
+ create_api_method :get_uploaded,
75
+ "vimeo.videos.getUploaded",
76
+ :required => [:user_id],
77
+ :optional => [:page, :per_page, :full_response, :sort]
78
+
79
+ create_api_method :remove_cast,
80
+ "vimeo.videos.removeCast",
81
+ :required => [:video_id, :user_id]
82
+
83
+ create_api_method :remove_tag,
84
+ "vimeo.videos.removeTag",
85
+ :required => [:video_id, :tag_id]
86
+
87
+ create_api_method :search,
88
+ "vimeo.videos.search",
89
+ :required => [:query],
90
+ :optional => [:page, :per_page, :full_response, :sort, :user_id],
91
+ :authorized => false
92
+
93
+ create_api_method :set_description,
94
+ "vimeo.videos.setDescription",
95
+ :required => [:video_id, :description]
96
+
97
+ create_api_method :set_like,
98
+ "vimeo.videos.setLike",
99
+ :required => [:video_id, :like]
100
+
101
+ create_api_method :set_privacy,
102
+ "vimeo.videos.setPrivacy",
103
+ :required => [:video_id, :privacy],
104
+ :optional => [:users, :password]
105
+
106
+ create_api_method :set_title,
107
+ "vimeo.videos.setTitle",
108
+ :required => [:video_id, :title]
109
+
110
+ # comments
111
+ create_api_method :add_comment,
112
+ "vimeo.videos.comments.addComment",
113
+ :required => [:video_id, :comment_text],
114
+ :optional => [:reply_to_comment_id]
115
+
116
+ create_api_method :delete_comment,
117
+ "vimeo.videos.comments.deleteComment",
118
+ :required => [:video_id, :comment_id]
119
+
120
+ create_api_method :edit_comment,
121
+ "vimeo.videos.comments.editComment",
122
+ :required => [:video_id, :comment_id, :comment_text]
123
+
124
+ create_api_method :get_comments_list,
125
+ "vimeo.videos.comments.getList",
126
+ :required => [:video_id],
127
+ :optional => [:page, :per_page]
128
+
129
+ # embed
130
+ # getPresets has a bug right now: the response is blank http://www.vimeo.com/forums/topic:32411
131
+ # create_api_method :get_presets,
132
+ # "vimeo.videos.embed.getPresets",
133
+ # :optional => [:page, :per_page]
134
+
135
+ create_api_method :set_preset,
136
+ "vimeo.videos.embed.setPreset",
137
+ :required => [:preset_id, :video_id]
138
+
139
+ end # Video
140
+ end # Advanced
141
+ end # Vimeo
@@ -0,0 +1,17 @@
1
+ module Vimeo
2
+ module Advanced
3
+ class VideoEmbed < Vimeo::Advanced::Base
4
+
5
+ # Returns a list of presets for a video embed.
6
+ create_api_method :get_presets,
7
+ "vimeo.videos.embed.getPresets",
8
+ :optional => [:page, :per_page]
9
+
10
+ # Sets a preset for a video embed.
11
+ create_api_method :set_preset,
12
+ "vimeo.videos.embed.setPreset",
13
+ :required => [:video_id, :preset_id]
14
+
15
+ end # VideoEmbed
16
+ end # Advanced
17
+ end # Vimeo
@@ -0,0 +1,20 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+ require 'advanced/base'
3
+ require 'advanced/album'
4
+ require 'advanced/channel'
5
+ require 'advanced/contact'
6
+ require 'advanced/group'
7
+ require 'advanced/group_events'
8
+ require 'advanced/group_forums'
9
+ require 'advanced/person'
10
+ require 'advanced/simple_upload'
11
+ require 'advanced/test'
12
+ require 'advanced/upload'
13
+ require 'advanced/video'
14
+ require 'advanced/video_embed'
15
+
16
+ module Vimeo
17
+ module Advanced
18
+
19
+ end
20
+ end