cloudapp 2.0.0 → 2.1.0.beta.1
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 +1 -1
- data/README.md +2 -1
- data/bin/cloudapp +38 -36
- data/cloudapp.gemspec +4 -4
- data/lib/cloudapp.rb +1 -1
- data/lib/cloudapp/cli/options.rb +5 -16
- data/lib/cloudapp/collection_json/item.rb +2 -1
- data/lib/cloudapp/credentials.rb +11 -9
- data/man/cloudapp.1 +42 -10
- data/man/cloudapp.1.html +26 -8
- data/man/cloudapp.1.ronn +23 -7
- data/spec/cloudapp/cli/options_spec.rb +9 -34
- data/spec/cloudapp/collection_json/item_spec.rb +5 -0
- data/spec/cloudapp/credentials_spec.rb +31 -13
- metadata +9 -8
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/bin/cloudapp
CHANGED
@@ -17,9 +17,9 @@ def service
|
|
17
17
|
.on_error(&method(:service_error_handler))
|
18
18
|
end
|
19
19
|
|
20
|
-
def token_for_account
|
20
|
+
def token_for_account email, password
|
21
21
|
CloudApp::Service
|
22
|
-
.token_for_account(
|
22
|
+
.token_for_account(email, password, &method(:service_error_handler))
|
23
23
|
end
|
24
24
|
|
25
25
|
def service_error_handler representation
|
@@ -29,7 +29,7 @@ def service_error_handler representation
|
|
29
29
|
message << ' '
|
30
30
|
message << representation.link('upgrade').href
|
31
31
|
end
|
32
|
-
|
32
|
+
service_error message
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -43,24 +43,29 @@ end
|
|
43
43
|
|
44
44
|
def authenticate
|
45
45
|
while not valid_token?
|
46
|
-
|
47
|
-
token = token_for_account
|
48
|
-
Credentials.
|
46
|
+
email, password = CloudApp::CLI::Prompt.new.ask_for_credentials
|
47
|
+
token = token_for_account email, password
|
48
|
+
Credentials.save email, token
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
def fetch_link drop,
|
53
|
-
|
54
|
-
|
52
|
+
def fetch_link drop, options
|
53
|
+
link_rel = options.direct_link? ? :embed : :canonical
|
54
|
+
link = drop.link(link_rel) || drop.link(:canonical)
|
55
|
+
copy link if options.copy_link?
|
55
56
|
$stdout.puts link
|
56
57
|
$stderr.puts link unless $stdout.tty?
|
57
58
|
end
|
58
59
|
|
59
60
|
|
60
61
|
def print_error message
|
62
|
+
$stderr.puts "! #{wrap(message, 78, ' ')}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def service_error message
|
61
66
|
$stderr.puts
|
62
67
|
$stderr.puts
|
63
|
-
|
68
|
+
print_error message
|
64
69
|
$stderr.puts
|
65
70
|
end
|
66
71
|
|
@@ -83,8 +88,7 @@ def print_help io = $stdout
|
|
83
88
|
cloudapp, version #{CloudApp::VERSION}
|
84
89
|
|
85
90
|
Usage:
|
86
|
-
cloudapp
|
87
|
-
cloudapp upload [--direct] [--[no-]copy] <file> [<file>...]
|
91
|
+
cloudapp [--direct] [--[no-]copy] <file_or_url> [<file_or_url>...]
|
88
92
|
|
89
93
|
EOS
|
90
94
|
end
|
@@ -98,36 +102,34 @@ def invalid_command
|
|
98
102
|
exit 1
|
99
103
|
end
|
100
104
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
104
|
-
options.arguments.each do |arg|
|
105
|
-
$stderr.print "Bookmarking #{arg}... "
|
106
|
-
error "#{arg} doesn't look like a valid URL" unless arg =~ URI.regexp
|
107
|
-
bookmark = service.bookmark(arg)
|
108
|
-
exit 1 unless bookmark
|
109
|
-
fetch_link bookmark, options.link_type, options.copy_link?
|
110
|
-
end
|
105
|
+
def file_names options, input = $stdin
|
106
|
+
stdin_file_names = input.tty? ? [] : input.each_line.map(&:chomp)
|
107
|
+
stdin_file_names + options.arguments
|
111
108
|
end
|
112
109
|
|
113
|
-
def
|
114
|
-
|
110
|
+
def share file_names, options
|
111
|
+
invalid_command if file_names.empty?
|
115
112
|
authenticate
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
113
|
+
|
114
|
+
file_names.each do |arg|
|
115
|
+
if File.exists? arg
|
116
|
+
$stderr.print "Uploading #{File.basename(arg)}... "
|
117
|
+
drop = service.upload(arg)
|
118
|
+
elsif arg =~ URI.regexp
|
119
|
+
$stderr.print "Bookmarking #{arg}... "
|
120
|
+
drop = service.bookmark(arg)
|
121
|
+
else
|
122
|
+
error "#{arg.inspect} isn't a file that exists or a valid URL."
|
123
|
+
end
|
124
|
+
|
125
|
+
exit 1 unless drop
|
126
|
+
fetch_link drop, options
|
122
127
|
end
|
123
128
|
end
|
124
129
|
|
125
|
-
|
126
130
|
options = CloudApp::CLI::Options.parse ARGV
|
127
131
|
case options.action
|
128
|
-
when :help
|
129
|
-
when :version
|
130
|
-
when :
|
131
|
-
when :upload then upload options
|
132
|
-
else invalid_command
|
132
|
+
when :help then print_help
|
133
|
+
when :version then print_version
|
134
|
+
when :share then share file_names(options), options
|
133
135
|
end
|
data/cloudapp.gemspec
CHANGED
@@ -13,14 +13,14 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'cloudapp'
|
16
|
-
s.version = '2.0.
|
17
|
-
s.date = '2013-01-
|
16
|
+
s.version = '2.1.0.beta.1'
|
17
|
+
s.date = '2013-01-11'
|
18
18
|
s.rubyforge_project = 'cloudapp'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
21
21
|
## as you like.
|
22
|
-
s.summary = "CloudApp CLI"
|
23
|
-
s.description = "Experience all the pleasures of sharing with CloudApp now in your terminal."
|
22
|
+
s.summary = "CloudApp API wrapper and CLI"
|
23
|
+
s.description = "Experience all the pleasures of sharing with CloudApp now in your Ruby code and terminal."
|
24
24
|
|
25
25
|
## List the primary authors. If there are a bunch of authors, it's probably
|
26
26
|
## better to set the email to an email list or something. If you don't have
|
data/lib/cloudapp.rb
CHANGED
data/lib/cloudapp/cli/options.rb
CHANGED
@@ -9,41 +9,30 @@ module CloudApp
|
|
9
9
|
options[:copy_link] = true unless args.delete('--no-copy')
|
10
10
|
options[:help] = args.delete('--help') || args.delete('-h')
|
11
11
|
options[:version] = args.delete('--version')
|
12
|
-
options[:action] = args.shift unless args.empty?
|
13
12
|
options[:arguments] = args unless args.empty?
|
14
13
|
|
15
14
|
Options.new options
|
16
15
|
end
|
17
16
|
|
18
|
-
|
17
|
+
attr_reader :arguments
|
19
18
|
def initialize options
|
20
19
|
@copy_link = options.fetch :copy_link, false
|
21
20
|
@direct = options.fetch :direct, false
|
22
21
|
@help = options.fetch :help, false
|
23
22
|
@version = options.fetch :version, false
|
24
|
-
@action = options.fetch :action, nil
|
25
23
|
@arguments = options.fetch :arguments, []
|
26
24
|
end
|
27
25
|
|
28
|
-
def copy_link?
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def link_type
|
33
|
-
@direct && action != :bookmark ? :embed : :canonical
|
34
|
-
end
|
26
|
+
def copy_link?() @copy_link end
|
27
|
+
def direct_link?() @direct end
|
35
28
|
|
36
29
|
def action
|
37
|
-
if @help or @
|
30
|
+
if @help or @arguments.first == 'help'
|
38
31
|
:help
|
39
32
|
elsif @version
|
40
33
|
:version
|
41
|
-
elsif @action == 'bookmark'
|
42
|
-
:bookmark
|
43
|
-
elsif @action == 'upload'
|
44
|
-
:upload
|
45
34
|
else
|
46
|
-
:
|
35
|
+
:share
|
47
36
|
end
|
48
37
|
end
|
49
38
|
end
|
data/lib/cloudapp/credentials.rb
CHANGED
@@ -1,33 +1,35 @@
|
|
1
1
|
require 'netrc'
|
2
2
|
|
3
3
|
class Credentials
|
4
|
-
attr_reader :netrc
|
4
|
+
attr_reader :netrc, :label
|
5
5
|
|
6
|
-
def initialize netrc
|
6
|
+
def initialize netrc, label
|
7
7
|
@netrc = netrc
|
8
|
+
@label = label
|
8
9
|
end
|
9
10
|
|
10
|
-
def self.token netrc = Netrc.read
|
11
|
-
new(netrc).token
|
11
|
+
def self.token netrc = Netrc.read, label = CloudApp::Service.url.host
|
12
|
+
new(netrc, label).token
|
12
13
|
end
|
13
14
|
|
14
|
-
def self.
|
15
|
-
new(netrc).
|
15
|
+
def self.save login, token, netrc = Netrc.read, label = CloudApp::Service.url.host
|
16
|
+
new(netrc, label).save login, token
|
16
17
|
end
|
17
18
|
|
18
19
|
def token
|
19
20
|
credentials.last
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
+
def save login, token
|
24
|
+
return if login.nil? or login =~ /^\s*$/
|
23
25
|
return if token.nil? or token =~ /^\s*$/
|
24
|
-
netrc[
|
26
|
+
netrc[label] = [ login, token ]
|
25
27
|
netrc.save
|
26
28
|
end
|
27
29
|
|
28
30
|
private
|
29
31
|
|
30
32
|
def credentials
|
31
|
-
Array netrc[
|
33
|
+
Array netrc[label]
|
32
34
|
end
|
33
35
|
end
|
data/man/cloudapp.1
CHANGED
@@ -1,16 +1,13 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "CLOUDAPP" "1" "
|
4
|
+
.TH "CLOUDAPP" "1" "January 2013" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBcloudapp\fR \- all the pleasures of cloudapp in a cli
|
8
8
|
.
|
9
9
|
.SH "SYNOPSIS"
|
10
|
-
\fBcloudapp
|
11
|
-
.
|
12
|
-
.br
|
13
|
-
\fBcloudapp upload\fR [\fB\-\-direct\fR] [\fB\-\-[no\-]copy\fR] \fIfile\fR [\fIfile\fR\.\.\.]
|
10
|
+
\fBcloudapp [\fR\-\-direct\fB] [\fR\-\-[no\-]copy`] \fIfile_or_url\fR [\fIfile_or_url\fR\.\.\.]
|
14
11
|
.
|
15
12
|
.SH "DESCRIPTION"
|
16
13
|
Upload a file or share a bookmark with CloudApp\. The drop\'s share link will be printed to standard output and copied to the system clipboard\. Account credentials are stored in \fB~/\.netrc\fR as defined by \fBftp\fR(1)\.
|
@@ -43,7 +40,7 @@ Upload a file:
|
|
43
40
|
.
|
44
41
|
.nf
|
45
42
|
|
46
|
-
$ cloudapp
|
43
|
+
$ cloudapp screenshot\.png
|
47
44
|
Uploading screenshot\.png\.\.\. http://cl\.ly/image/3U2U2f3B1O0x
|
48
45
|
.
|
49
46
|
.fi
|
@@ -57,7 +54,7 @@ Upload several files:
|
|
57
54
|
.
|
58
55
|
.nf
|
59
56
|
|
60
|
-
$ cloudapp
|
57
|
+
$ cloudapp *\.png
|
61
58
|
Uploading screenshot\-1\.png\.\.\. http://cl\.ly/image/1E1F1k3Q3919
|
62
59
|
Uploading screenshot\-2\.png\.\.\. http://cl\.ly/image/3P1s3p0c3545
|
63
60
|
Uploading screenshot\-3\.png\.\.\. http://cl\.ly/image/0E3k0h353X0w
|
@@ -67,13 +64,48 @@ Uploading screenshot\-3\.png\.\.\. http://cl\.ly/image/0E3k0h353X0w
|
|
67
64
|
.IP "" 0
|
68
65
|
.
|
69
66
|
.P
|
67
|
+
Upload file names and URLs from standard input:
|
68
|
+
.
|
69
|
+
.IP "" 4
|
70
|
+
.
|
71
|
+
.nf
|
72
|
+
|
73
|
+
$ ls *\.png | cloudapp
|
74
|
+
Uploading screenshot\-1\.png\.\.\. http://cl\.ly/image/1E1F1k3Q3919
|
75
|
+
Uploading screenshot\-2\.png\.\.\. http://cl\.ly/image/3P1s3p0c3545
|
76
|
+
Uploading screenshot\-3\.png\.\.\. http://cl\.ly/image/0E3k0h353X0w
|
77
|
+
|
78
|
+
$ gifme {1,2,3}\.png | cloudapp \-\-direct
|
79
|
+
You now have a handsome animation at /Users/Larry/Desktop/animated\-2013\-01\-11_15h\-59m\-49s\.gif
|
80
|
+
Uploading animated\-2013\-01\-11_15h\-59m\-49s\.gif\.\.\. http://cl\.ly/image/373I3q2g1p36
|
81
|
+
.
|
82
|
+
.fi
|
83
|
+
.
|
84
|
+
.IP "" 0
|
85
|
+
.
|
86
|
+
.P
|
70
87
|
Bookmark a URL:
|
71
88
|
.
|
72
89
|
.IP "" 4
|
73
90
|
.
|
74
91
|
.nf
|
75
92
|
|
76
|
-
$ cloudapp
|
93
|
+
$ cloudapp http://getcloudapp\.com
|
94
|
+
Bookmarking http://getcloudapp\.com\.\.\. http://cl\.ly/352T3Z2G0G2S
|
95
|
+
.
|
96
|
+
.fi
|
97
|
+
.
|
98
|
+
.IP "" 0
|
99
|
+
.
|
100
|
+
.P
|
101
|
+
Everything at once:
|
102
|
+
.
|
103
|
+
.IP "" 4
|
104
|
+
.
|
105
|
+
.nf
|
106
|
+
|
107
|
+
$ cloudapp screenshot\.png http://getcloudapp\.com
|
108
|
+
Uploading screenshot\.png\.\.\. http://cl\.ly/image/3U2U2f3B1O0x
|
77
109
|
Bookmarking http://getcloudapp\.com\.\.\. http://cl\.ly/352T3Z2G0G2S
|
78
110
|
.
|
79
111
|
.fi
|
@@ -87,7 +119,7 @@ Copy the drop\'s direct link:
|
|
87
119
|
.
|
88
120
|
.nf
|
89
121
|
|
90
|
-
$ cloudapp
|
122
|
+
$ cloudapp \-\-direct screenshot\.png
|
91
123
|
Uploading screenshot\.png\.\.\. http://cl\.ly/image/3U2U2f3B1O0x/screenshot\.png
|
92
124
|
.
|
93
125
|
.fi
|
@@ -101,7 +133,7 @@ Print but don\'t copy the drop\'s link:
|
|
101
133
|
.
|
102
134
|
.nf
|
103
135
|
|
104
|
-
$ cloudapp
|
136
|
+
$ cloudapp \-\-no\-copy screenshot\.png
|
105
137
|
Uploading screenshot\.png\.\.\. http://cl\.ly/image/3U2U2f3B1O0x
|
106
138
|
.
|
107
139
|
.fi
|
data/man/cloudapp.1.html
CHANGED
@@ -79,8 +79,7 @@
|
|
79
79
|
|
80
80
|
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
81
81
|
|
82
|
-
<p><code>cloudapp
|
83
|
-
<code>cloudapp upload</code> [<code>--direct</code>] [<code>--[no-]copy</code>] <var>file</var> [<var>file</var>...]</p>
|
82
|
+
<p><code>cloudapp [</code>--direct<code>] [</code>--[no-]copy`] <var>file_or_url</var> [<var>file_or_url</var>...]</p>
|
84
83
|
|
85
84
|
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
86
85
|
|
@@ -106,40 +105,59 @@ copy.</p></dd>
|
|
106
105
|
|
107
106
|
<p>Upload a file:</p>
|
108
107
|
|
109
|
-
<pre><code>$ cloudapp
|
108
|
+
<pre><code>$ cloudapp screenshot.png
|
110
109
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
111
110
|
</code></pre>
|
112
111
|
|
113
112
|
<p>Upload several files:</p>
|
114
113
|
|
115
|
-
<pre><code>$ cloudapp
|
114
|
+
<pre><code>$ cloudapp *.png
|
116
115
|
Uploading screenshot-1.png... http://cl.ly/image/1E1F1k3Q3919
|
117
116
|
Uploading screenshot-2.png... http://cl.ly/image/3P1s3p0c3545
|
118
117
|
Uploading screenshot-3.png... http://cl.ly/image/0E3k0h353X0w
|
119
118
|
</code></pre>
|
120
119
|
|
120
|
+
<p>Upload file names and URLs from standard input:</p>
|
121
|
+
|
122
|
+
<pre><code>$ ls *.png | cloudapp
|
123
|
+
Uploading screenshot-1.png... http://cl.ly/image/1E1F1k3Q3919
|
124
|
+
Uploading screenshot-2.png... http://cl.ly/image/3P1s3p0c3545
|
125
|
+
Uploading screenshot-3.png... http://cl.ly/image/0E3k0h353X0w
|
126
|
+
|
127
|
+
$ gifme {1,2,3}.png | cloudapp --direct
|
128
|
+
You now have a handsome animation at /Users/Larry/Desktop/animated-2013-01-11_15h-59m-49s.gif
|
129
|
+
Uploading animated-2013-01-11_15h-59m-49s.gif... http://cl.ly/image/373I3q2g1p36
|
130
|
+
</code></pre>
|
131
|
+
|
121
132
|
<p>Bookmark a URL:</p>
|
122
133
|
|
123
|
-
<pre><code>$ cloudapp
|
134
|
+
<pre><code>$ cloudapp http://getcloudapp.com
|
135
|
+
Bookmarking http://getcloudapp.com... http://cl.ly/352T3Z2G0G2S
|
136
|
+
</code></pre>
|
137
|
+
|
138
|
+
<p>Everything at once:</p>
|
139
|
+
|
140
|
+
<pre><code>$ cloudapp screenshot.png http://getcloudapp.com
|
141
|
+
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
124
142
|
Bookmarking http://getcloudapp.com... http://cl.ly/352T3Z2G0G2S
|
125
143
|
</code></pre>
|
126
144
|
|
127
145
|
<p>Copy the drop's direct link:</p>
|
128
146
|
|
129
|
-
<pre><code>$ cloudapp
|
147
|
+
<pre><code>$ cloudapp --direct screenshot.png
|
130
148
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x/screenshot.png
|
131
149
|
</code></pre>
|
132
150
|
|
133
151
|
<p>Print but don't copy the drop's link:</p>
|
134
152
|
|
135
|
-
<pre><code>$ cloudapp
|
153
|
+
<pre><code>$ cloudapp --no-copy screenshot.png
|
136
154
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
137
155
|
</code></pre>
|
138
156
|
|
139
157
|
|
140
158
|
<ol class='man-decor man-foot man foot'>
|
141
159
|
<li class='tl'></li>
|
142
|
-
<li class='tc'>
|
160
|
+
<li class='tc'>January 2013</li>
|
143
161
|
<li class='tr'>cloudapp(1)</li>
|
144
162
|
</ol>
|
145
163
|
|
data/man/cloudapp.1.ronn
CHANGED
@@ -3,8 +3,7 @@ cloudapp(1) -- all the pleasures of cloudapp in a cli
|
|
3
3
|
|
4
4
|
## SYNOPSIS
|
5
5
|
|
6
|
-
`cloudapp
|
7
|
-
`cloudapp upload` [`--direct`] [`--[no-]copy`] <file> [<file>...]
|
6
|
+
`cloudapp [`--direct`] [`--[no-]copy`] <file_or_url> [<file_or_url>...]
|
8
7
|
|
9
8
|
## DESCRIPTION
|
10
9
|
|
@@ -34,27 +33,44 @@ credentials are stored in `~/.netrc` as defined by `ftp`(1).
|
|
34
33
|
|
35
34
|
Upload a file:
|
36
35
|
|
37
|
-
$ cloudapp
|
36
|
+
$ cloudapp screenshot.png
|
38
37
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
39
38
|
|
40
39
|
Upload several files:
|
41
40
|
|
42
|
-
$ cloudapp
|
41
|
+
$ cloudapp *.png
|
43
42
|
Uploading screenshot-1.png... http://cl.ly/image/1E1F1k3Q3919
|
44
43
|
Uploading screenshot-2.png... http://cl.ly/image/3P1s3p0c3545
|
45
44
|
Uploading screenshot-3.png... http://cl.ly/image/0E3k0h353X0w
|
46
45
|
|
46
|
+
Upload file names and URLs from standard input:
|
47
|
+
|
48
|
+
$ ls *.png | cloudapp
|
49
|
+
Uploading screenshot-1.png... http://cl.ly/image/1E1F1k3Q3919
|
50
|
+
Uploading screenshot-2.png... http://cl.ly/image/3P1s3p0c3545
|
51
|
+
Uploading screenshot-3.png... http://cl.ly/image/0E3k0h353X0w
|
52
|
+
|
53
|
+
$ gifme {1,2,3}.png | cloudapp --direct
|
54
|
+
You now have a handsome animation at /Users/Larry/Desktop/animated-2013-01-11_15h-59m-49s.gif
|
55
|
+
Uploading animated-2013-01-11_15h-59m-49s.gif... http://cl.ly/image/373I3q2g1p36
|
56
|
+
|
47
57
|
Bookmark a URL:
|
48
58
|
|
49
|
-
$ cloudapp
|
59
|
+
$ cloudapp http://getcloudapp.com
|
60
|
+
Bookmarking http://getcloudapp.com... http://cl.ly/352T3Z2G0G2S
|
61
|
+
|
62
|
+
Everything at once:
|
63
|
+
|
64
|
+
$ cloudapp screenshot.png http://getcloudapp.com
|
65
|
+
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
50
66
|
Bookmarking http://getcloudapp.com... http://cl.ly/352T3Z2G0G2S
|
51
67
|
|
52
68
|
Copy the drop's direct link:
|
53
69
|
|
54
|
-
$ cloudapp
|
70
|
+
$ cloudapp --direct screenshot.png
|
55
71
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x/screenshot.png
|
56
72
|
|
57
73
|
Print but don't copy the drop's link:
|
58
74
|
|
59
|
-
$ cloudapp
|
75
|
+
$ cloudapp --no-copy screenshot.png
|
60
76
|
Uploading screenshot.png... http://cl.ly/image/3U2U2f3B1O0x
|
@@ -21,43 +21,28 @@ describe CloudApp::CLI::Options do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe '#
|
25
|
-
subject { described_class.parse(args).
|
24
|
+
describe '#direct_link?' do
|
25
|
+
subject { described_class.parse(args).direct_link? }
|
26
26
|
|
27
27
|
context 'with no args' do
|
28
28
|
let(:args) {[ '' ]}
|
29
|
-
it { should eq(
|
29
|
+
it { should eq(false) }
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'with --direct' do
|
33
33
|
let(:args) { %w(--direct) }
|
34
|
-
it { should eq(
|
34
|
+
it { should eq(true) }
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'with -d' do
|
38
38
|
let(:args) { %w(-d) }
|
39
|
-
it { should eq(
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'with --direct when bookmarking' do
|
43
|
-
let(:args) { %w(bookmark --direct) }
|
44
|
-
it { should eq(:canonical) }
|
39
|
+
it { should eq(true) }
|
45
40
|
end
|
46
41
|
end
|
47
42
|
|
48
43
|
describe '#action' do
|
49
44
|
subject { described_class.parse(args).action }
|
50
45
|
|
51
|
-
context 'with bookmark' do
|
52
|
-
let(:args) { %w(bookmark) }
|
53
|
-
it { should eq(:bookmark) }
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'with upload' do
|
57
|
-
let(:args) { %w(upload) }
|
58
|
-
it { should eq(:upload) }
|
59
|
-
end
|
60
|
-
|
61
46
|
context 'with help' do
|
62
47
|
let(:args) { %w(help) }
|
63
48
|
it { should eq(:help) }
|
@@ -80,12 +65,7 @@ describe CloudApp::CLI::Options do
|
|
80
65
|
|
81
66
|
context 'with no args' do
|
82
67
|
let(:args) {[ '' ]}
|
83
|
-
it { should eq(:
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'with an invalid command' do
|
87
|
-
let(:args) {[ '' ]}
|
88
|
-
it { should eq(:invalid) }
|
68
|
+
it { should eq(:share) }
|
89
69
|
end
|
90
70
|
end
|
91
71
|
|
@@ -93,17 +73,12 @@ describe CloudApp::CLI::Options do
|
|
93
73
|
subject { described_class.parse(args).arguments }
|
94
74
|
|
95
75
|
context 'with no args' do
|
96
|
-
let(:args) {[
|
97
|
-
it { should be_empty }
|
98
|
-
end
|
99
|
-
|
100
|
-
context 'with no args when bookmarking' do
|
101
|
-
let(:args) { %w(bookmark) }
|
76
|
+
let(:args) { [] }
|
102
77
|
it { should be_empty }
|
103
78
|
end
|
104
79
|
|
105
|
-
context 'with args
|
106
|
-
let(:args) { %w(
|
80
|
+
context 'with args' do
|
81
|
+
let(:args) { %w(one two) }
|
107
82
|
it { should eq(%w(one two)) }
|
108
83
|
end
|
109
84
|
end
|
@@ -66,6 +66,11 @@ describe CloudApp::CollectionJson::Item do
|
|
66
66
|
{ 'rel' => 'next', 'href' => 'http://next.com' }] }}
|
67
67
|
|
68
68
|
it { should eq 'http://next.com' }
|
69
|
+
|
70
|
+
context 'a nonexistent link' do
|
71
|
+
subject { described_class.new(data).link('nonexistent') }
|
72
|
+
it { should be_nil }
|
73
|
+
end
|
69
74
|
end
|
70
75
|
|
71
76
|
describe '#data' do
|
@@ -4,18 +4,20 @@ require 'cloudapp/credentials'
|
|
4
4
|
describe Credentials do
|
5
5
|
describe '.token' do
|
6
6
|
let(:netrc) { stub :netrc, :[] => %w( arthur@dent.com towel ) }
|
7
|
-
|
7
|
+
let(:label) { stub :label }
|
8
|
+
subject { Credentials.token(netrc, label) }
|
8
9
|
it { should eq 'towel' }
|
9
10
|
end
|
10
11
|
|
11
12
|
describe '#token' do
|
12
13
|
let(:netrc) { stub :netrc, :[] => %w( arthur@dent.com towel ) }
|
13
|
-
|
14
|
+
let(:label) { stub :label }
|
15
|
+
subject { Credentials.new(netrc, label).token }
|
14
16
|
|
15
17
|
it { should eq 'towel' }
|
16
18
|
|
17
19
|
it 'fetches token from netrc' do
|
18
|
-
netrc.should_receive(:[]).with(
|
20
|
+
netrc.should_receive(:[]).with(label).once
|
19
21
|
subject
|
20
22
|
end
|
21
23
|
|
@@ -25,38 +27,54 @@ describe Credentials do
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
|
-
describe '.
|
30
|
+
describe '.save' do
|
29
31
|
let(:netrc) { stub :netrc, :[]= => nil }
|
32
|
+
let(:label) { stub :label }
|
30
33
|
|
31
34
|
it 'saves the token' do
|
32
35
|
netrc.should_receive(:save).once.ordered
|
33
|
-
Credentials.
|
36
|
+
Credentials.save 'login', 'new token', netrc, label
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
|
-
describe '#
|
40
|
+
describe '#save' do
|
38
41
|
let(:netrc) { stub :netrc }
|
39
|
-
|
42
|
+
let(:label) { stub :label }
|
43
|
+
let(:login) { stub :login }
|
44
|
+
subject { Credentials.new(netrc, label) }
|
40
45
|
|
41
46
|
it 'saves the token' do
|
42
|
-
credentials = [ '
|
43
|
-
netrc.should_receive(:[]=).with(
|
47
|
+
credentials = [ 'arthur@dent.com', 'new token' ]
|
48
|
+
netrc.should_receive(:[]=).with(label, credentials)
|
44
49
|
.once.ordered
|
45
50
|
netrc.should_receive(:save).once.ordered
|
46
|
-
subject.
|
51
|
+
subject.save *credentials
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'ignores a nil login' do
|
55
|
+
netrc.should_not_receive(:[]=)
|
56
|
+
netrc.should_not_receive(:save)
|
57
|
+
subject.save nil, 'new token'
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'ignores an empty login' do
|
61
|
+
netrc.should_not_receive(:[]=)
|
62
|
+
netrc.should_not_receive(:save)
|
63
|
+
subject.save '', 'new token'
|
64
|
+
subject.save ' ', 'new token'
|
47
65
|
end
|
48
66
|
|
49
67
|
it 'ignores a nil token' do
|
50
68
|
netrc.should_not_receive(:[]=)
|
51
69
|
netrc.should_not_receive(:save)
|
52
|
-
subject.
|
70
|
+
subject.save login, nil
|
53
71
|
end
|
54
72
|
|
55
73
|
it 'ignores an empty token' do
|
56
74
|
netrc.should_not_receive(:[]=)
|
57
75
|
netrc.should_not_receive(:save)
|
58
|
-
subject.
|
59
|
-
subject.
|
76
|
+
subject.save login, ''
|
77
|
+
subject.save login, ' '
|
60
78
|
end
|
61
79
|
end
|
62
80
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0.beta.1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Larry Marburger
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: clipboard
|
@@ -139,7 +139,8 @@ dependencies:
|
|
139
139
|
- - ! '>='
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
|
-
description: Experience all the pleasures of sharing with CloudApp now in your
|
142
|
+
description: Experience all the pleasures of sharing with CloudApp now in your Ruby
|
143
|
+
code and terminal.
|
143
144
|
email: larry@marburger.cc
|
144
145
|
executables:
|
145
146
|
- cloudapp
|
@@ -191,17 +192,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
192
|
version: '0'
|
192
193
|
segments:
|
193
194
|
- 0
|
194
|
-
hash:
|
195
|
+
hash: 186077293750345953
|
195
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
197
|
none: false
|
197
198
|
requirements:
|
198
|
-
- - ! '
|
199
|
+
- - ! '>'
|
199
200
|
- !ruby/object:Gem::Version
|
200
|
-
version:
|
201
|
+
version: 1.3.1
|
201
202
|
requirements: []
|
202
203
|
rubyforge_project: cloudapp
|
203
204
|
rubygems_version: 1.8.23
|
204
205
|
signing_key:
|
205
206
|
specification_version: 2
|
206
|
-
summary: CloudApp CLI
|
207
|
+
summary: CloudApp API wrapper and CLI
|
207
208
|
test_files: []
|