wistia-uploader 0.1.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.9.3-p392@wistia-uploader --create
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
  gem 'multipart-post', '>= 1.1.5'
@@ -6,8 +6,11 @@ gem 'multipart-post', '>= 1.1.5'
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "shoulda", ">= 0"
10
- gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.1.4"
12
- gem "jeweler", "~> 1.8.4"
9
+ gem 'shoulda', '>= 0'
10
+ gem 'rdoc', '~> 3.12'
11
+ gem 'jeweler', '~> 1.8.4'
12
+ end
13
+
14
+ group :test do
15
+ gem 'rspec'
13
16
  end
data/Gemfile.lock CHANGED
@@ -4,6 +4,7 @@ GEM
4
4
  activesupport (3.2.8)
5
5
  i18n (~> 0.6)
6
6
  multi_json (~> 1.0)
7
+ diff-lcs (1.2.4)
7
8
  git (1.2.5)
8
9
  i18n (0.6.1)
9
10
  jeweler (1.8.4)
@@ -17,6 +18,14 @@ GEM
17
18
  rake (0.9.2.2)
18
19
  rdoc (3.12)
19
20
  json (~> 1.4)
21
+ rspec (2.13.0)
22
+ rspec-core (~> 2.13.0)
23
+ rspec-expectations (~> 2.13.0)
24
+ rspec-mocks (~> 2.13.0)
25
+ rspec-core (2.13.1)
26
+ rspec-expectations (2.13.0)
27
+ diff-lcs (>= 1.1.3, < 2.0)
28
+ rspec-mocks (2.13.1)
20
29
  shoulda (3.1.1)
21
30
  shoulda-context (~> 1.0)
22
31
  shoulda-matchers (~> 1.2)
@@ -28,9 +37,9 @@ PLATFORMS
28
37
  ruby
29
38
 
30
39
  DEPENDENCIES
31
- bundler (~> 1.1.4)
32
40
  jeweler (~> 1.8.4)
33
41
  json
34
42
  multipart-post (>= 1.1.5)
35
43
  rdoc (~> 3.12)
44
+ rspec
36
45
  shoulda
data/README.md CHANGED
@@ -1,11 +1,14 @@
1
- wistia-uploader
2
- ===============
1
+ # wistia-uploader
3
2
 
4
- A simple command line media upload client for Wistia users.
3
+ A command line media upload client for Wistia users.
5
4
 
6
5
  Run 'bin/wistia-uploader -h' for additional information.
7
6
 
8
- Configuration
7
+ ## Requirements
8
+
9
+ wistia-uploader works with Ruby 1.8.7 and 1.9.3. Earlier versions of 1.8 and 1.9 may work but have not been tested.
10
+
11
+ ## Configuration
9
12
  -------------
10
13
 
11
14
  While not required for use, defaults for various required parameters may be
@@ -18,8 +21,3 @@ key/value pairs. Example:
18
21
 
19
22
  A Wistia 'contact_id' may also be specified, otherwise the account owner will
20
23
  be inferred from the project.
21
-
22
- Copyright
23
- ---------
24
-
25
- Copyright (c) 2012 Jason Lawrence of Wistia, Inc.
data/Rakefile CHANGED
@@ -14,25 +14,22 @@ require 'rake'
14
14
  require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "wistia-uploader"
18
- gem.homepage = "http://github.com/wistia/wistia-uploader"
19
- gem.license = "MIT"
20
- gem.summary = %Q{A simple CLI uploader for Wistia users.}
21
- gem.description = %Q{A simple CLI uploader for Wistia users.}
22
- gem.email = "jason@wistia.com"
23
- gem.authors = ["Jason Lawrence"]
17
+ gem.name = 'wistia-uploader'
18
+ gem.homepage = 'http://github.com/wistia/wistia-uploader'
19
+ gem.license = 'MIT'
20
+ gem.summary = 'A simple CLI uploader for Wistia users.'
21
+ gem.description = 'A simple CLI uploader for Wistia users.'
22
+ gem.email = 'dev@wistia.com'
23
+ gem.authors = ['Robby Grossman', 'Jason Lawrence', 'Brendan Schwartz']
24
24
  # dependencies defined in Gemfile
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
27
27
 
