cloudapp 2.0.0.beta.11 → 2.0.0.beta.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cloudapp (2.0.0.beta.11)
4
+ cloudapp (2.0.0.beta.12)
5
5
  clipboard (~> 1.0.1)
6
6
  leadlight (~> 0.1.0)
7
7
  mime-types (~> 1.19)
data/bin/cloudapp CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'cloudapp'
4
4
  require 'cloudapp/credentials'
5
+ require 'cloudapp/cli/options'
5
6
  require 'cloudapp/cli/prompt'
6
7
  require 'cloudapp/service'
7
8
  require 'clipboard'
@@ -22,28 +23,39 @@ def service_error_handler representation
22
23
  end
23
24
  end
24
25
 
25
- def print_error message
26
- $stderr.puts
27
- $stderr.puts "! #{message}"
28
- $stderr.puts
26
+ def token
27
+ Credentials.token
28
+ end
29
+
30
+ def valid_token?
31
+ !token.nil? and service.root.authorized?
29
32
  end
30
33
 
31
- def print_link link
34
+ def authenticate
35
+ while not valid_token?
36
+ credentials = CloudApp::CLI::Prompt.new.ask_for_credentials
37
+ token = token_for_account credentials
38
+ Credentials.save_token token
39
+ end
40
+ end
41
+
42
+ def fetch_link drop, link_type, copy_link
43
+ link = drop.link(link_type)
44
+ copy link if copy_link
32
45
  $stdout.puts link
33
46
  $stderr.puts link unless $stdout.tty?
34
47
  end
35
48
 
36
- def error message
37
- print_error message
38
- exit 1
39
- end
40
49
 
41
- def token
42
- Credentials.token
50
+ def print_error message
51
+ $stderr.puts
52
+ $stderr.puts "! #{message}"
53
+ $stderr.puts
43
54
  end
44
55
 
45
- def valid_token?
46
- !token.nil? and service.root.authorized?
56
+ def error message
57
+ print_error message
58
+ exit 1
47
59
  end
48
60
 
49
61
  def print_version
@@ -51,64 +63,53 @@ def print_version
51
63
  exit
52
64
  end
53
65
 
54
- def copy content
55
- Clipboard.copy content
56
- end
57
-
58
- def validate_url url
59
- error "#{url} doesn't look like a valid URL" unless url =~ URI.regexp
66
+ def print_help io = $stdout
67
+ io.puts <<EOS
68
+ Usage:
69
+ cloudapp bookmark http://getcloudapp.com
70
+ cloudapp upload screenshot.png
71
+ EOS
60
72
  end
61
73
 
62
- def validate_file path
63
- error "#{path.inspect} doesn't exist" unless File.exists? path
74
+ def copy content
75
+ Clipboard.copy content
64
76
  end
65
77
 
66
-
67
- print_version if ARGV.delete('--version') || ARGV.delete('-v')
68
-
69
- while not valid_token?
70
- credentials = CloudApp::CLI::Prompt.new.ask_for_credentials
71
- token = token_for_account credentials
72
- Credentials.save_token token
78
+ def invalid_command
79
+ print_help $stderr
80
+ exit 1
73
81
  end
74
82
 
75
- link_type = ARGV.delete('--direct') || ARGV.delete('-d') ? :embed : :canonical
76
- copy = ARGV.delete('--no-copy').nil?
77
-
78
- case ARGV.shift
79
- when 'bookmark'
80
- error 'Missing URL' if ARGV.empty?
81
-
82
- link_type = :canonical # No such thing as an embed link for a bookmark.
83
- while url = ARGV.shift
84
- $stderr.print "Bookmarking #{url}... "
85
- validate_url url
86
- bookmark = service.bookmark(url)
83
+ def bookmark options
84
+ error 'Missing URL to bookmark.' if options.arguments.empty?
85
+ authenticate
86
+ options.arguments.each do |arg|
87
+ $stderr.print "Bookmarking #{arg}... "
88
+ error "#{arg} doesn't look like a valid URL" unless arg =~ URI.regexp
89
+ bookmark = service.bookmark(arg)
87
90
  exit 1 unless bookmark
88
-
89
- link = bookmark.link(link_type)
90
- copy link if copy
91
- print_link link
91
+ fetch_link bookmark, options.link_type, options.copy_link?
92
92
  end
93
+ end
93
94
 
