cloudapp-cli 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+
3
+ Below is a listing of the high-level changes for each revision of
4
+ `cloudapp-cli`.
5
+
6
+ ## In Progress
7
+
8
+ - Create curses client.
9
+ - Extract CLI from [cloudapp][] gem.
10
+
11
+ [cloudapp]: https://github.com/cloudapp/cloudapp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'cloudapp', path: '~/Code/cloudapp'
data/Gemfile.lock ADDED
@@ -0,0 +1,75 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cloudapp-cli (1.0.0.beta.1)
5
+ cloudapp (~> 2.0.0.beta.1)
6
+ ffi-ncurses
7
+ highline
8
+ ruby-termios
9
+
10
+ PATH
11
+ remote: ~/Code/cloudapp
12
+ specs:
13
+ cloudapp (2.0.0.beta.1)
14
+ leadlight (= 0.0.5)
15
+ typhoeus (~> 0.3.3)
16
+
17
+ GEM
18
+ remote: http://rubygems.org/
19
+ specs:
20
+ addressable (2.3.2)
21
+ diff-lcs (1.1.3)
22
+ fail-fast (1.0.0)
23
+ faraday (0.8.4)
24
+ multipart-post (~> 1.1)
25
+ fattr (2.2.1)
26
+ ffi (1.1.5)
27
+ ffi-locale (1.0.1)
28
+ ffi (>= 1.0.9)
29
+ ffi-ncurses (0.4.0)
30
+ ffi (>= 1.0.9)
31
+ ffi-locale (>= 1.0.0)
32
+ highline (1.6.13)
33
+ hookr (1.1.1)
34
+ fail-fast (= 1.0.0)
35
+ hpricot (0.8.6)
36
+ leadlight (0.0.5)
37
+ addressable
38
+ faraday
39
+ fattr
40
+ hookr
41
+ link_header
42
+ mime-types
43
+ multi_json (~> 1.0.4)
44
+ link_header (0.0.5)
45
+ mime-types (1.19)
46
+ multi_json (1.0.4)
47
+ multipart-post (1.1.5)
48
+ mustache (0.99.4)
49
+ rake (0.9.2.2)
50
+ rdiscount (1.6.8)
51
+ ronn (0.7.3)
52
+ hpricot (>= 0.8.2)
53
+ mustache (>= 0.7.0)
54
+ rdiscount (>= 1.5.8)
55
+ rspec (2.11.0)
56
+ rspec-core (~> 2.11.0)
57
+ rspec-expectations (~> 2.11.0)
58
+ rspec-mocks (~> 2.11.0)
59
+ rspec-core (2.11.1)
60
+ rspec-expectations (2.11.2)
61
+ diff-lcs (~> 1.1.3)
62
+ rspec-mocks (2.11.2)
63
+ ruby-termios (0.9.6)
64
+ typhoeus (0.3.3)
65
+ mime-types
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ cloudapp!
72
+ cloudapp-cli!
73
+ rake
74
+ ronn
75
+ rspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Linebreak S.L.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # CloudApp CLI
2
+
3
+ Experience all the pleasures of sharing with [CloudApp][] from your terminal
4
+ using a gorgeous and cutting-edge ncurses text user interface.
5
+
6
+ [cloudapp]: http://getcloudapp.com
7
+
8
+
9
+ ## Requirements
10
+
11
+ `cloudapp-cli` requires Ruby 1.9.2 or greater.
12
+
13
+
14
+ ## Getting Started
15
+
16
+ ``` bash
17
+ gem install cloudapp
18
+ cloudapp
19
+ ```
20
+
21
+ ## Wish List
22
+
23
+ Along with the ncurses interface, a few simple commands to allow scripting and
24
+ input from other Unix programs would be ideal.
25
+
26
+ ### Phase: One
27
+
28
+ - Bookmark a link: `cloudapp bookmark http://getcloudapp.com`
29
+ - Bookmark several links: `cloudapp bookmark http://douglasadams.com http://zombo.com`
30
+ - Share a file: `cloudapp upload screenshot.png`
31
+ - Share several files: `cloudapp upload *.png`
32
+
33
+ ### Phase: Two
34
+
35
+ - Handle bookmarks from STDIN: `pbpaste | cloudapp bookmark`
36
+ - Handle files from STDIN: `find *.png | cloudapp upload`
37
+ - Download a drop: `cloudapp download http://cl.ly/abc123`
38
+
39
+ ### Phase: Unstoppable
40
+
41
+ - Archive and share several files: `cloudapp upload --archive *.png`
42
+ - Encrypt and share a file: `cloudapp upload --encrypt launch_codes.txt`
43
+ - Download and decrypt and encrypted drop: `cloudapp download --key=def456 http://cl.ly/abc123`
44
+
45
+ ### Phase: World Domination
46
+
47
+ While we're dreaming, what could you do if `cloudapp` had a database of all your
48
+ drops? Bonus points for a light weight daemon that kept everything in sync at
49
+ all times.
50
+
51
+ - Find all your screen shots: `cloudapp list /^screen ?shot.*\.png$/`
52
+ - Trash all your stale drops: `cloudapp delete --last-viewed="> 1 month ago"`
53
+ - See your drop views in real time: `cloudapp --tail`
54
+
55
+ There's bound to be a better way to express some of these commands, but you get
56
+ the picture.
data/Rakefile ADDED
@@ -0,0 +1,139 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ #############################################################################
6
+ #
7
+ # Helper functions
8
+ #
9
+ #############################################################################
10
+
11
+ def name
12
+ @name ||= Dir['*.gemspec'].first.split('.').first
13
+ end
14
+
15
+ def primary_file
16
+ name.tr('-', '/')
17
+ end
18
+
19
+ def version
20
+ line = File.read("lib/#{primary_file}.rb")[/^\s*VERSION\s*=\s*.*/]
21
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
22
+ end
23
+
24
+ def date
25
+ Date.today.to_s
26
+ end
27
+
28
+ def rubyforge_project
29
+ name
30
+ end
31
+
32
+ def gemspec_file
33
+ "#{name}.gemspec"
34
+ end
35
+
36
+ def gem_file
37
+ "#{name}-#{version}.gem"
38
+ end
39
+
40
+ def replace_header(head, header_name)
41
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
42
+ end
43
+
44
+ #############################################################################
45
+ #
46
+ # Standard tasks
47
+ #
48
+ #############################################################################
49
+
50
+ require 'rspec'
51
+ require 'rspec/core/rake_task'
52
+
53
+ desc "Run all specs"
54
+ task RSpec::Core::RakeTask.new('spec')
55
+
56
+ task :default => "spec"
57
+
58
+ #############################################################################
59
+ #
60
+ # Custom tasks (add your own tasks here)
61
+ #
62
+ #############################################################################
63
+
64
+
65
+
66
+ #############################################################################
67
+ #
68
+ # Packaging tasks
69
+ #
70
+ #############################################################################
71
+
72
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
73
+ task :release => :build do
74
+ unless `git branch` =~ /^\* master$/
75
+ puts "You must be on the master branch to release!"
76
+ exit!
77
+ end
78
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
79
+ sh "git tag v#{version}"
80
+ sh "git push origin master"
81
+ sh "git push origin v#{version}"
82
+ sh "gem push pkg/#{gem_file}"
83
+ end
84
+
85
+ desc "Build #{gem_file} into the pkg directory"
86
+ task :build => [:gemspec, :update_bundle] do
87
+ sh "mkdir -p pkg"
88
+ sh "gem build #{gemspec_file}"
89
+ sh "mv #{gem_file} pkg"
90
+ end
91
+
92
+ desc "Generate #{gemspec_file}"
93
+ task :gemspec => :validate do
94
+ # read spec file and split out manifest section
95
+ spec = File.read(gemspec_file)
96
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
97
+
98
+ # replace name version and date
99
+ replace_header(head, :name)
100
+ replace_header(head, :version)
101
+ replace_header(head, :date)
102
+ #comment this out if your rubyforge_project has a different name
103
+ replace_header(head, :rubyforge_project)
104
+
105
+ # determine file list from git ls-files
106
+ files = `git ls-files`.
107
+ split("\n").
108
+ sort.
109
+ reject { |file| file =~ /^\./ }.
110
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
111
+ map { |file| " #{file}" }.
112
+ join("\n")
113
+
114
+ # piece file back together and write
115
+ manifest = " s.files = %w[\n#{files}\n ]\n"
116
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
117
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
118
+ puts "Updated #{gemspec_file}"
119
+ end
120
+
121
+ desc "Update #{name} in bundle"
122
+ task :update_bundle => :validate do
123
+ `bundle update #{name}`
124
+ puts "Bundled #{name} version #{version}"
125
+ end
126
+
127
+ desc "Validate #{gemspec_file}"
128
+ task :validate do
129
+ libfiles = Dir['lib/*'] + Dir['lib/cloudapp/*'] -
130
+ ['lib/cloudapp', "lib/#{primary_file}", "lib/#{primary_file}.rb"]
131
+ unless libfiles.empty?
132
+ puts "Directory `lib` should only contain a `#{primary_file}.rb` file and `#{primary_file}` dir."
133
+ exit!
134
+ end
135
+ unless Dir['VERSION*'].empty?
136
+ puts "A `VERSION` file at root level violates Gem best practices."
137
+ exit!
138
+ end
139
+ end
data/bin/cloudapp ADDED
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cloudapp'
4
+ require 'cloudapp/cli'
5
+ require 'highline'
6
+ require 'ffi-ncurses'
7
+
8
+ include FFI::NCurses
9
+
10
+ def config
11
+ CloudApp::CLI::Config.new
12
+ end
13
+
14
+ def account
15
+ require_credentials
16
+ CloudApp::Account.using_token config.token
17
+ end
18
+
19
+ def require_credentials
20
+ return unless config.token.nil?
21
+
22
+ $stdout.puts 'Sign into your CloudApp account.'
23
+
24
+ email = HighLine.new.ask('Email: ')
25
+ password = HighLine.new.ask('Password: ') {|q| q.echo = false }
26
+ config.token = CloudApp::Token.for_account email, password
27
+ end
28
+
29
+ def log(*args)
30
+ File.open('log/curses.txt', 'ab+') do |file|
31
+ file.puts args.inspect
32
+ end
33
+ end
34
+
35
+
36
+ def copy(link)
37
+ IO.popen('pbcopy', 'w') {|f| f << link }
38
+ end
39
+
40
+ def draw_drops_window(drops)
41
+ # 1 column wider than necessary to prevent wrapping also accounting for
42
+ # selection indicator.
43
+ width = drops.map {|drop| drop.name.size }.max + 3
44
+ height = drops.size * 3
45
+
46
+ wrap = newwin height + 2, width + 2, 0, 0
47
+ box wrap, 0, 0
48
+ wrefresh wrap
49
+
50
+ win = newwin height, width, 1, 1
51
+
52
+ drops.each do |drop|
53
+ drop_lines(drop).each do |line|
54
+ waddstr win, ' '
55
+ waddstr win, line
56
+ waddstr win, "\n"
57
+ end
58
+ waddstr win, "\n"
59
+ end
60
+ wrefresh win
61
+
62
+ [ win, wrap ]
63
+ end
64
+
65
+ def drop_lines(drop)
66
+ details = " #{ pretty_date(drop.created) } (#{ drop.views })"
67
+ [ drop.name, details ]
68
+ end
69
+
70
+ def select_drop(win, selected_drop, drops)
71
+ # Stay within bounds.
72
+ selected_drop = [ 0,
73
+ [ drops.size - 1, selected_drop ].min
74
+ ].max
75
+
76
+ line = selected_drop * 3
77
+ mvwaddch win, line, 0, ?>.ord
78
+ wmove win, line, 0
79
+
80
+ selected_drop
81
+ end
82
+
83
+ def pretty_date(date)
84
+ diff = (Time.now - date.to_time).to_i
85
+ case diff
86
+ when 0 then 'just now'
87
+ when 1 then 'a second ago'
88
+ when 2..59 then diff.to_s+' seconds ago'
89
+ when 60..119 then 'a minute ago' #120 = 2 minutes
90
+ when 120..3540 then (diff/60).to_i.to_s+' minutes ago'
91
+ when 3541..7100 then 'an hour ago' # 3600 = 1 hour
92
+ when 7101..82800 then ((diff+99)/3600).to_i.to_s+' hours ago'
93
+ when 82801..172000 then 'a day ago' # 86400 = 1 day
94
+ when 172001..518400 then ((diff+800)/(60*60*24)).to_i.to_s+' days ago'
95
+ when 518400..1036800 then 'a week ago'
96
+ else ((diff+180000)/(60*60*24*7)).to_i.to_s+' weeks ago'
97
+ end
98
+ end
99
+
100
+ def popup_window(parent, text)
101
+ text_width = text.lines.map{ |x| x.size }.max
102
+ text_height = text.lines.to_a.size
103
+ rows, cols = getmaxyx parent
104
+ width = text_width + 4
105
+ height = text_height + 4
106
+ col = (cols - width) / 2 - 1
107
+ row = (rows - height) / 2 - 1
108
+
109
+ space = derwin parent, height + 2, width + 2, row, col
110
+ wclear space
111
+
112
+ frame = derwin space, height, width, 1, 1
113
+ box frame, 0, 0
114
+
115
+ win = derwin frame, text_height, text_width, 2, 2
116
+ wmove win, 0, 0
117
+ waddstr win, text
118
+
119
+ wrefresh space
120
+ wrefresh frame
121
+ wrefresh win
122
+
123
+ ch = wgetch win
124
+ flushinp
125
+ ungetch ch
126
+
127
+ delwin win
128
+ delwin frame
129
+ delwin space
130
+ end
131
+
132
+
133
+ drops = account.drops(limit: 5)
134
+
135
+ begin
136
+ initscr
137
+ noecho
138
+
139
+ win, wrap = draw_drops_window drops
140
+ selected_drop = select_drop win, 0, drops
141
+
142
+ while (c = wgetch(win)) != ?q.ord
143
+ case c
144
+ when ?j.ord
145
+ selected_drop += 1
146
+ when ?k.ord
147
+ selected_drop -= 1
148
+
149
+ when ?c.ord, KEY_RETURN
150
+ link = drops[selected_drop].share_url
151
+ copy link
152
+ popup_window win, 'Copied share link.'
153
+ when ?C.ord
154
+ link = drops[selected_drop].embed_url
155
+ copy link
156
+ popup_window win, 'Copied embed link.'
157
+ when ?d.ord
158
+ link = drops[selected_drop].download_url
159
+ copy link
160
+ popup_window win, 'Copied download link.'
161
+ when ?t.ord
162
+ link = drops[selected_drop].thumbnail_url
163
+ copy link
164
+ popup_window win, 'Copied thumbnail link.'
165
+ end
166
+
167
+ delwin win
168
+ win, wrap = draw_drops_window drops
169
+ selected_drop = select_drop win, selected_drop, drops
170
+ end
171
+
172
+ delwin win
173
+
174
+ rescue => e
175
+ endwin
176
+ raise
177
+ ensure
178
+ endwin
179
+ end
@@ -0,0 +1,83 @@
1
+ ## This is the rakegem gemspec template. Make sure you read and understand
2
+ ## all of the comments. Some sections require modification, and others can
3
+ ## be deleted if you don't need them. Once you understand the contents of
4
+ ## this file, feel free to delete any comments that begin with two hash marks.
5
+ ## You can find comprehensive Gem::Specification documentation, at
6
+ ## http://docs.rubygems.org/read/chapter/20
7
+ Gem::Specification.new do |s|
8
+ s.specification_version = 2 if s.respond_to? :specification_version=
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.rubygems_version = '1.3.5'
11
+
12
+ ## Leave these as is they will be modified for you by the rake gemspec task.
13
+ ## If your rubyforge_project name is different, then edit it and comment out
14
+ ## the sub! line in the Rakefile
15
+ s.name = 'cloudapp-cli'
16
+ s.version = '1.0.0.beta.1'
17
+ s.date = '2012-08-17'
18
+ s.rubyforge_project = 'cloudapp-cli'
19
+
20
+ ## Make sure your summary is short. The description may be as long
21
+ ## as you like.
22
+ s.summary = "CloudApp CLI"
23
+ s.description = "Experience all the pleasures of sharing with CloudApp now in your terminal."
24
+
25
+ ## List the primary authors. If there are a bunch of authors, it's probably
26
+ ## better to set the email to an email list or something. If you don't have
27
+ ## a custom homepage, consider using your GitHub URL or the like.
28
+ s.authors = ["Larry Marburger"]
29
+ s.email = 'larry@marburger.cc'
30
+ s.homepage = 'https://github.com/cloudapp/cloudapp-cli'
31
+
32
+ ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
33
+ ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
34
+ s.require_paths = %w[lib]
35
+
36
+ ## If your gem includes any executables, list them here.
37
+ s.executables = ["cloudapp"]
38
+
39
+ ## Specify any RDoc options here. You'll want to add your README and
40
+ ## LICENSE files to the extra_rdoc_files list.
41
+ s.rdoc_options = ["--charset=UTF-8"]
42
+ s.extra_rdoc_files = %w[README.md MIT-LICENSE]
43
+
44
+ ## List your runtime dependencies here. Runtime dependencies are those
45
+ ## that are needed for an end user to actually USE your code.
46
+ s.add_dependency 'cloudapp', '~> 2.0.0.beta.1'
47
+ s.add_dependency 'ffi-ncurses'
48
+ s.add_dependency 'highline'
49
+
50
+ # Needed for Highline echo=false support as per
51
+ # https://github.com/JEG2/highline/issues/39
52
+ s.add_dependency 'ruby-termios'
53
+
54
+ ## List your development dependencies here. Development dependencies are
55
+ ## those that are only needed during development
56
+ s.add_development_dependency 'rake'
57
+ s.add_development_dependency 'ronn'
58
+ s.add_development_dependency 'rspec'
59
+
60
+ ## Leave this section as-is. It will be automatically generated from the
61
+ ## contents of your Git repository via the gemspec task. DO NOT REMOVE
62
+ ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
63
+ # = MANIFEST =
64
+ s.files = %w[
65
+ CHANGELOG.md
66
+ Gemfile
67
+ Gemfile.lock
68
+ MIT-LICENSE
69
+ README.md
70
+ Rakefile
71
+ bin/cloudapp
72
+ cloudapp-cli.gemspec
73
+ lib/cloudapp/cli.rb
74
+ lib/cloudapp/cli/config.rb
75
+ spec/cloudapp/cli/config_spec.rb
76
+ spec/helper.rb
77
+ ]
78
+ # = MANIFEST =
79
+
80
+ ## Test files will be grabbed from the file list. Make sure the path glob
81
+ ## matches what you actually use.
82
+ # s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
83
+ end
@@ -0,0 +1,41 @@
1
+ require 'pathname'
2
+ require 'singleton'
3
+ require 'yaml'
4
+
5
+ module CloudApp
6
+ module CLI
7
+ class Config
8
+ def initialize(path = File.expand_path('~/.cloudapprc'))
9
+ @path = path
10
+ @config = read_config
11
+ end
12
+
13
+ def token
14
+ @config[:token]
15
+ end
16
+
17
+ def token=(token)
18
+ if token
19
+ @config[:token] = token
20
+ else
21
+ @config.delete :token
22
+ end
23
+
24
+ write_config
25
+ end
26
+
27
+ private
28
+
29
+ def read_config
30
+ return {} unless File.exist?(@path)
31
+ File.open(@path) {|file| YAML.load(file) }
32
+ end
33
+
34
+ def write_config
35
+ File.open(@path, 'w', 0600) {|file|
36
+ YAML.dump @config, file
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,8 @@
1
+ require 'cloudapp'
2
+ require 'cloudapp/cli/config'
3
+
4
+ module CloudApp
5
+ module CLI
6
+ VERSION = '1.0.0.beta.1'
7
+ end
8
+ end
@@ -0,0 +1,62 @@
1
+ require 'helper'
2
+ require 'tempfile'
3
+
4
+ require 'cloudapp/cli/config'
5
+
6
+ describe CloudApp::CLI::Config do
7
+ let(:config) { {} }
8
+ let(:content) { YAML.dump(config) }
9
+ let(:path) { config_file.path }
10
+ let(:config_file) {
11
+ Tempfile.new('cloudapprc', '.').tap do |file|
12
+ file << content
13
+ file.flush
14
+ file.close
15
+ end
16
+ }
17
+
18
+ after do config_file.unlink end
19
+
20
+ describe '#new' do
21
+ subject { CloudApp::CLI::Config.new path }
22
+
23
+ describe 'an existing config file' do
24
+ let(:config) {{ token: 'token' }}
25
+
26
+ it 'reads the content' do
27
+ subject.token.should eq(config[:token])
28
+ end
29
+
30
+ it 'updates a key' do
31
+ new_token = 'new token'
32
+ subject.token = new_token
33
+ expected = YAML.dump token: new_token
34
+
35
+ content = File.open(path) {|file| file.read }
36
+ content.should eq(expected)
37
+ end
38
+
39
+ it 'clears a key' do
40
+ subject.token = nil
41
+ expected = YAML.dump({})
42
+
43
+ content = File.open(path) {|file| file.read }
44
+ content.should eq(expected)
45
+ end
46
+ end
47
+
48
+ describe 'an empty config file' do
49
+ it 'returns nil' do
50
+ subject.token.should be_nil
51
+ end
52
+ end
53
+
54
+ describe 'a nonexistent config file' do
55
+ let(:path) { 'nonexistent' }
56
+
57
+ it 'returns nil' do
58
+ subject.token.should be_nil
59
+ end
60
+ end
61
+ end
62
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'English'
2
+
3
+ root = File.expand_path('../..', __FILE__)
4
+ $LOAD_PATH.unshift(File.expand_path('lib', root))
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudapp-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta.1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Larry Marburger
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cloudapp
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.0.beta.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0.beta.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: ffi-ncurses
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
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: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: highline
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: ruby-termios
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: ronn
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Experience all the pleasures of sharing with CloudApp now in your terminal.
127
+ email: larry@marburger.cc
128
+ executables:
129
+ - cloudapp
130
+ extensions: []
131
+ extra_rdoc_files:
132
+ - README.md
133
+ - MIT-LICENSE
134
+ files:
135
+ - CHANGELOG.md
136
+ - Gemfile
137
+ - Gemfile.lock
138
+ - MIT-LICENSE
139
+ - README.md
140
+ - Rakefile
141
+ - bin/cloudapp
142
+ - cloudapp-cli.gemspec
143
+ - lib/cloudapp/cli.rb
144
+ - lib/cloudapp/cli/config.rb
145
+ - spec/cloudapp/cli/config_spec.rb
146
+ - spec/helper.rb
147
+ homepage: https://github.com/cloudapp/cloudapp-cli
148
+ licenses: []
149
+ post_install_message:
150
+ rdoc_options:
151
+ - --charset=UTF-8
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>'
164
+ - !ruby/object:Gem::Version
165
+ version: 1.3.1
166
+ requirements: []
167
+ rubyforge_project: cloudapp-cli
168
+ rubygems_version: 1.8.23
169
+ signing_key:
170
+ specification_version: 2
171
+ summary: CloudApp CLI
172
+ test_files: []