28
- require 'rake/testtask'
29
- Rake::TestTask.new(:test) do |test|
30
- test.libs << 'lib' << 'test'
31
- test.pattern = 'test/**/test_*.rb'
32
- test.verbose = true
33
- end
28
+ require 'rspec/core/rake_task'
29
+ desc 'Run specs'
30
+ RSpec::Core::RakeTask.new
34
31
 
35
- task :default => :test
32
+ task default: :spec
36
33
 
37
34
  require 'rdoc/task'
38
35
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 1.0.0
data/bin/wistia-uploader CHANGED
@@ -3,10 +3,9 @@
3
3
  # A simple CLI media uploader for Wistia.
4
4
 
5
5
  require 'set'
6
- require 'json'
7
6
  require 'optparse'
8
7
 
9
- require_relative '../lib/wistia-uploader'
8
+ require File.expand_path('../../lib/wistia-uploader', __FILE__)
10
9
 
11
10
  options = {}
12
11
 
@@ -15,57 +14,57 @@ required = Set.new [:api_password, :media_file]
15
14
  loadable = Set.new([:contact_id, :project_id]) + required
16
15
 
17
16
  OptionParser.new do |opts|
18
- opts.banner = "Usage: wistia-uploader [options]"
19
-
20
- opts.separator ""
21
- opts.separator "Description:"
22
- opts.separator " Upload media files to a Wistia project."
23
- opts.separator ""
24
- opts.separator "Configuration:"
25
- opts.separator " Default values for required options may be specified as"
26
- opts.separator " newline separated key=value pairs in '~/.wistia.conf'."
27
- opts.separator ""
28
- opts.separator " Options provided in this manner will be overridden if"
29
- opts.separator " specified on the command line."
30
- opts.separator ""
31
-
32
- opts.separator "General options:"
33
-
34
- opts.on("-q", "--quiet", "Silence output") do |q|
17
+ opts.banner = 'Usage: wistia-uploader [options]'
18
+
19
+ opts.separator ''
20
+ opts.separator 'Description:'
21
+ opts.separator ' Upload media files to a Wistia project.'
22
+ opts.separator ''
23
+ opts.separator 'Configuration:'
24
+ opts.separator ' Default values for required options may be specified as'
25
+ opts.separator ' newline separated key=value pairs in \'~/.wistia.conf\'.'
26
+ opts.separator ''
27
+ opts.separator ' Options provided in this manner will be overridden if'
28
+ opts.separator ' specified on the command line.'
29
+ opts.separator ''
30
+
31
+ opts.separator 'General options:'
32
+
33
+ opts.on('-q', '--quiet', 'Silence output') do |q|
35
34
  options[:quiet] = q
36
35
  end
37
36
 
38
- opts.on("-j", "--json", "Output JSON") do |j|
37
+ opts.on('-j', '--json', 'Output JSON') do |j|
39
38
  options[:json] = j
40
39
  end
41
40
 
42
- opts.separator ""
43
- opts.separator "Required options:"
41
+ opts.separator ''
42
+ opts.separator 'Required options:'
44
43
 
45
- opts.on("-k", "--api-password API_PASSWORD", "The Wistia API password.") do |api_password|
44
+ opts.on('-k', '--api-password API_PASSWORD', 'The Wistia API password.') do |api_password|
46
45
  options[:api_password] = api_password
47
46
  end
48
47
 
49
- opts.on("-f", "--media-file MEDIA_FILE", "The local path of the media file to be", "uploaded.") do |media_file|
48
+ opts.on('-f', '--media-file MEDIA_FILE', 'The local/remote path of the media file', 'to be uploaded/imported.') do |media_file|
50
49
  options[:media_file] = media_file
51
50
  end
52
51
 
53
- opts.separator ""
54
- opts.separator "Optional:"
52
+ opts.separator ''
53
+ opts.separator 'Optional:'
55
54
 
