cloudapp 2.0.0.beta.4 → 2.0.0.beta.5
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/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)
|