swift_file 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +12 -8
- data/bin/swift_file +32 -13
- data/lib/swift_file.rb +0 -1
- data/lib/swift_file/swift_upload.rb +56 -29
- data/lib/swift_file/version.rb +1 -1
- data/spec/swift_file_spec.rb +4 -3
- data/swift_file.gemspec +2 -1
- metadata +20 -4
data/README.md
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
# SwiftFile
|
2
2
|
|
3
|
-
|
3
|
+
This gem provides an interface for uploading files to the [SwiftFile](https://www.swiftfile.net) service. There is support for uploading via the command line via the supplied executable `swift_file` as well as a basic API for adding support to your own classes.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
7
|
+
Most likely you will want to simply install the gem:
|
8
|
+
|
9
|
+
$ gem install swift_file
|
10
|
+
|
11
|
+
Or to use this in your projects, add this line to your application's Gemfile:
|
8
12
|
|
9
13
|
gem 'swift_file'
|
10
14
|
|
@@ -12,13 +16,13 @@ And then execute:
|
|
12
16
|
|
13
17
|
$ bundle
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
$ gem install swift_file
|
18
|
-
|
19
|
-
## Usage
|
19
|
+
## Command-line Usage
|
20
|
+
`swift_file -h`
|
20
21
|
|
21
|
-
|
22
|
+
Usage: swift_file [options] file1 file2 ...
|
23
|
+
-g, --group GROUP Add this file to a group
|
24
|
+
-e, --expires EXPIRY Set the length of time until this file expires [1m 1w 1d 1h]
|
25
|
+
-p[PASSWORD] Supply a password to encrypt the file.
|
22
26
|
|
23
27
|
## Contributing
|
24
28
|
|
data/bin/swift_file
CHANGED
@@ -1,38 +1,57 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "optparse"
|
3
|
+
require "highline/import"
|
3
4
|
require "swift_file"
|
4
|
-
require "pp"
|
5
5
|
|
6
6
|
options = {}
|
7
7
|
|
8
8
|
optparse = OptionParser.new do|opts|
|
9
|
-
opts.banner = "Usage: swift_file [options]
|
9
|
+
opts.banner = "Usage: swift_file [options] file1 file2 ..."
|
10
10
|
|
11
11
|
options[:group] = nil
|
12
12
|
opts.on( '-g', '--group GROUP', 'Add this file to a group' ) do |group|
|
13
13
|
options[:group] = group
|
14
14
|
end
|
15
15
|
|
16
|
+
options[:expiry] = nil
|
17
|
+
opts.on( '-e', '--expires EXPIRY', "Set the length of time until this file expires [#{SwiftFile::SwiftUpload::SWIFTFILE_EXPIRY_OPTIONS.join(' ')}]" ) do |expiry|
|
18
|
+
options[:expiry] = expiry
|
19
|
+
end
|
20
|
+
|
16
21
|
options[:password] = nil
|
17
|
-
opts.on( '-p', '
|
18
|
-
options[:password] =
|
22
|
+
opts.on( '-p[PASSWORD]', 'Supply a password to encrypt the file.' ) do |password|
|
23
|
+
options[:password] = password
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
22
|
-
|
27
|
+
# Check if user has (correctly) supplied the -p flag without the password
|
28
|
+
password_opt_supplied = ARGV.include?('-p')
|
29
|
+
|
30
|
+
begin
|
31
|
+
optparse.parse!
|
32
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument => e
|
33
|
+
puts "ERROR: #{e}"
|
34
|
+
end
|
35
|
+
|
36
|
+
if options[:password] == nil && password_opt_supplied
|
37
|
+
# FIXME: highline is not behaving on my installation, and
|
38
|
+
# disabling echo causes an infinte loop of errors
|
39
|
+
options[:password] = ask("Enter a password: ") # { |q| q.echo = false }
|
40
|
+
end
|
23
41
|
|
24
42
|
begin
|
43
|
+
if ARGV.empty?
|
44
|
+
raise "no files supplied"
|
45
|
+
end
|
25
46
|
|
26
|
-
|
47
|
+
sf = SwiftFile::SwiftUpload.new(options)
|
27
48
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
:password => options[:password]
|
32
|
-
})
|
49
|
+
ARGV.each do |filepath|
|
50
|
+
sf.add_file File.new(filepath)
|
51
|
+
end
|
33
52
|
|
34
|
-
sf.
|
53
|
+
sf.transfer
|
35
54
|
puts sf.url
|
36
|
-
rescue
|
55
|
+
rescue => e
|
37
56
|
puts "ERROR: #{e}"
|
38
57
|
end
|
data/lib/swift_file.rb
CHANGED
@@ -2,56 +2,83 @@ require 'curb'
|
|
2
2
|
|
3
3
|
module SwiftFile
|
4
4
|
class SwiftUpload
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
SWIFTFILE_HOST = 'https://www.swiftfile.net'
|
6
|
+
SWIFTFILE_ENDPOINT = ''
|
7
|
+
SWIFTFILE_COOKIE = '/tmp/swift_file.cookie'
|
8
|
+
SWIFTFILE_EXPIRY_OPTIONS = %w(1m 1w 1d 1h)
|
9
|
+
SWIFTFILE_EXPIRY_DEFAULT = '1d'
|
8
10
|
|
9
|
-
attr_accessor :
|
11
|
+
attr_accessor :files, :group, :expiry, :url
|
10
12
|
|
11
13
|
def initialize(params)
|
12
|
-
|
13
|
-
|
14
|
+
@files = params[:files] || []
|
15
|
+
@group = params[:group] || ''
|
16
|
+
@password = params[:password] || ''
|
17
|
+
|
18
|
+
if params[:expiry] && SWIFTFILE_EXPIRY_OPTIONS.include?(params[:expiry])
|
19
|
+
@expiry = params[:expiry]
|
14
20
|
else
|
15
|
-
|
21
|
+
@expiry = SWIFTFILE_EXPIRY_DEFAULT
|
16
22
|
end
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
@
|
25
|
+
def add_file(file)
|
26
|
+
@files << file unless @files.include?(file)
|
20
27
|
end
|
21
28
|
|
29
|
+
def transfer
|
30
|
+
if @files.empty?
|
31
|
+
raise 'No files supplied for uploed'
|
32
|
+
end
|
33
|
+
|
34
|
+
# start a session by requesting the url via GET
|
35
|
+
begin
|
36
|
+
client.perform
|
37
|
+
rescue Curl::Err => e
|
38
|
+
raise "Connection failed: #{e}"
|
39
|
+
end
|
22
40
|
|
23
|
-
|
24
|
-
|
25
|
-
|
41
|
+
# post the file and capture the resulting url
|
42
|
+
begin
|
43
|
+
client.multipart_form_post = true
|
44
|
+
client.http_post(form)
|
26
45
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
Curl::PostField.content('file_group_expiration', '1m')
|
34
|
-
)
|
46
|
+
@url = client.last_effective_url
|
47
|
+
rescue Curl::Err => e
|
48
|
+
raise "Upload failed: #{e}"
|
49
|
+
ensure
|
50
|
+
client.close
|
51
|
+
end
|
35
52
|
|
36
|
-
@url = client.last_effective_url
|
37
53
|
@url
|
38
54
|
end
|
39
55
|
|
40
|
-
##
|
41
|
-
private
|
42
56
|
|
57
|
+
private
|
43
58
|
def client
|
44
59
|
if !@client
|
45
|
-
url = "#{
|
60
|
+
url = "#{SWIFTFILE_HOST}/#{SWIFTFILE_ENDPOINT}"
|
46
61
|
@client = Curl::Easy.new(url) do |curl|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
62
|
+
# curl.verbose= true
|
63
|
+
curl.follow_location = true
|
64
|
+
curl.enable_cookies = true
|
65
|
+
curl.cookiejar = SWIFTFILE_COOKIE
|
66
|
+
curl.cookiefile = SWIFTFILE_COOKIE
|
51
67
|
end
|
52
68
|
end
|
53
|
-
|
54
69
|
@client
|
55
70
|
end
|
71
|
+
|
72
|
+
def form
|
73
|
+
fields = []
|
74
|
+
@files.each_with_index do |file, idx|
|
75
|
+
fields << Curl::PostField.file("file#{idx+1}", "#{file.path}")
|
76
|
+
end
|
77
|
+
|
78
|
+
fields << Curl::PostField.content('file_group[name]', @group)
|
79
|
+
fields << Curl::PostField.content('file_group[password]', @password)
|
80
|
+
fields << Curl::PostField.content('file_group_expiration', @expiry)
|
81
|
+
fields
|
82
|
+
end
|
56
83
|
end
|
57
84
|
end
|
data/lib/swift_file/version.rb
CHANGED
data/spec/swift_file_spec.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe SwiftFile do
|
4
4
|
it "should be able to upload test file" do
|
5
5
|
f = File.new(File.dirname(__FILE__) + '/test_file.txt', 'rb')
|
6
|
-
|
6
|
+
files = Array[f]
|
7
|
+
sf = SwiftFile::SwiftUpload.new({:files => files})
|
7
8
|
|
8
|
-
sf.
|
9
|
+
sf.transfer
|
9
10
|
sf.url.should =~ /^https/
|
10
11
|
end
|
11
12
|
end
|
data/swift_file.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swift_file
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: highline
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.6'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.6'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: curb
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +50,7 @@ dependencies:
|
|
34
50
|
requirements:
|
35
51
|
- - ! '>='
|
36
52
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0
|
53
|
+
version: '0'
|
38
54
|
type: :runtime
|
39
55
|
prerelease: false
|
40
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +58,7 @@ dependencies:
|
|
42
58
|
requirements:
|
43
59
|
- - ! '>='
|
44
60
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0
|
61
|
+
version: '0'
|
46
62
|
description: Upload a file to the SwiftFile service
|
47
63
|
email:
|
48
64
|
- mdeltito@contextllc.com
|