56
- opts.on("-p", "--project-id PROJECT_ID", "The hashed id of the Wistia project to", "upload to.") do |project_id|
55
+ opts.on('-p', '--project-id PROJECT_ID', 'The hashed id of the Wistia project to', 'upload to.') do |project_id|
57
56
  options[:project_id] = project_id
58
57
  end
59
58
 
60
- opts.on("-n", "--media-name MEDIA_NAME", "Set the display name of the media in the", "Wistia project. If unspecified, this will", "default to the filename.") do |media_name|
59
+ opts.on('-n', '--media-name MEDIA_NAME', 'Set the display name of the media in the', 'Wistia project. If unspecified, this will', 'default to the filename.') do |media_name|
61
60
  options[:media_name] = media_name
62
61
  end
63
62
 
64
- opts.on("-c", "--contact-id CONTACT_ID", "The numeric id of the Wistia contact.", "If this is unspecified, the account will", "be inferred from the project_id.") do |contact_id|
63
+ opts.on('-c', '--contact-id CONTACT_ID', 'The numeric id of the Wistia contact.', 'If this is unspecified, the account will', 'be inferred from the project_id.') do |contact_id|
65
64
  options[:contact_id] = contact_id
66
65
  end
67
66
 
68
- opts.on_tail("-h", "--help", "Show this message") do
67
+ opts.on_tail('-h', '--help', 'Show this message') do
69
68
  puts opts
70
69
  exit
71
70
  end
@@ -80,9 +79,9 @@ end
80
79
 
81
80
  # Load defaults from ~/.wistia.conf, if present. Only valid loadable options
82
81
  # not already specified on the CLI will be initialized in this manner.
83
- if File.exists? File.expand_path("~/.wistia.conf")
84
- puts "Found ~/.wistia.conf, loading defaults!" if !options[:quiet]
85
- File.open(File.expand_path("~/.wistia.conf")) do |conf|
82
+ if File.exists? File.expand_path('~/.wistia.conf')
83
+ puts 'Found ~/.wistia.conf, loading defaults!' if !options[:quiet]
84
+ File.open(File.expand_path('~/.wistia.conf')) do |conf|
86
85
  conf.readlines.reject{|l|l.strip.start_with?('#')}.each do |line|
87
86
  k, v = line.split("=").map { |i| i.strip }
88
87
  next if (k.empty? || v.empty?)
@@ -95,14 +94,14 @@ end
95
94
 
96
95
  # Ensure that we have all required parameters.
97
96
  unless options.keys.to_set.superset?(required)
98
- puts "ERROR: You're missing some required options! Please specify:"
99
- puts ""
97
+ puts 'ERROR: You\'re missing some required options! Please specify:'
98
+ puts ''
100
99
  missing = required - options.keys.to_set
101
100
  missing.to_a.sort.each do |m|
102
101
  puts " --#{m.to_s.gsub(/_/,"-")}"
103
102
  end
104
- puts ""
105
- puts "Use '-h' to see the help documentation."
103
+ puts ''
104
+ puts 'Use \'-h\' to see the help documentation.'
106
105
  exit
107
106
  end
108
107
 
@@ -119,48 +118,52 @@ begin
119
118
  paths = [options[:media_file]]
120
119
  end
121
120
 
122
- paths.each do |local_media|
123
-
124
- puts "Uploading '#{local_media}'..." if !options[:quiet]
125
- # Find the proper expansion of the path.
126
- unless File.exists?(local_media) && !File.directory?(local_media)
127
- puts "Detected possible shell glob. Computing paths."
128
- paths = Dir.glob local_media
129
- exit
130
- end
131
-
132
- unless File.exists? local_media
133
- puts "ERROR: The file '#{local_media}' doesn't seem to exist."
134
- exit
121
+ paths.each do |original_media_path|
122
+ if File.exists?(original_media_path)
123
+ puts "Uploading local file: '#{original_media_path}'..." if !options[:quiet]
124
+ original_media_is_local = true
125
+ else
126
+ if original_media_path =~ /^(#{(WistiaUploader::SUPPORTED_SCHEMES.join('|'))}):\/\//
127
+ puts "Importing remote file: '#{original_media_path}'..." if !options[:quiet]
128
+ original_media_is_local = false
129
+ else
130
+ puts "Local file #{original_media_path} does not exist."
131
+ exit
132
+ end
135
133
  end
136
134
 
137
135
  thread = WistiaUploader.upload_media(
138
136
  options[:api_password], options[:project_id],
139
- local_media, options[:media_name], options[:contact_id])
137
+ original_media_path, options[:media_name], options[:contact_id])
140
138
 