94
- when 'upload'
95
- error 'Missing file' if ARGV.empty?
96
-
97
- while path = ARGV.shift
98
- $stderr.print "Uploading #{File.basename(path)}... "
99
- validate_file path
100
- upload = service.upload(path)
95
+ def upload options
96
+ error 'Missing file to upload.' if options.arguments.empty?
97
+ authenticate
98
+ options.arguments.each do |arg|
99
+ $stderr.print "Uploading #{File.basename(arg)}... "
100
+ error "#{arg.inspect} doesn't exist" unless File.exists? arg
101
+ upload = service.upload(arg)
101
102
  exit 1 unless upload
102
-
103
- link = upload.link(link_type)
104
- copy link if copy
105
- print_link link
103
+ fetch_link upload, options.link_type, options.copy_link?
106
104
  end
105
+ end
107
106
 
108
- else
109
- $stderr.puts <<EOS
110
- Usage:
111
- cloudapp bookmark http://getcloudapp.com
112
- cloudapp upload screenshot.png
113
- EOS
107
+
108
+ options = CloudApp::CLI::Options.parse ARGV
109
+ case options.action
110
+ when :help then print_help
111
+ when :version then print_version
112
+ when :bookmark then bookmark options
113
+ when :upload then upload options
114
+ else invalid_command
114
115
  end
data/cloudapp.gemspec CHANGED
@@ -13,8 +13,8 @@ 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.0.beta.11'
17
- s.date = '2012-12-29'
16
+ s.version = '2.0.0.beta.12'
17
+ s.date = '2012-12-31'
18
18
  s.rubyforge_project = 'cloudapp'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -69,6 +69,7 @@ Gem::Specification.new do |s|
69
69
  cloudapp.gemspec
70
70
  lib/cloudapp.rb
71
71
  lib/cloudapp/authorized.rb
72
+ lib/cloudapp/cli/options.rb
72
73
  lib/cloudapp/cli/prompt.rb
73
74
  lib/cloudapp/collection_json.rb
74
75
  lib/cloudapp/collection_json/collection.rb
@@ -81,6 +82,7 @@ Gem::Specification.new do |s|
81
82
  man/cloudapp.1.ronn
82
83
  script/docs
83
84
  spec/cloudapp/authorized_spec.rb
85
+ spec/cloudapp/cli/options_spec.rb
84
86
  spec/cloudapp/collection_json/collection_spec.rb
85
87
  spec/cloudapp/collection_json/item_spec.rb
86
88
  spec/cloudapp/collection_json/template_spec.rb
@@ -0,0 +1,51 @@
1
+ module CloudApp
2
+ module CLI
3
+ class Options
4
+ def self.parse args
5
+ options = {}
6
+ if args.delete('--direct') || args.delete('-d')
7
+ options[:direct] = true
8
+ end
9
+ options[:copy_link] = true unless args.delete('--no-copy')
10
+ options[:help] = args.delete('--help') || args.delete('-h')
11
+ options[:version] = args.delete('--version')
12
+ options[:action] = args.shift unless args.empty?
13
+ options[:arguments] = args unless args.empty?
14
+
15
+ Options.new options
16
+ end
17
+
18
+ attr_accessor :arguments
19
+ def initialize options
20
+ @copy_link = options.fetch :copy_link, false
21
+ @direct = options.fetch :direct, false
22
+ @help = options.fetch :help, false
23
+ @version = options.fetch :version, false
24
+ @action = options.fetch :action, nil
25
+ @arguments = options.fetch :arguments, []
26
+ end
27
+
28
+ def copy_link?
29
+ @copy_link
30
+ end
31
+
32
+ def link_type
33
+ @direct && action != :bookmark ? :embed : :canonical
34
+ end
35
+
36
+ def action
37
+ if @help or @action == 'help'
38
+ :help
39
+ elsif @version
40
+ :version
41
+ elsif @action == 'bookmark'
42
+ :bookmark
43
+ elsif @action == 'upload'
44
+ :upload
45
+ else
46
+ :invalid
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -3,7 +3,6 @@
3
3
  module CloudApp
4
4
  module CLI
5
5
  class Prompt
6
-
7
6
  def ask_for_credentials
8
7
  $stderr.puts "Sign into CloudApp."
9
8
  $stderr.print "Email: "
