cloudapp 2.0.0.beta.4 → 2.0.0.beta.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +12 -19
- data/README.md +60 -6
- data/Rakefile +1 -19
- data/bin/cloudapp +48 -0
- data/cloudapp.gemspec +11 -42
- data/lib/cloudapp/authorized.rb +14 -0
- data/lib/cloudapp/collection_json.rb +86 -3
- data/lib/cloudapp/credentials.rb +115 -0
- data/lib/cloudapp/service.rb +43 -146
- data/lib/cloudapp.rb +1 -3
- data/man/cloudapp.1 +100 -0
- data/man/cloudapp.1.html +157 -0
- data/man/cloudapp.1.ronn +56 -0
- metadata +24 -69
- data/CHANGELOG.md +0 -34
- data/lib/cloudapp/authorized_representation.rb +0 -17
- data/lib/cloudapp/collection_json/item.rb +0 -20
- data/lib/cloudapp/collection_json/representation.rb +0 -74
- data/lib/cloudapp/collection_json/template.rb +0 -17
- data/lib/cloudapp/collection_json/tint.rb +0 -11
- data/lib/cloudapp/drop.rb +0 -37
- data/lib/cloudapp/drop_collection.rb +0 -37
- data/spec/cassettes/account_token.yml +0 -88
- data/spec/cassettes/create_bookmark.yml +0 -132
- data/spec/cassettes/create_bookmark_with_name.yml +0 -133
- data/spec/cassettes/create_bookmark_with_privacy.yml +0 -133
- data/spec/cassettes/list_drops.yml +0 -87
- data/spec/cassettes/list_drops_with_bad_token.yml +0 -45
- data/spec/cassettes/list_drops_with_filter.yml +0 -129
- data/spec/cassettes/list_drops_with_limit.yml +0 -129
- data/spec/cassettes/purge_drops.yml +0 -466
- data/spec/cassettes/setup_drops.yml +0 -620
- data/spec/cassettes/token_for_account.yml +0 -88
- data/spec/cassettes/token_for_account_with_bad_credentials.yml +0 -86
- data/spec/cassettes/upload_file.yml +0 -276
- data/spec/cassettes/upload_file_with_name.yml +0 -278
- data/spec/cassettes/upload_file_with_privacy.yml +0 -277
- data/spec/cassettes/view_drop.yml +0 -45
- data/spec/cloudapp/authorized_representation_spec.rb +0 -32
- data/spec/cloudapp/collection_json/item_spec.rb +0 -45
- data/spec/cloudapp/collection_json/representation_spec.rb +0 -118
- data/spec/cloudapp/collection_json/template_spec.rb +0 -53
- data/spec/cloudapp/drop_collection_spec.rb +0 -127
- data/spec/cloudapp/drop_spec.rb +0 -142
- data/spec/cloudapp/service_spec.rb +0 -335
- data/spec/helper.rb +0 -8
- data/spec/integration_spec.rb +0 -68
- data/spec/support/files/favicon.ico +0 -0
- data/spec/support/stub_class_or_module.rb +0 -22
- data/spec/support/vcr.rb +0 -24
data/lib/cloudapp/service.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
require 'leadlight'
|
2
|
-
require '
|
3
|
-
require 'cloudapp/authorized_representation'
|
2
|
+
require 'cloudapp/authorized'
|
4
3
|
require 'cloudapp/collection_json'
|
5
|
-
require '
|
6
|
-
require 'cloudapp/drop'
|
7
|
-
require 'cloudapp/drop_collection'
|
4
|
+
require 'uri'
|
8
5
|
|
9
6
|
module CloudApp
|
10
7
|
class Service
|
11
|
-
Leadlight.build_service
|
12
|
-
url '
|
13
|
-
tints << CollectionJson::Tint
|
14
|
-
tints <<
|
8
|
+
Leadlight.build_service self do
|
9
|
+
url 'http://api.getcloudapp.com'
|
10
|
+
tints << CloudApp::CollectionJson::Tint
|
11
|
+
tints << CloudApp::Authorized::Tint
|
15
12
|
|
16
13
|
build_connection do |c|
|
17
14
|
c.adapter :typhoeus
|
@@ -20,173 +17,73 @@ module CloudApp
|
|
20
17
|
|
21
18
|
def initialize
|
22
19
|
super
|
23
|
-
# logger.level = Logger::INFO
|
24
20
|
logger.level = Logger::WARN
|
25
21
|
end
|
26
22
|
|
27
|
-
def token
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def self.using_token(token)
|
32
|
-
new.tap do |service|
|
33
|
-
service.token = token
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.token_for_account(email, password)
|
38
|
-
representation = new.account_token email, password
|
39
|
-
return if representation.unauthorized?
|
40
|
-
|
41
|
-
representation.items.first.data['token']
|
42
|
-
end
|
43
|
-
|
44
|
-
def account_token(email, password)
|
45
|
-
authenticate_response = root
|
46
|
-
data = authenticate_response.template.
|
47
|
-
fill('email' => email, 'password' => password)
|
48
|
-
|
49
|
-
post(authenticate_response.href, data) do |response|
|
50
|
-
return response
|
51
|
-
end
|
23
|
+
def self.using_token token
|
24
|
+
service = new
|
25
|
+
service.token = token
|
26
|
+
service
|
52
27
|
end
|
53
28
|
|
54
|
-
def
|
55
|
-
|
56
|
-
params[key.to_s] = value
|
57
|
-
}
|
58
|
-
|
59
|
-
get('/') do |response|
|
60
|
-
return DropCollection.new(response, self) if response.unauthorized?
|
61
|
-
|
62
|
-
drops = response.link('drops').follow
|
63
|
-
return DropCollection.new(drops, self) if params.empty?
|
64
|
-
|
65
|
-
drops_query = drops.query 'drops-list'
|
66
|
-
href = Addressable::URI.parse drops_query.href
|
67
|
-
href.query_values = drops_query.fill params
|
68
|
-
|
69
|
-
get(href) do |response| return DropCollection.new(response, self) end
|
70
|
-
end
|
29
|
+
def token= token
|
30
|
+
connection.token_auth token
|
71
31
|
end
|
72
32
|
|
73
|
-
def
|
74
|
-
|
33
|
+
def self.token_for_account email, password
|
34
|
+
new.token_for_account(email, password)
|
75
35
|
end
|
76
36
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
put(drop.href, data) do |collection|
|
85
|
-
if not path
|
86
|
-
return collection
|
87
|
-
else
|
88
|
-
return upload_file(path, collection)
|
89
|
-
end
|
37
|
+
def token_for_account email, password
|
38
|
+
template = root.template
|
39
|
+
.fill('email', email)
|
40
|
+
.fill('password', password)
|
41
|
+
post template.href, template.data do |representation|
|
42
|
+
return unless representation.authorized?
|
43
|
+
return representation.item.data.fetch('token')
|
90
44
|
end
|
91
45
|
end
|
92
46
|
|
93
|
-
def bookmark
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
post(collection.href, data) do |response|
|
99
|
-
return DropCollection.new response, self
|
47
|
+
def bookmark url
|
48
|
+
template = drops_template.template.
|
49
|
+
fill('bookmark_url', url)
|
50
|
+
post template.href, template.data do |representation|
|
51
|
+
return representation.item
|
100
52
|
end
|
101
53
|
end
|
102
54
|
|
103
|
-
def upload
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
post(collection.href, data) do |collection|
|
109
|
-
return DropCollection.new upload_file(path, collection), self
|
55
|
+
def upload path
|
56
|
+
template = drops_template.template.
|
57
|
+
fill('file_size', FileTest.size(path))
|
58
|
+
post template.href, template.data do |representation|
|
59
|
+
return upload_file(path, representation.template)
|
110
60
|
end
|
111
61
|
end
|
112
62
|
|
113
|
-
def
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
def recover_drop(href)
|
118
|
-
update href, trash: false
|
119
|
-
end
|
120
|
-
|
121
|
-
def delete_drop(href)
|
122
|
-
delete(href) do |response|
|
123
|
-
return response
|
63
|
+
def drops_template
|
64
|
+
root.link('drops-template').get do |representation|
|
65
|
+
return representation
|
124
66
|
end
|
125
67
|
end
|
126
68
|
|
127
69
|
private
|
128
70
|
|
129
|
-
def
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
if href == :root
|
135
|
-
get('/') do |response|
|
136
|
-
return response if response.__response__.status == 401
|
137
|
-
href = response.link('drops').href
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
get(href) do |response|
|
142
|
-
return response if response.__response__.status == 401
|
143
|
-
if not params.empty?
|
144
|
-
drops_query = response.query('drops-list')
|
145
|
-
href = Addressable::URI.parse drops_query.href
|
146
|
-
href.query_values = drops_query.fill params
|
147
|
-
else
|
148
|
-
return response
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
get(href) do |response|
|
153
|
-
return response if response.__response__.status == 401
|
154
|
-
return response
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def fetch_drop_attributes(options)
|
159
|
-
path = options.delete :path
|
160
|
-
options[:file_size] = FileTest.size(path) if path
|
161
|
-
{ url: 'bookmark_url',
|
162
|
-
file_size: 'file_size',
|
163
|
-
name: 'name',
|
164
|
-
private: 'private',
|
165
|
-
trash: 'trash'
|
166
|
-
}.each_with_object({}) {|(key, name), attributes|
|
167
|
-
attributes[name] = options.fetch(key) if options.has_key?(key)
|
168
|
-
}
|
169
|
-
end
|
170
|
-
|
171
|
-
def upload_file(path, collection)
|
172
|
-
uri = Addressable::URI.parse collection.href
|
173
|
-
file = File.open path
|
174
|
-
file_io = Faraday::UploadIO.new file, 'image/png'
|
175
|
-
fields = collection.template.fill('file' => file_io)
|
71
|
+
def upload_file(path, template)
|
72
|
+
file = File.open path
|
73
|
+
file_io = Faraday::UploadIO.new file, 'image/png' # TODO: Use correct mime type
|
74
|
+
template = template.fill('file', file_io)
|
75
|
+
uri = Addressable::URI.parse template.href
|
176
76
|
|
177
77
|
conn = Faraday.new(url: uri.site) {|builder|
|
178
|
-
|
179
|
-
builder.request :multipart
|
180
|
-
end
|
181
|
-
|
78
|
+
builder.request :multipart
|
182
79
|
builder.response :logger, logger
|
183
80
|
builder.adapter :typhoeus
|
184
81
|
}
|
185
82
|
|
186
|
-
conn.post(uri.request_uri,
|
83
|
+
conn.post(uri.request_uri, template.data).on_complete do |env|
|
187
84
|
location = Addressable::URI.parse env[:response_headers]['Location']
|
188
|
-
get
|
189
|
-
return upload_response
|
85
|
+
get location do |upload_response|
|
86
|
+
return upload_response.item
|
190
87
|
end
|
191
88
|
end
|
192
89
|
end
|
data/lib/cloudapp.rb
CHANGED
data/man/cloudapp.1
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "CLOUDAPP" "1" "December 2012" "" ""
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBcloudapp\fR \- all the pleasures of cloudapp in a cli
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBcloudapp bookmark\fR [\fB\-\-direct\fR] \fIurl\fR
|
11
|
+
.
|
12
|
+
.br
|
13
|
+
\fBcloudapp upload\fR [\fB\-\-direct\fR] \fIfile\fR
|
14
|
+
.
|
15
|
+
.SH "DESCRIPTION"
|
16
|
+
Upload a file or share a bookmark with CloudApp\. The drop\'s share link will be printed to standard output\. Account credentials are stored in \fB~/\.netrc\fR\.
|
17
|
+
.
|
18
|
+
.SH "OPTIONS"
|
19
|
+
.
|
20
|
+
.TP
|
21
|
+
\fB\-d\fR, \fB\-\-direct\fR
|
22
|
+
Print the drop\'s direct link after creation\. The direct link is suitable for use in places that expect a link to a file content like an HTML IMG tag\.
|
23
|
+
.
|
24
|
+
.SH "EXIT STATUS"
|
25
|
+
cloudapp may return one of several error codes if it encouters problems\.
|
26
|
+
.
|
27
|
+
.IP "\(bu" 4
|
28
|
+
\fB0\fR Success
|
29
|
+
.
|
30
|
+
.IP "\(bu" 4
|
31
|
+
\fB1\fR File exceeds the limits of the account\'s plan
|
32
|
+
.
|
33
|
+
.IP "\(bu" 4
|
34
|
+
\fB9\fR Something horrible has happened
|
35
|
+
.
|
36
|
+
.IP "" 0
|
37
|
+
.
|
38
|
+
.SH "FILES"
|
39
|
+
.
|
40
|
+
.TP
|
41
|
+
\fB$HOME/\.netrc\fR
|
42
|
+
Store account authentication token
|
43
|
+
.
|
44
|
+
.SH "EXAMPLE"
|
45
|
+
Upload a file:
|
46
|
+
.
|
47
|
+
.IP "" 4
|
48
|
+
.
|
49
|
+
.nf
|
50
|
+
|
51
|
+
$ cloudapp upload screenshot\.png
|
52
|
+
http://cl\.ly/abc123
|
53
|
+
.
|
54
|
+
.fi
|
55
|
+
.
|
56
|
+
.IP "" 0
|
57
|
+
.
|
58
|
+
.P
|
59
|
+
Copy the drop\'s share link to the clipboard on OS X:
|
60
|
+
.
|
61
|
+
.IP "" 4
|
62
|
+
.
|
63
|
+
.nf
|
64
|
+
|
65
|
+
$ cloudapp upload screenshot\.png | pbcopy
|
66
|
+
.
|
67
|
+
.fi
|
68
|
+
.
|
69
|
+
.IP "" 0
|
70
|
+
.
|
71
|
+
.P
|
72
|
+
Bookmark a URL:
|
73
|
+
.
|
74
|
+
.IP "" 4
|
75
|
+
.
|
76
|
+
.nf
|
77
|
+
|
78
|
+
$ cloudapp bookmark http://getcloudapp\.com
|
79
|
+
http://cl\.ly/abc123
|
80
|
+
.
|
81
|
+
.fi
|
82
|
+
.
|
83
|
+
.IP "" 0
|
84
|
+
.
|
85
|
+
.P
|
86
|
+
Print the drop\'s direct link:
|
87
|
+
.
|
88
|
+
.IP "" 4
|
89
|
+
.
|
90
|
+
.nf
|
91
|
+
|
92
|
+
$ cloudapp upload \-\-direct screenshot\.png
|
93
|
+
http://cl\.ly/abc123/screenshot\.png
|
94
|
+
.
|
95
|
+
.fi
|
96
|
+
.
|
97
|
+
.IP "" 0
|
98
|
+
.
|
99
|
+
.SH "SEE ALSO"
|
100
|
+
\fBftp\fR(1)
|
data/man/cloudapp.1.html
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
+
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
6
|
+
<title>cloudapp(1) - all the pleasures of cloudapp in a cli</title>
|
7
|
+
<style type='text/css' media='all'>
|
8
|
+
/* style: man */
|
9
|
+
body#manpage {margin:0}
|
10
|
+
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
11
|
+
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
12
|
+
.mp h2 {margin:10px 0 0 0}
|
13
|
+
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
14
|
+
.mp h3 {margin:0 0 0 4ex}
|
15
|
+
.mp dt {margin:0;clear:left}
|
16
|
+
.mp dt.flush {float:left;width:8ex}
|
17
|
+
.mp dd {margin:0 0 0 9ex}
|
18
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
19
|
+
.mp pre {margin-bottom:20px}
|
20
|
+
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
21
|
+
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
22
|
+
.mp img {display:block;margin:auto}
|
23
|
+
.mp h1.man-title {display:none}
|
24
|
+
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
25
|
+
.mp h2 {font-size:16px;line-height:1.25}
|
26
|
+
.mp h1 {font-size:20px;line-height:2}
|
27
|
+
.mp {text-align:justify;background:#fff}
|
28
|
+
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
29
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
30
|
+
.mp u {text-decoration:underline}
|
31
|
+
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
32
|
+
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
33
|
+
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
34
|
+
.mp b.man-ref {font-weight:normal;color:#434241}
|
35
|
+
.mp pre {padding:0 4ex}
|
36
|
+
.mp pre code {font-weight:normal;color:#434241}
|
37
|
+
.mp h2+pre,h3+pre {padding-left:0}
|
38
|
+
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
39
|
+
ol.man-decor {width:100%}
|
40
|
+
ol.man-decor li.tl {text-align:left}
|
41
|
+
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
42
|
+
ol.man-decor li.tr {text-align:right;float:right}
|
43
|
+
</style>
|
44
|
+
<style type='text/css' media='all'>
|
45
|
+
/* style: toc */
|
46
|
+
.man-navigation {display:block !important;position:fixed;top:0;left:113ex;height:100%;width:100%;padding:48px 0 0 0;border-left:1px solid #dbdbdb;background:#eee}
|
47
|
+
.man-navigation a,.man-navigation a:hover,.man-navigation a:link,.man-navigation a:visited {display:block;margin:0;padding:5px 2px 5px 30px;color:#999;text-decoration:none}
|
48
|
+
.man-navigation a:hover {color:#111;text-decoration:underline}
|
49
|
+
</style>
|
50
|
+
</head>
|
51
|
+
<!--
|
52
|
+
The following styles are deprecated and will be removed at some point:
|
53
|
+
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
54
|
+
|
55
|
+
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
56
|
+
.man-navigation should be used instead.
|
57
|
+
-->
|
58
|
+
<body id='manpage'>
|
59
|
+
<div class='mp' id='man'>
|
60
|
+
|
61
|
+
<div class='man-navigation' style='display:none'>
|
62
|
+
<a href="#NAME">NAME</a>
|
63
|
+
<a href="#SYNOPSIS">SYNOPSIS</a>
|
64
|
+
<a href="#DESCRIPTION">DESCRIPTION</a>
|
65
|
+
<a href="#OPTIONS">OPTIONS</a>
|
66
|
+
<a href="#EXIT-STATUS">EXIT STATUS</a>
|
67
|
+
<a href="#FILES">FILES</a>
|
68
|
+
<a href="#EXAMPLE">EXAMPLE</a>
|
69
|
+
<a href="#SEE-ALSO">SEE ALSO</a>
|
70
|
+
</div>
|
71
|
+
|
72
|
+
<ol class='man-decor man-head man head'>
|
73
|
+
<li class='tl'>cloudapp(1)</li>
|
74
|
+
<li class='tc'></li>
|
75
|
+
<li class='tr'>cloudapp(1)</li>
|
76
|
+
</ol>
|
77
|
+
|
78
|
+
<h2 id="NAME">NAME</h2>
|
79
|
+
<p class="man-name">
|
80
|
+
<code>cloudapp</code> - <span class="man-whatis">all the pleasures of cloudapp in a cli</span>
|
81
|
+
</p>
|
82
|
+
|
83
|
+
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
84
|
+
|
85
|
+
<p><code>cloudapp bookmark</code> [<code>--direct</code>] <var>url</var><br />
|
86
|
+
<code>cloudapp upload</code> [<code>--direct</code>] <var>file</var></p>
|
87
|
+
|
88
|
+
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
89
|
+
|
90
|
+
<p>Upload a file or share a bookmark with CloudApp. The drop's share link will be
|
91
|
+
printed to standard output. Account credentials are stored in <code>~/.netrc</code>.</p>
|
92
|
+
|
93
|
+
<h2 id="OPTIONS">OPTIONS</h2>
|
94
|
+
|
95
|
+
<dl>
|
96
|
+
<dt><code>-d</code>, <code>--direct</code></dt><dd>Print the drop's direct link after creation. The direct link is suitable for
|
97
|
+
use in places that expect a link to a file content like an HTML IMG tag.</dd>
|
98
|
+
</dl>
|
99
|
+
|
100
|
+
|
101
|
+
<h2 id="EXIT-STATUS">EXIT STATUS</h2>
|
102
|
+
|
103
|
+
<p>cloudapp may return one of several error codes if it encouters problems.</p>
|
104
|
+
|
105
|
+
<ul>
|
106
|
+
<li><code>0</code> Success</li>
|
107
|
+
<li><code>1</code> File exceeds the limits of the account's plan</li>
|
108
|
+
<li><code>9</code> Something horrible has happened</li>
|
109
|
+
</ul>
|
110
|
+
|
111
|
+
|
112
|
+
<h2 id="FILES">FILES</h2>
|
113
|
+
|
114
|
+
<dl>
|
115
|
+
<dt><code>$HOME/.netrc</code></dt><dd>Store account authentication token</dd>
|
116
|
+
</dl>
|
117
|
+
|
118
|
+
|
119
|
+
<h2 id="EXAMPLE">EXAMPLE</h2>
|
120
|
+
|
121
|
+
<p>Upload a file:</p>
|
122
|
+
|
123
|
+
<pre><code>$ cloudapp upload screenshot.png
|
124
|
+
http://cl.ly/abc123
|
125
|
+
</code></pre>
|
126
|
+
|
127
|
+
<p>Copy the drop's share link to the clipboard on OS X:</p>
|
128
|
+
|
129
|
+
<pre><code>$ cloudapp upload screenshot.png | pbcopy
|
130
|
+
</code></pre>
|
131
|
+
|
132
|
+
<p>Bookmark a URL:</p>
|
133
|
+
|
134
|
+
<pre><code>$ cloudapp bookmark http://getcloudapp.com
|
135
|
+
http://cl.ly/abc123
|
136
|
+
</code></pre>
|
137
|
+
|
138
|
+
<p>Print the drop's direct link:</p>
|
139
|
+
|
140
|
+
<pre><code>$ cloudapp upload --direct screenshot.png
|
141
|
+
http://cl.ly/abc123/screenshot.png
|
142
|
+
</code></pre>
|
143
|
+
|
144
|
+
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
145
|
+
|
146
|
+
<p><code>ftp</code>(1)</p>
|
147
|
+
|
148
|
+
|
149
|
+
<ol class='man-decor man-foot man foot'>
|
150
|
+
<li class='tl'></li>
|
151
|
+
<li class='tc'>December 2012</li>
|
152
|
+
<li class='tr'>cloudapp(1)</li>
|
153
|
+
</ol>
|
154
|
+
|
155
|
+
</div>
|
156
|
+
</body>
|
157
|
+
</html>
|
data/man/cloudapp.1.ronn
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
cloudapp(1) -- all the pleasures of cloudapp in a cli
|
2
|
+
=====================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`cloudapp bookmark` [`--direct`] <url><br>
|
7
|
+
`cloudapp upload` [`--direct`] <file>
|
8
|
+
|
9
|
+
## DESCRIPTION
|
10
|
+
|
11
|
+
Upload a file or share a bookmark with CloudApp. The drop's share link will be
|
12
|
+
printed to standard output. Account credentials are stored in `~/.netrc`.
|
13
|
+
|
14
|
+
## OPTIONS
|
15
|
+
|
16
|
+
- `-d`, `--direct`:
|
17
|
+
Print the drop's direct link after creation. The direct link is suitable for
|
18
|
+
use in places that expect a link to a file content like an HTML IMG tag.
|
19
|
+
|
20
|
+
## EXIT STATUS
|
21
|
+
|
22
|
+
cloudapp may return one of several error codes if it encouters problems.
|
23
|
+
|
24
|
+
- `0` Success
|
25
|
+
- `1` File exceeds the limits of the account's plan
|
26
|
+
- `9` Something horrible has happened
|
27
|
+
|
28
|
+
## FILES
|
29
|
+
|
30
|
+
- `$HOME/.netrc`:
|
31
|
+
Store account authentication token
|
32
|
+
|
33
|
+
## EXAMPLE
|
34
|
+
|
35
|
+
Upload a file:
|
36
|
+
|
37
|
+
$ cloudapp upload screenshot.png
|
38
|
+
http://cl.ly/abc123
|
39
|
+
|
40
|
+
Copy the drop's share link to the clipboard on OS X:
|
41
|
+
|
42
|
+
$ cloudapp upload screenshot.png | pbcopy
|
43
|
+
|
44
|
+
Bookmark a URL:
|
45
|
+
|
46
|
+
$ cloudapp bookmark http://getcloudapp.com
|
47
|
+
http://cl.ly/abc123
|
48
|
+
|
49
|
+
Print the drop's direct link:
|
50
|
+
|
51
|
+
$ cloudapp upload --direct screenshot.png
|
52
|
+
http://cl.ly/abc123/screenshot.png
|
53
|
+
|
54
|
+
## SEE ALSO
|
55
|
+
|
56
|
+
`ftp`(1)
|