141
139
  $stdout.sync
142
140
 
143
- phases = ["-", "\\", "|", "/"]
144
- phase = 0
145
- while (!thread[:upload_status])
146
- if thread[:progress] == nil
147
- comp = 0
148
- else
149
- comp = (thread[:progress] * 50).round
150
- end
151
- if thread[:samples] && (thread[:samples].length > 0)
152
- bps = (thread[:samples].inject{|sum,x| sum + x[0] }) / thread[:samples].length
153
- else
154
- bps = 0.0
141
+ if original_media_is_local
142
+ phases = ["-", "\\", "|", "/"]
143
+ phase = 0
144
+ while (thread[:upload_status].nil?)
145
+ if thread[:progress] == nil
146
+ comp = 0
147
+ else
148
+ comp = (thread[:progress] * 50).round
149
+ end
150
+ if thread[:samples] && (thread[:samples].length > 0)
151
+ bps = (thread[:samples].inject{|sum,x| sum + x[0] }) / thread[:samples].length
152
+ else
153
+ bps = 0.0
154
+ end
155
+ unless options[:quiet]
156
+ $stdout.write("\r")
157
+ $stdout.write(" #{'%3d' % (2*comp)}% [#{'=' * comp}>#{' ' * (50 - comp)}] #{phases[phase]} #{thread[:last_pos]} bytes")
158
+ $stdout.flush if RUBY_VERSION =~ /^1.8/
159
+ end
160
+ phase = (phase + 1) % 4
161
+ sleep 0.2
155
162
  end
156
- unless options[:quiet]
157
- $stdout.write("\r")
158
- $stdout.write(" #{'%3d' % (2*comp)}% [#{'=' * comp}>#{' ' * (50 - comp)}] #{phases[phase]} #{thread[:last_pos]} bytes")
159
- end
160
- phase = (phase + 1) % 4
161
- sleep 0.2
163
+ $stdout.write("\n") unless options[:quiet]
164
+ else
165
+ thread.join
162
166
  end
163
- $stdout.write("\n") unless options[:quiet]
164
167
 
165
168
  if thread[:upload_status] == :success
166
169
  data = JSON.parse(thread[:body])
@@ -170,11 +173,11 @@ begin
170
173
  puts data if options[:json]
171
174
  else
172
175
  # Error state.
173
- puts "An error occurred during upload!" unless options[:quiet]
176
+ puts 'An error occurred during upload!' unless options[:quiet]
174
177
  exit 1
175
178
  end
176
179
  end
177
180
  rescue
178
181
  puts "ERROR! Upload failed. Msg: #{$!}"
179
- puts "\t" + $!.backtrace.join("\n\t")
182
+ puts "\t#{$!.backtrace.join("\n\t")}"
180
183
  end
@@ -1,8 +1,12 @@
1
+ # Setup environment via bundler
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+ require 'json'
1
6
  require 'net/http'
7
+ require 'net/https' if RUBY_VERSION =~ /^1.8/
2
8
  require 'net/http/post/multipart'
3
9
 
4
- UPLOAD_URL = "https://upload.wistia.com/"
5
-
6
10
  # Hacktacular mostly-accurate patch for upload monitoring.
7
11
  class WFile < File
8
12
  def set_thread(thread)
@@ -10,8 +14,13 @@ class WFile < File
10
14
  end
11
15
  def read(*args)
12
16
  if @thread
13
- @thread[:progress] = ((1.0 * self.pos()) / self.size()).round(2)
14
- @thread[:last_pos] = self.pos()
17
+ rounded_file_size = if RUBY_VERSION =~ /^1.8/
18
+ (File.size(self.path) * 100).round / 100.0
19
+ else
20
+ self.size.round(2)
21
+ end
22
+ @thread[:progress] = 1.0 * self.pos / rounded_file_size
23
+ @thread[:last_pos] = self.pos
15
24
  end
16
25
  super(*args)
17
26
  end
@@ -19,54 +28,97 @@ end
19
28
 
20
29
 
21
30
  class WistiaUploader
31
+ UPLOAD_URL = 'https://upload.wistia.com/'
32
+ SUPPORTED_SCHEMES = %w(ftp http https)
22
33
 
23
34
  def self.upload_media(api_pass, project, file, name=nil, contact=nil)
24
35
  params = { :api_password => api_pass, :project_id => project }
25
36
  params[:contact_id] = contact if contact
26
37
  params[:name] = name if name
27
38
 
28
- return self.post_file_to_wistia('', params, file)
39
+ self.post_file_to_wistia('', params, file)
29
40
  end
30
-
31
- def self.post_file_to_wistia(path, data, file, timeout=nil)
32
- Thread.new do
33
- thread = Thread.current
34
- thread[:progress] = 0.0
35
- thread[:last_pos] = 0
36
41
 
42
+
43
+ def self.post_file_to_wistia(path, data, file, timeout=nil)
44
+ data.reject! { |k,v| v.nil? || v.to_s.empty? } # Sanitize the params hash.
45
+ thread = Thread.new do
46
+ Thread.current[:progress] = 0.0
47
+ Thread.current[:last_pos] = 0
37
48
  uri = URI(UPLOAD_URL + path)
49
+ http_client = self.get_http_client(uri, timeout)
50
+ response = self.perform_http_post(file, data, uri, http_client)
51
+ self.set_thread_status_from_response(response)
52
+ end
53
+ thread
54
+ end
38
55
 
39
- # Sanitize the params hash.
40
- data.reject! { |k,v| (v == nil) || v.empty? }
41
56
 
42
- http = Net::HTTP.new(uri.host, uri.port)
43
- http.use_ssl = true if (uri.scheme == 'https')
57
+ private
44
58
 
45
- # Set the connection timeouts, if specified
46
- if timeout
47
- http.ssl_timeout = 10
48
- http.open_timeout = 10
49
- http.read_timeout = 10
59
+ def self.perform_http_post(file, data, uri, http_client)
60
+ if self.file_is_local?(file)
61
+ self.upload_local_file(file, data, uri, http_client)
62
+ else
63
+ self.import_remote_file(file, data, uri, http_client)
64
+ end
65
+ end
66
+
67
+
68
+ def self.get_http_client(uri, timeout)
69
+ http = Net::HTTP.new(uri.host, uri.port)
70
+ if uri.scheme == 'https'
71
+ if RUBY_VERSION =~ /^1.8/
72
+ http.cert_store = OpenSSL::X509::Store.new.set_default_paths
50
73
  end
74
+ http.use_ssl = true
75
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
76
+ end
77
+
78
+ # Set the connection timeouts, if specified
79
+ if timeout
80
+ http.ssl_timeout = 10
81
+ http.open_timeout = 10
82
+ http.read_timeout = 10
83
+ end
51
84
 
52
- media = WFile.open(file)
53
- media.set_thread(thread)
85
+ http
86
+ end
54
87
 
55
- req = Net::HTTP::Post::Multipart.new uri.request_uri, data.merge({
56
- 'file' => UploadIO.new(media, 'application/octet-stream', File.basename(file))
57
- })
58
- res = http.request(req)
59
- media.close
60
88
 
61
- thread[:code] = res.code
62
- thread[:body] = res.body
89
+ def self.upload_local_file(file, data, uri, http)
90
+ media = WFile.open(file)
91
+ media.set_thread(Thread.current)
92
+ req = Net::HTTP::Post::Multipart.new uri.request_uri, data.merge({
93
+ 'file' => UploadIO.new(media, 'application/octet-stream', File.basename(file))
94
+ })
95
+ response = http.request(req)
96
+ media.close
97
+ response
98
+ end
63
99
 