data/lib/cloudapp.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CloudApp
2
- VERSION = '2.0.0.beta.11'
2
+ VERSION = '2.0.0.beta.12'
3
3
  end
@@ -0,0 +1,112 @@
1
+ require 'helper'
2
+ require 'cloudapp/cli/options'
3
+
4
+ describe CloudApp::CLI::Options do
5
+ describe '#copy_link?' do
6
+ subject { described_class.parse(args).copy_link? }
7
+
8
+ context 'with no args' do
9
+ let(:args) {[ '' ]}
10
+ it { should eq(true) }
11
+ end
12
+
13
+ context 'with --no-copy' do
14
+ let(:args) { %w(--no-copy) }
15
+ it { should eq(false) }
16
+ end
17
+
18
+ context 'with --copy' do
19
+ let(:args) { %w(--copy) }
20
+ it { should eq(true) }
21
+ end
22
+ end
23
+
24
+ describe '#link_type' do
25
+ subject { described_class.parse(args).link_type }
26
+
27
+ context 'with no args' do
28
+ let(:args) {[ '' ]}
29
+ it { should eq(:canonical) }
30
+ end
31
+
32
+ context 'with --direct' do
33
+ let(:args) { %w(--direct) }
34
+ it { should eq(:embed) }
35
+ end
36
+
37
+ context 'with -d' do
38
+ let(:args) { %w(-d) }
39
+ it { should eq(:embed) }
40
+ end
41
+
42
+ context 'with --direct when bookmarking' do
43
+ let(:args) { %w(bookmark --direct) }
44
+ it { should eq(:canonical) }
45
+ end
46
+ end
47
+
48
+ describe '#action' do
49
+ subject { described_class.parse(args).action }
50
+
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
+ context 'with help' do
62
+ let(:args) { %w(help) }
63
+ it { should eq(:help) }
64
+ end
65
+
66
+ context 'with --help' do
67
+ let(:args) { %w(--help) }
68
+ it { should eq(:help) }
69
+ end
70
+
71
+ context 'with -h' do
72
+ let(:args) { %w(-h) }
73
+ it { should eq(:help) }
74
+ end
75
+
76
+ context 'with --version' do
77
+ let(:args) { %w(--version) }
78
+ it { should eq(:version) }
79
+ end
80
+
81
+ context 'with no args' do
82
+ let(:args) {[ '' ]}
83
+ it { should eq(:invalid) }
84
+ end
85
+
86
+ context 'with an invalid command' do
87
+ let(:args) {[ '' ]}
88
+ it { should eq(:invalid) }
89
+ end
90
+ end
91
+
92
+ describe '#arguments' do
93
+ subject { described_class.parse(args).arguments }
94
+
95
+ 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) }
102
+ it { should be_empty }
103
+ end
104
+
105
+ context 'with args when bookmarking' do
106
+ let(:args) { %w(bookmark one two) }
107
+ it { should eq(%w(one two)) }
108
+ end
109
+ end
110
+
111
+ # it "doesn't mutate array"
112
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta.11
4
+ version: 2.0.0.beta.12
5
5
  prerelease: 6
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-12-29 00:00:00.000000000 Z
12
+ date: 2012-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clipboard
@@ -157,6 +157,7 @@ files:
157
157
  - cloudapp.gemspec
158
158
  - lib/cloudapp.rb
159
159
  - lib/cloudapp/authorized.rb
160
+ - lib/cloudapp/cli/options.rb
160
161
  - lib/cloudapp/cli/prompt.rb
161
162
  - lib/cloudapp/collection_json.rb
162
163
  - lib/cloudapp/collection_json/collection.rb
@@ -169,6 +170,7 @@ files:
169
170
  - man/cloudapp.1.ronn
170
171
  - script/docs
171
172
  - spec/cloudapp/authorized_spec.rb
173
+ - spec/cloudapp/cli/options_spec.rb
172
174
  - spec/cloudapp/collection_json/collection_spec.rb
173
175
  - spec/cloudapp/collection_json/item_spec.rb
174
176
  - spec/cloudapp/collection_json/template_spec.rb
@@ -189,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
191
  version: '0'
190
192
  segments:
191
193
  - 0
192
- hash: -179383608361943794
194
+ hash: -3445886834563878524
193
195
  required_rubygems_version: !ruby/object:Gem::Requirement
194
196
  none: false
195
197
  requirements: