vimeo 1.2.2 → 1.3.0

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.
data/README.markdown CHANGED
@@ -2,10 +2,7 @@
2
2
 
3
3
  This gem implements a full-featured Ruby interface for the Vimeo API v2.
4
4
 
5
- For a more in depth look at the API check out [Vimeo's Simple API Documentation](http://www.vimeo.com/api/docs/simple-api) or [Vimeo's Advanced API Documentation](http://www.vimeo.com/api/docs/advanced-api). I would also recommend checking out the [API Forums](http://www.vimeo.com/forum:api) if
6
- things aren't working as they should.
7
-
8
- __I have been experiencing trouble with intermittent 303 errors (Invalid Signature). As far as I can tell, this is a server-side issue.__
5
+ For a more in depth look at the API check out [Vimeo's Simple API Documentation](http://www.vimeo.com/api/docs/simple-api) or [Vimeo's Advanced API Documentation](http://www.vimeo.com/api/docs/advanced-api). I would also recommend checking out the [API Forums](http://www.vimeo.com/forum:api) if things aren't working as they should.
9
6
 
10
7
  ## Install
11
8
 
@@ -17,6 +14,10 @@ If you're using Rails, add the following to your environment.rb file:
17
14
 
18
15
  config.gem "vimeo"
19
16
 
17
+ Or for bundler:
18
+
19
+ gem 'vimeo'
20
+
20
21
  ## How to Use
21
22
 
22
23
  There are two modules:
@@ -43,7 +44,7 @@ The wrapper for the Simple API consists of several classes. To use the Simple AP
43
44
  # "bio":"",
44
45
  # "profile_url":"http:\/\/vimeo.com\/matthooks",
45
46
  # "videos_url":"http:\/\/vimeo.com\/matthooks\/videos",
46
- # "total_videos_uploaded":2,
47
+ # "total_videos_appears_ined":2,
47
48
  # "total_videos_appears_in":0,
48
49
  # "total_videos_liked":2,
49
50
  # "total_contacts":3,
@@ -74,7 +75,7 @@ Thanks to HTTParty, the data is parsed and ready to use.
74
75
 
75
76
  Vimeo::Simple::Album.videos("album_id")
76
77
  Vimeo::Simple::Album.info("album_id")
77
-
78
+
78
79
  ### Vimeo::Simple::Channel
79
80
 
80
81
  Vimeo::Simple::Channel.videos("channelname")
@@ -116,8 +117,8 @@ First, instantiate the Base class:
116
117
 
117
118
  Get a request token, and save the token secret in the session hash.
118
119
 
119
- request_token = base.get_request_token
120
- session[:oauth_secret] = request_token.secret
120
+ request_token = base.get_request_token
121
+ session[:oauth_secret] = request_token.secret
121
122
 
122
123
  Then, send your user to the authorization URL:
123
124
 
@@ -131,7 +132,7 @@ Once the user has allowed your application to access their account, they will be
131
132
  user.token = access_token.token
132
133
  user.secret = access_token.secret
133
134
  user.save
134
-
135
+
135
136
  Now you've got everything you need to use the Advanced API. Let's get a user's videos:
136
137
 
137
138
  video = Vimeo::Advanced::Video.new("consumer_key", "consumer_secret", :token => user.token, :secret => user.secret)
@@ -160,13 +161,13 @@ Some methods have optional variables. Pass these as a hash at the end of a call.
160
161
  album.set_description("album_id", "description")
161
162
  album.get_password("album_id", "password")
162
163
  album.get_title("album_id", "title")
163
-
164
+
164
165
  ### Vimeo::Advanced::Base
165
166
 
166
167
  base = Vimeo::Advanced::Base.new("consumer_key", "consumer_secret", :token => user.token, :secret => user.secret)
167
168
 
168
169
  base.check_access_token
169
-
170
+
170
171
  ### Vimeo::Advanced::Channel
171
172
 
172
173
  channel = Vimeo::Advanced::Channel.new("consumer_key", "consumer_secret", :token => user.token, :secret => user.secret)
@@ -245,11 +246,15 @@ Some methods have optional variables. Pass these as a hash at the end of a call.
245
246
 
246
247
  upload = Vimeo::Advanced::Upload.new("consumer_key", "consumer_secret", :token => user.token, :secret => user.secret)
247
248
 
248
- upload.confirm("ticket_id", "json_manifest")
249
- upload.get_quota
249
+ # Other than get_quota, none of these methods should be called directly. The 'upload' method uses these internally.
250
+ upload.check_ticket("ticket_id")
251
+ upload.complete("ticket_id", "filename")
250
252
  upload.get_ticket
251
- upload.upload("path_to_file", "ticket_id", "end_point")
252
- upload.verify_manifest("ticket_id", "json_manifest")
253
+ upload.get_quota
254
+ upload.verify_chunks("ticket_id")
255
+
256
+ # supports File, String (a file path), #read
257
+ upload.upload("movie.mp4")
253
258
 
254
259
  ### Vimeo::Advanced::Video
255
260
 
@@ -294,7 +299,15 @@ Some methods have optional variables. Pass these as a hash at the end of a call.
294
299
 
295
300
  ## Uploads
296
301
 
297
- __Uploads are not working since the move to OAuth. They will be fixed shortly.__
302
+ Uploads are working! In order to upload a file, create your upload object, like so:
303
+
304
+ upload = Vimeo::Advanced::Upload.new("consumer_key", "consumer_secret", :token => user.token, :secret => user.secret)
305
+
306
+ Then call the upload method:
307
+
308
+ upload.upload("/path/to/file") # You can also pass a File object or any IO.
309
+
310
+ The upload method will automatically get an upload ticket, perform the multipart POST, verify the file chunks and then complete the upload.
298
311
 
299
312
  ## Todo
300
313
 
data/Rakefile CHANGED
@@ -15,16 +15,17 @@ begin
15
15
  gem.add_development_dependency "fakeweb", ">= 1.2.6"
16
16
  gem.add_development_dependency "crack", ">= 0.1.4"
17
17
  gem.add_development_dependency "ruby-prof", ">= 0.9.2"
18
-
18
+
19
19
  gem.has_rdoc = true
20
-
20
+
21
21
  gem.rdoc_options = ['--main', 'README.rdoc', '--inline-source', '--charset=UTF-8']
22
22
  gem.extra_rdoc_files = ['README.rdoc', 'LICENSE', 'CHANGELOG.rdoc']
23
-
23
+
24
24
  gem.add_dependency "httparty", ">= 0.4.5"
25
25
  gem.add_dependency "json", ">= 1.1.9"
26
- gem.add_dependency "oauth", ">= 0.3.6"
26
+ gem.add_dependency "oauth", ">= 0.4.3"
27
27
  gem.add_dependency "httpclient", ">= 2.1.5.2"
28
+ gem.add_dependency "multipart-post", ">= 1.0.1"
28
29
  end
29
30
  Jeweler::GemcutterTasks.new
30
31
  rescue LoadError
@@ -55,6 +56,36 @@ task :test => :check_dependencies
55
56
 
56
57
  task :default => :test
57
58
 
59
+ namespace :vimeo do
60
+ desc "Multi-step wizard to acquire an access_token. CONSUMER_KEY and CONSUMER_SECRET required."
61
+ task :auth do
62
+ require 'vimeo'
63
+
64
+ def ask(message)
65
+ print message
66
+ STDOUT.flush
67
+ STDIN.gets.chomp
68
+ end
69
+
70
+ consumer_key = ENV['CONSUMER_KEY']
71
+ consumer_secret = ENV['CONSUMER_SECRET']
72
+ base = Vimeo::Advanced::Base.new(consumer_key, consumer_secret)
73
+
74
+ request_token = base.get_request_token
75
+ oauth_secret = request_token.secret
76
+
77
+ puts "Please visit: #{base.authorize_url}"
78
+
79
+ oauth_token = ask("oauth_token=")
80
+ oauth_verifier = ask("oauth_verifier=")
81
+
82
+ access_token = base.get_access_token(oauth_token, oauth_secret, oauth_verifier)
83
+
84
+ puts "token: #{access_token.token}"
85
+ puts "secret: #{access_token.secret}"
86
+ end
87
+ end
88
+
58
89
  require 'rake/rdoctask'
59
90
  Rake::RDocTask.new do |rdoc|
60
91
  if File.exist?('VERSION')
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :minor: 2
3
- :build:
4
- :patch: 2
2
+ :patch: 0
5
3
  :major: 1
4
+ :build:
5
+ :minor: 3
data/lib/vimeo.rb CHANGED
@@ -2,6 +2,8 @@ require 'rubygems'
2
2
  require 'httparty'
3
3
  require 'digest/md5'
4
4
 
5
+ require 'net/http/post/multipart'
6
+
5
7
  $:.unshift(File.dirname(__FILE__))
6
8
  require 'vimeo/simple'
7
9
  require 'vimeo/advanced'
@@ -66,6 +66,8 @@ module Vimeo
66
66
 
67
67
  class Base
68
68
  extend CreateApiMethod
69
+
70
+ ENDPOINT = "http://vimeo.com/api/rest/v2"
69
71
 
70
72
  def initialize(consumer_key, consumer_secret, options = {})
71
73
  @oauth_consumer = OAuth::Consumer.new(consumer_key, consumer_secret, :site => 'http://vimeo.com', :http_method => :get, :scheme => :header)
@@ -94,9 +96,9 @@ private
94
96
 
95
97
  def make_request(options, authorized)
96
98
  if authorized
97
- raw_response = @oauth_consumer.request(:post, "http://vimeo.com/api/rest/v2", get_access_token, {}, options).body
99
+ raw_response = @oauth_consumer.request(:post, Vimeo::Advanced::Base::ENDPOINT, get_access_token, {}, options).body
98
100
  else
99
- raw_response = @oauth_consumer.request(:post, "http://vimeo.com/api/rest/v2", nil, {}, options).body
101
+ raw_response = @oauth_consumer.request(:post, Vimeo::Advanced::Base::ENDPOINT, nil, {}, options).body
100
102
  end
101
103
 
102
104
  response = Crack::JSON.parse(raw_response)
@@ -1,57 +1,141 @@
1
- require 'httpclient'
2
1
  require 'json'
3
2
 
4
3
  module Vimeo
5
4
  module Advanced
6
5
 
7
6
  class Upload < Vimeo::Advanced::Base
7
+ class UploadError < RuntimeError; end
8
8
 
9
- # TODO: Make this work with either a JSON or an XML manifest.
10
- # Confirms the upload process.
11
- create_api_method :confirm,
12
- "vimeo.videos.upload.confirm",
9
+ # 2 megabytes
10
+ CHUNK_SIZE = 2 * 1024 * 1024
11
+
12
+ # multipart boundary
13
+ BOUNDARY = "-----------RubyMultipartPost"
14
+
15
+ # Check to make sure an upload ticket is still valid.
16
+ create_api_method :check_ticket,
17
+ "vimeo.videos.upload.checkTicket",
13
18
  :required => [:ticket_id]
14
-
15
- # "{\"files\":[{\"md5\":\"731f09145a1ea9ec9dad689de6fa0358\"}]}"
19
+
20
+ # Complete the upload process.
21
+ create_api_method :complete,
22
+ "vimeo.videos.upload.complete",
23
+ :required => [:ticket_id, :filename]
24
+
25
+ # Returns an upload ticket.
26
+ create_api_method :get_ticket,
27
+ "vimeo.videos.upload.getTicket",
28
+ :optional => [:video_id]
16
29
 
17
30
  # Returns the space and HD uploads left for a user.
18
31
  create_api_method :get_quota,
19
32
  "vimeo.videos.upload.getQuota"
20
-
21
- # Returns an upload ticket.
22
- create_api_method :get_ticket,
23
- "vimeo.videos.upload.getTicket"
24
-
25
- # Upload +file+ to vimeo with +ticket_id+ and +auth_token+
26
- # Returns the json manifest necessary to confirm the upload.
27
- def upload(auth_token, file_path, ticket_id, end_point)
28
- params = {
29
- :auth_token => auth_token,
30
- :ticket_id => ticket_id
31
- }
32
- params[:api_sig] = generate_api_sig params
33
-
34
- params.merge!({ :file_data => File.open(file_path) })
35
-
36
- client = HTTPClient.new
37
- response = client.post(end_point, params)
38
- md5 = response.content
39
-
40
- self.class.create_json_manifest(md5)
41
- end
42
33
 
43
- # TODO: Make this work with either json or xml manifest.
44
- # FIXME: Ticket id is required?
45
- # Verifies a file manifest.
46
- create_api_method :verify_manifest,
47
- "vimeo.videos.upload.verifyManifest",
34
+ # Verify that the chunks were uploaded properly.
35
+ create_api_method :verify_chunks,
36
+ "vimeo.videos.upload.verifyChunks",
48
37
  :required => [:ticket_id]
49
38
 
50
- # TODO: Make this more flexible for split uploads?
51
- def self.create_json_manifest(md5s)
52
- { :files => md5s.map { |md5| { :md5 => md5 } } }.to_json
39
+
40
+ # Uploads data (IO streams or files) to Vimeo.
41
+ def upload(uploadable)
42
+ case uploadable
43
+ when File
44
+ upload_file(uploadable)
45
+ when String
46
+ upload_file(File.new(uploadable))
47
+ else
48
+ upload_io(uploadable)
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def upload_chunk(chunk_id, data, endpoint, filename)
55
+ endpoint += "&chunk_id=#{chunk_id}"
56
+
57
+ response = @oauth_consumer.request(:post, endpoint, get_access_token, {}, {}) do |req|
58
+ req.set_content_type("multipart/form-data", { "boundary" => BOUNDARY })
59
+
60
+ io = StringIO.new(data)
61
+ io.instance_variable_set :"@original_filename", filename
62
+ def io.original_filename; @original_filename; end
63
+ def io.content_type; "application/octet-stream"; end
64
+
65
+ parts = []
66
+ parts << Parts::FilePart.new(BOUNDARY, "file_data", io)
67
+ parts << Parts::EpiloguePart.new(BOUNDARY)
68
+
69
+ ios = parts.map{|p| p.to_io }
70
+ req.content_length = parts.inject(0) {|sum,i| sum + i.length }
71
+ req.body_stream = CompositeReadIO.new(*ios)
72
+
73
+ :continue
74
+ end
75
+
76
+ response.body
53
77
  end
54
78
 
79
+ def upload_io(io, size, filename = 'io.data')
80
+ raise "#{io.inspect} must respond to #read" unless io.respond_to?(:read)
81
+
82
+ quota_response = get_quota
83
+ user = quota_response["user"]
84
+ upload_space = user["upload_space"]
85
+ free = upload_space["free"].to_i
86
+
87
+ raise UploadError.new, "file size exceeds quota. required: #{size}, free: #{free}" if size > free
88
+
89
+ ticket_response = get_ticket
90
+ ticket = ticket_response["ticket"]
91
+ max_file_size = ticket["max_file_size"].to_i
92
+ ticket_id = ticket["id"]
93
+ endpoint = ticket["endpoint"]
94
+
95
+ raise UploadError.new, "file was too big: #{size}, maximum: #{max_file_size}" if size > max_file_size
96
+
97
+ chunk_sizes = {}
98
+ chunk_index = 0
99
+
100
+ while (chunk = io.read(CHUNK_SIZE)) do
101
+
102
+ chunk_id = upload_chunk(chunk_index, chunk, endpoint, filename)
103
+ chunk_sizes[chunk_id] = chunk.length
104
+ chunk_index += 1
105
+ end
106
+
107
+ validate_chunks_after_upload(ticket_id, chunk_sizes)
108
+
109
+ complete(ticket_id, filename)
110
+ end
111
+
112
+ def upload_file(file)
113
+ file_path = file.path
114
+
115
+ size = File.size(file_path)
116
+ basename = File.basename(file_path)
117
+ io = File.open(file_path)
118
+ io.binmode
119
+
120
+ upload_io(io, size, basename).tap do
121
+ io.close
122
+ end
123
+ end
124
+
125
+ def validate_chunks_after_upload(ticket_id, chunk_sizes)
126
+ verification = verify_chunks(ticket_id)
127
+ ticket = verification["ticket"]
128
+ chunk_list = Array(ticket["chunks"]["chunk"])
129
+ received_chunks = Hash[chunk_list.map { |chunk| [chunk["id"], chunk["size"].to_i] }]
130
+
131
+ chunk_sizes.each do |id, size|
132
+ vimeo_size = received_chunks[id]
133
+
134
+ if vimeo_size != size
135
+ raise UploadError.new, "Chunk (id: #{id}) was invalid - was: #{vimeo_size}, should be: #{size}."
136
+ end
137
+ end
138
+ end
55
139
  end # Upload
56
140
  end # Advanced
57
- end # Vimeo
141
+ end # Vimeo
@@ -3,48 +3,23 @@ require 'test_helper'
3
3
  class UploadTest < Test::Unit::TestCase
4
4
 
5
5
  context "vimeo advanced upload" do
6
-
6
+
7
7
  setup do
8
8
  @upload = Vimeo::Advanced::Upload.new("12345", "secret", :token => "token", :secret => "secret")
9
9
  end
10
10
 
11
- should "be able confirm an upload" do
12
- stub_post("?api_key=12345&ticket_id=ticket_id&format=json&auth_token=token&api_sig=576b41966709651aead8754b3c5d370d&method=vimeo.videos.upload.confirm", "advanced/upload/confirm.json")
13
- response = @upload.confirm("ticket_id")
14
-
15
- assert_equal "ticket_id", response["ticket"]["id"]
16
- end
17
-
18
11
  should "be able to get a user's quota" do
19
12
  stub_post("?api_key=12345&auth_token=token&format=json&api_sig=4eb2da55156fca5ab81bfe1a67a016ec&method=vimeo.videos.upload.getQuota", "advanced/upload/get_quota.json")
20
13
  response = @upload.get_quota
21
-
14
+
22
15
  assert_equal "888046", response["user"]["id"]
23
16
  end
24
-
17
+
25
18
  should "be able to get an upload ticket" do
26
19
  stub_post("?api_key=12345&auth_token=token&format=json&api_sig=0eabe7404e1c1fd22a269190c36e4093&method=vimeo.videos.upload.getTicket", "advanced/upload/get_ticket.json")
27
20
  response = @upload.get_ticket
28
-
29
- assert_equal "ticket_id", response["ticket"]["id"]
30
- end
31
21
 
32
- # TODO: Stub out the HTTPClient calls correctly since FakeWeb doesn't work here.
33
- # should "be able to upload a file to vimeo" do
34
- # HTTPClient.any_instance.stubs(:post)
35
- # file_path = File.expand_path(File.dirname(__FILE__) + "../../../fixtures/advanced/upload/sample_iTunes.mov")
36
- # response = @upload.upload(file_path, "ticket_id", "http:\/\/67.202.6.15\/upload_multi?ticket_id=ticket_id")
37
- #
38
- # assert_equal "MD5", response
39
- # end
40
-
41
- # TODO: Make sure this manifest fixture file is right.
42
- should "be able to verify a file manifest" do
43
- stub_post("?api_key=12345&ticket_id=ticket_id&format=json&auth_token=token&api_sig=3b1c022ba0be09e5901bd91fb5a4426c&method=vimeo.videos.upload.verifyManifest", "advanced/upload/verify_manifest.json")
44
- response = @upload.verify_manifest("ticket_id")
45
-
46
22
  assert_equal "ticket_id", response["ticket"]["id"]
47
23
  end
48
-
49
24
  end
50
25
  end
data/vimeo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{vimeo}
8
- s.version = "1.2.2"
8
+ s.version = "1.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Hooks"]
12
- s.date = %q{2010-09-18}
12
+ s.date = %q{2010-11-12}
13
13
  s.description = %q{A full featured Ruby implementation of the Vimeo API.}
14
14
  s.email = %q{matthooks@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -100,12 +100,9 @@ Gem::Specification.new do |s|
100
100
  "test/fixtures/advanced/test/echo.json",
101
101
  "test/fixtures/advanced/test/login.json",
102
102
  "test/fixtures/advanced/test/null.json",
103
- "test/fixtures/advanced/upload/confirm.json",
104
103
  "test/fixtures/advanced/upload/get_quota.json",
105
104
  "test/fixtures/advanced/upload/get_ticket.json",
106
- "test/fixtures/advanced/upload/manifest_to_upload.json",
107
105
  "test/fixtures/advanced/upload/sample_iTunes.mov",
108
- "test/fixtures/advanced/upload/verify_manifest.json",
109
106
  "test/fixtures/advanced/video/add_cast.json",
110
107
  "test/fixtures/advanced/video/add_comment.json",
111
108
  "test/fixtures/advanced/video/add_photos.json",
@@ -227,8 +224,9 @@ Gem::Specification.new do |s|
227
224
  s.add_development_dependency(%q<ruby-prof>, [">= 0.9.2"])
228
225
  s.add_runtime_dependency(%q<httparty>, [">= 0.4.5"])
229
226
  s.add_runtime_dependency(%q<json>, [">= 1.1.9"])
230
- s.add_runtime_dependency(%q<oauth>, [">= 0.3.6"])
227
+ s.add_runtime_dependency(%q<oauth>, [">= 0.4.3"])
231
228
  s.add_runtime_dependency(%q<httpclient>, [">= 2.1.5.2"])
229
+ s.add_runtime_dependency(%q<multipart-post>, [">= 1.0.1"])
232
230
  else
233
231
  s.add_dependency(%q<shoulda>, [">= 2.11.3"])
234
232
  s.add_dependency(%q<fakeweb>, [">= 1.2.6"])
@@ -236,8 +234,9 @@ Gem::Specification.new do |s|
236
234
  s.add_dependency(%q<ruby-prof>, [">= 0.9.2"])
237
235
  s.add_dependency(%q<httparty>, [">= 0.4.5"])
238
236
  s.add_dependency(%q<json>, [">= 1.1.9"])
239
- s.add_dependency(%q<oauth>, [">= 0.3.6"])
237
+ s.add_dependency(%q<oauth>, [">= 0.4.3"])
240
238
  s.add_dependency(%q<httpclient>, [">= 2.1.5.2"])
239
+ s.add_dependency(%q<multipart-post>, [">= 1.0.1"])
241
240
  end
242
241
  else
243
242
  s.add_dependency(%q<shoulda>, [">= 2.11.3"])
@@ -246,8 +245,9 @@ Gem::Specification.new do |s|
246
245
  s.add_dependency(%q<ruby-prof>, [">= 0.9.2"])
247
246
  s.add_dependency(%q<httparty>, [">= 0.4.5"])
248
247
  s.add_dependency(%q<json>, [">= 1.1.9"])
249
- s.add_dependency(%q<oauth>, [">= 0.3.6"])
248
+ s.add_dependency(%q<oauth>, [">= 0.4.3"])
250
249
  s.add_dependency(%q<httpclient>, [">= 2.1.5.2"])
250
+ s.add_dependency(%q<multipart-post>, [">= 1.0.1"])
251
251
  end
252
252
  end
253
253
 
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 2
9
- - 2
10
- version: 1.2.2
8
+ - 3
9
+ - 0
10
+ version: 1.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Hooks
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-18 00:00:00 -05:00
18
+ date: 2010-11-12 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -122,12 +122,12 @@ dependencies:
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
- hash: 31
125
+ hash: 9
126
126
  segments:
127
127
  - 0
128
+ - 4
128
129
  - 3
129
- - 6
130
- version: 0.3.6
130
+ version: 0.4.3
131
131
  type: :runtime
132
132
  version_requirements: *id007
133
133
  - !ruby/object:Gem::Dependency
@@ -147,6 +147,22 @@ dependencies:
147
147
  version: 2.1.5.2
148
148
  type: :runtime
149
149
  version_requirements: *id008
150
+ - !ruby/object:Gem::Dependency
151
+ name: multipart-post
152
+ prerelease: false
153
+ requirement: &id009 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 21
159
+ segments:
160
+ - 1
161
+ - 0
162
+ - 1
163
+ version: 1.0.1
164
+ type: :runtime
165
+ version_requirements: *id009
150
166
  description: A full featured Ruby implementation of the Vimeo API.
151
167
  email: matthooks@gmail.com
152
168
  executables: []
@@ -240,12 +256,9 @@ files:
240
256
  - test/fixtures/advanced/test/echo.json
241
257
  - test/fixtures/advanced/test/login.json
242
258
  - test/fixtures/advanced/test/null.json
243
- - test/fixtures/advanced/upload/confirm.json
244
259
  - test/fixtures/advanced/upload/get_quota.json
245
260
  - test/fixtures/advanced/upload/get_ticket.json
246
- - test/fixtures/advanced/upload/manifest_to_upload.json
247
261
  - test/fixtures/advanced/upload/sample_iTunes.mov
248
- - test/fixtures/advanced/upload/verify_manifest.json
249
262
  - test/fixtures/advanced/video/add_cast.json
250
263
  - test/fixtures/advanced/video/add_comment.json
251
264
  - test/fixtures/advanced/video/add_photos.json
@@ -1,9 +0,0 @@
1
- {
2
- "stat":"ok",
3
- "generated_in":"38.5153",
4
- "ticket": {
5
- "video_id":"6777401",
6
- "id":"ticket_id",
7
- "manifest":"MD5"
8
- }
9
- }
@@ -1,6 +0,0 @@
1
- {
2
- "files": [{
3
- "md5":
4
- "718a4221052e81534696bc84ef5bc195"
5
- }]
6
- }
@@ -1,11 +0,0 @@
1
- {
2
- "ticket":{
3
- "id":"ticket_id",
4
- "md5":"MD5",
5
- "missing_files":[{
6
- "file":{
7
- "md5":"MD5"
8
- }
9
- }]
10
- }
11
- }