64
- if res.code == '200'
65
- thread[:upload_status] = :success
66
- else
67
- thread[:upload_status] = :failed
68
- end
69
- end
100
+
101
+ def self.import_remote_file(file, data, uri, http)
102
+ req = Net::HTTP::Post.new(uri.request_uri)
103
+ req.set_form_data(data.merge(:url => file))
104
+ http.request(req)
105
+ end
106
+
107
+
108
+ def self.file_is_local?(file_path)
109
+ !self.file_is_remote?(file_path)
110
+ end
111
+
112
+
113
+ def self.file_is_remote?(file_path)
114
+ file_path =~ /^(#{(SUPPORTED_SCHEMES.join('|'))}):\/\//
70
115
  end
71
116
 
117
+
118
+ def self.set_thread_status_from_response(response)
119
+ Thread.current[:code] = response.code
120
+ Thread.current[:body] = response.body
121
+
122
+ Thread.current[:upload_status] = (response.code == '200') ? :success : :failed
123
+ end
72
124
  end
@@ -0,0 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'wistia-uploader.rb')
2
+
3
+ RSpec.configure do |config|
4
+ config.color_enabled = true
5
+ end
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+
3
+ describe WistiaUploader do
4
+ describe 'public class methods' do
5
+ describe '#upload_media' do
6
+ it 'posts the specified file to Wistia when given optional params' do
7
+ password = mock('password')
8
+ project = mock('project')
9
+ file = mock('file')
10
+ name = mock('name')
11
+ contact = mock('contact')
12
+
13
+ WistiaUploader.should_receive(:post_file_to_wistia).with('',
14
+ hash_including({
15
+ api_password: password,
16
+ project_id: project,
17
+ contact_id: contact,
18
+ name: name,
19
+ }), file
20
+ )
21
+ WistiaUploader.upload_media(password, project, file, name, contact)
22
+ end
23
+ it 'posts the specified file to Wistia when given only required params' do
24
+ password = mock('password')
25
+ project = mock('project')
26
+ file = mock('file')
27
+
28
+ WistiaUploader.should_receive(:post_file_to_wistia).with('',
29
+ hash_including({
30
+ api_password: password,
31
+ project_id: project,
32
+ }), file
33
+ )
34
+ WistiaUploader.upload_media(password, project, file)
35
+ end
36
+ end
37
+ describe '#post_file_to_wistia' do
38
+ describe 'given a local file' do
39
+ it 'uploads the file' do
40
+ file = mock('file')
41
+ file.stub :set_thread
42
+ WFile.should_receive(:open).with('/var/tmp/dummy.mov').and_return(file)
43
+
44
+ upload_io = mock('upload io')
45
+ UploadIO.should_receive(:new).and_return(upload_io)
46
+
47
+ request = mock('request')
48
+ Net::HTTP::Post::Multipart.should_receive(:new).and_return(request)
49
+
50
+ http = mock('net_http')
51
+ Net::HTTP.should_receive(:new).and_return(http)
52
+
53
+ http.stub :use_ssl=
54
+ http.stub :verify_mode=
55
+
56
+ response = mock('response')
57
+ http.should_receive(:request).and_return(response)
58
+ file.stub :close
59
+
60
+ response.should_receive(:code).exactly(2).and_return('200')
61
+ response.should_receive(:body).and_return('OK')
62
+
63
+ thread = WistiaUploader.post_file_to_wistia('', {api_password: 'pass', project_id: 5}, '/var/tmp/dummy.mov')
64
+ thread.join
65
+ end
66
+ end
67
+ describe 'for remote files' do
68
+ before do
69
+ request = mock('request')
70
+ Net::HTTP::Post.should_receive(:new).and_return(request)
71
+ request.stub :set_form_data
72
+
73
+ http = mock('net_http')
74
+ Net::HTTP.should_receive(:new).and_return(http)
75
+
76
+ http.stub :use_ssl=
77
+ http.stub :verify_mode=
78
+
79
+ response = mock('response')
80
+ http.should_receive(:request).and_return(response)
81
+
82
+ response.should_receive(:code).exactly(2).and_return('200')
83
+ response.should_receive(:body).and_return('OK')
84
+ end
85
+ it 'web file: imports the file' do
86
+ thread = WistiaUploader.post_file_to_wistia('', {api_password: 'pass', project_id: 5}, 'http://fakedomain.cc/dummy.mov')
87
+ thread.join
88
+ end
89
+ it 'ssl web file: imports the file' do
90
+ thread = WistiaUploader.post_file_to_wistia('', {api_password: 'pass', project_id: 5}, 'https://fakedomain.cc/dummy.mov')
91
+ thread.join
92
+ end
93
+ it 'ftp file: imports the file' do
94
+ thread = WistiaUploader.post_file_to_wistia('', {api_password: 'pass', project_id: 5}, 'ftp://fakedomain.cc/dummy.mov')
95
+ thread.join
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ describe 'private class methods' do
102
+ describe '#perform_http_post' do
103
+ describe 'with local file' do
104
+ it 'performs upload' do
105
+ WistiaUploader.stub(:file_is_local?).and_return(true)
106
+ WistiaUploader.should_receive(:upload_local_file).exactly(1)
107
+ WistiaUploader.send :perform_http_post, nil, nil, nil, nil
108
+ end
109
+ end
110
+ describe 'with remote file' do
111
+ it 'performs import' do
112
+ WistiaUploader.stub(:file_is_local?).and_return(false)
113
+ WistiaUploader.should_receive(:import_remote_file).exactly(1)
114
+ WistiaUploader.send :perform_http_post, nil, nil, nil, nil
115
+ end
116
+ end
117
+ end
118
+ describe '#file_is_local? and #file_is_remote?' do
119
+ it 'works for http (non-ssl) files' do
120
+ file_path = 'http://example.com/movie.mov'
121
+ WistiaUploader.send(:file_is_local?, file_path).should be_false
122
+ WistiaUploader.send(:file_is_remote?, file_path).should be_true
123
+ end
124
+ it 'works for http (ssl) files' do
125
+ file_path = 'https://example.com/movie.mov'
126
+ WistiaUploader.send(:file_is_local?, file_path).should be_false
127
+ WistiaUploader.send(:file_is_remote?, file_path).should be_true
128
+ end
129
+ it 'works for ftp files' do
130
+ file_path = 'ftp://example.com/movie.mov'
131
+ WistiaUploader.send(:file_is_local?, file_path).should be_false
132
+ WistiaUploader.send(:file_is_remote?, file_path).should be_true
133
+ end
134
+ it 'works for local files' do
135
+ file_path = '/var/www/movie.mov'
136
+ WistiaUploader.send(:file_is_local?, file_path).should be_true
137
+ WistiaUploader.send(:file_is_remote?, file_path).should be_false
138
+ end
139
+ end
140
+ end
141
+ end
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wistia-uploader"
8
- s.version = "0.1.4"
8
+ s.version = "1.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Jason Lawrence"]
12
- s.date = "2012-12-06"
11
+ s.authors = ["Robby Grossman", "Jason Lawrence", "Brendan Schwartz"]
12
+ s.date = "2013-08-19"
13
13
  s.description = "A simple CLI uploader for Wistia users."
14
- s.email = "jason@wistia.com"
14
+ s.email = "dev@wistia.com"
15
15
  s.executables = ["wistia-uploader"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  ]
20
20
  s.files = [
21
21
  ".document",
22
+ ".rvmrc",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
@@ -27,14 +28,14 @@ Gem::Specification.new do |s|
27
28
  "VERSION",
28
29
  "bin/wistia-uploader",
29
30
  "lib/wistia-uploader.rb",
30
- "test/helper.rb",
31
- "test/test_wistia-uploader.rb",
31
+ "spec/spec_helper.rb",
32
+ "spec/wistia-uploader_spec.rb",
32
33
  "wistia-uploader.gemspec"
33
34
  ]
34
35
  s.homepage = "http://github.com/wistia/wistia-uploader"
35
36
  s.licenses = ["MIT"]
36
37
  s.require_paths = ["lib"]
37
- s.rubygems_version = "1.8.24"
38
+ s.rubygems_version = "1.8.25"
38
39
  s.summary = "A simple CLI uploader for Wistia users."
39
40
 
40
41
  if s.respond_to? :specification_version then
@@ -45,14 +46,12 @@ Gem::Specification.new do |s|
45
46
  s.add_runtime_dependency(%q<multipart-post>, [">= 1.1.5"])
46
47
  s.add_development_dependency(%q<shoulda>, [">= 0"])
47
48
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
48
- s.add_development_dependency(%q<bundler>, ["~> 1.1.4"])
49
49
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
50
50
  else
51
51
  s.add_dependency(%q<json>, [">= 0"])
52
52
  s.add_dependency(%q<multipart-post>, [">= 1.1.5"])
53
53
  s.add_dependency(%q<shoulda>, [">= 0"])
54
54
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
55
- s.add_dependency(%q<bundler>, ["~> 1.1.4"])
56
55
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
57
56
  end
58
57
  else
@@ -60,7 +59,6 @@ Gem::Specification.new do |s|
60
59
  s.add_dependency(%q<multipart-post>, [">= 1.1.5"])
61
60
  s.add_dependency(%q<shoulda>, [">= 0"])
62
61
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
63
- s.add_dependency(%q<bundler>, ["~> 1.1.4"])
64
62
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
65
63
  end
66
64
  end
metadata CHANGED
@@ -1,15 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wistia-uploader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
+ - Robby Grossman
8
9
  - Jason Lawrence
10
+ - Brendan Schwartz
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
- date: 2012-12-06 00:00:00.000000000 Z
14
+ date: 2013-08-19 00:00:00.000000000 Z
13
15
  dependencies:
14
16
  - !ruby/object:Gem::Dependency
15
17
  name: json
@@ -75,22 +77,6 @@ dependencies:
75
77
  - - ~>
76
78
  - !ruby/object:Gem::Version
77
79
  version: '3.12'
78
- - !ruby/object:Gem::Dependency
79
- name: bundler
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 1.1.4
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: 1.1.4
94
80
  - !ruby/object:Gem::Dependency
95
81
  name: jeweler
96
82
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +94,7 @@ dependencies:
108
94
  - !ruby/object:Gem::Version
109
95
  version: 1.8.4
110
96
  description: A simple CLI uploader for Wistia users.
111
- email: jason@wistia.com
97
+ email: dev@wistia.com
112
98
  executables:
113
99
  - wistia-uploader
114
100
  extensions: []
@@ -117,6 +103,7 @@ extra_rdoc_files:
117
103
  - README.md
118
104
  files:
119
105
  - .document
106
+ - .rvmrc
120
107
  - Gemfile
121
108
  - Gemfile.lock
122
109
  - LICENSE.txt
@@ -125,8 +112,8 @@ files:
125
112
  - VERSION
126
113
  - bin/wistia-uploader
127
114
  - lib/wistia-uploader.rb
128
- - test/helper.rb
129
- - test/test_wistia-uploader.rb
115
+ - spec/spec_helper.rb
116
+ - spec/wistia-uploader_spec.rb
130
117
  - wistia-uploader.gemspec
131
118
  homepage: http://github.com/wistia/wistia-uploader
132
119
  licenses:
@@ -143,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
130
  version: '0'
144
131
  segments:
145
132
  - 0
146
- hash: 3095705562316825160
133
+ hash: 4405734978225036635
147
134
  required_rubygems_version: !ruby/object:Gem::Requirement
148
135
  none: false
149
136
  requirements:
@@ -152,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
139
  version: '0'
153
140
  requirements: []
154
141
  rubyforge_project:
155
- rubygems_version: 1.8.24
142
+ rubygems_version: 1.8.25
156
143
  signing_key:
157
144
  specification_version: 3
158
145
  summary: A simple CLI uploader for Wistia users.
data/test/helper.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'wistia-uploader'
16
-
17
- class Test::Unit::TestCase
18
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestWistiaUploader < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end