strongspace 0.0.9 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -15,33 +15,41 @@ Install:
15
15
  `gem install strongspace`
16
16
 
17
17
  Run via command line:
18
- `strongspace help`
18
+ `strongspace help` or `ss help`
19
19
 
20
20
  === General Commands
21
- help # show this usage
22
- version # show the gem version
21
+ help # show this usage
22
+ version # show the gem version
23
23
 
24
- upload <local_file> <remote_path> # upload a file
25
- download <remote_path> # download a file from Strongspace to the current directory
26
- mkdir <remote_path> # create a folder on Strongspace
27
- delete <remote_path> # delete a file or recursively delete a folder on Strongspace
24
+ upload <local_path> <remote_path> # upload a file
25
+ download <remote_path> # download a file from Strongspace to the current directory
26
+ mkdir <remote_path> # create a folder on Strongspace
27
+ delete <remote_path> # delete a file or recursively delete a folder on Strongspace
28
28
 
29
29
  === SSH Keys
30
- keys # show your user's public keys
31
- keys:add [<path to keyfile>] # add a public key
32
- keys:remove <id> # remove a key by id
33
- keys:clear # remove all keys
30
+ keys # show your user's public keys
31
+ keys:add [<keyfile_path>] # Add an public key or generate a new SSH keypair and add
32
+ keys:generate # Generate a new SSH keypair
33
+ keys:remove <id> # remove a key by id
34
+ keys:clear # remove all keys
34
35
 
35
36
  === Spaces
36
- spaces # show your user's spaces
37
- spaces:create <space_name> [type] # add a new space. type => (normal,public,backup)
38
- spaces:delete <space_name> [type] # remove a space by and destroy its data
39
- spaces:snapshots <space_name> # show a space's snapshots
40
- spaces:create_snapshot <space_name@snapshot_name> # take a space of a space.
41
- spaces:delete_snapshot <space_name@snapshot_name> # remove a snapshot from a space
42
-
43
-
44
-
37
+ spaces # show your user's spaces
38
+ spaces:create <name> [type] # add a new space. type => (normal,public,backup)
39
+ spaces:delete <name> [type] # remove a space by and destroy its data
40
+ spaces:snapshots <name> # show a space's snapshots
41
+ spaces:create_snapshot <name@snapshot_name> # take a space of a space.
42
+ spaces:delete_snapshot <name@snapshot_name> # remove a snapshot from a space
43
+
44
+ === Plugins
45
+ plugins # list installed plugins
46
+ plugins:install <url> # install the plugin from the specified git url
47
+ plugins:uninstall <url/name> # remove the specified plugin
48
+
49
+
50
+ Plugins
51
+ ------
52
+ Check out our sample [Rsync Plugin](https://github.com/expandrive/strongspace-rsync) as an example of how to add functionality
45
53
 
46
54
 
47
55
  Meta
data/bin/ss ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+
6
+ require 'strongspace'
7
+ require 'strongspace/command'
8
+
9
+ args = ARGV.dup
10
+ ARGV.clear
11
+ command = args.shift.strip rescue 'help'
12
+
13
+ Strongspace::Command.run(command, args)
14
+
@@ -16,6 +16,11 @@ module Strongspace
16
16
  def run(command, args, retries=0)
17
17
  Strongspace::Plugin.load!
18
18
  begin
19
+ # internal-only commands cannot be be run from the command line
20
+ if command.index(":_")
21
+ raise InvalidCommand
22
+ end
23
+
19
24
  run_internal 'auth:reauthorize', args.dup if retries > 0
20
25
  run_internal(command, args.dup)
21
26
  rescue InvalidCommand
@@ -33,7 +33,7 @@ module Strongspace::Command
33
33
  group.command 'help', 'show this usage'
34
34
  group.command 'version', 'show the gem version'
35
35
  group.space
36
- group.command 'upload <local_file> <remote_path>', 'upload a file'
36
+ group.command 'upload <local_path> <remote_path>', 'upload a file'
37
37
  group.command 'download <remote_path>', 'download a file from Strongspace to the current directory'
38
38
  group.command 'mkdir <remote_path>', 'create a folder on Strongspace'
39
39
  group.command 'delete <remote_path>', 'delete a file or recursively delete a folder on Strongspace'
@@ -43,10 +43,10 @@ module Strongspace::Command
43
43
  group.command 'keys', 'show your user\'s public keys'
44
44
 
45
45
  if not RUBY_PLATFORM =~ /mswin32|mingw32/
46
- group.command 'keys:add [<path to keyfile>]', 'Add an public key or generate a new SSH keypair and add'
46
+ group.command 'keys:add [<keyfile_path>]', 'Add an public key or generate a new SSH keypair and add'
47
47
  group.command 'keys:generate', 'Generate a new SSH keypair'
48
48
  else
49
- group.command 'keys:add [<path to keyfile>]', 'Add an public key'
49
+ group.command 'keys:add [<keyfile_path>]', 'Add an public key'
50
50
  end
51
51
 
52
52
  group.command 'keys:remove <id> ', 'remove a key by id'
@@ -55,11 +55,11 @@ module Strongspace::Command
55
55
 
56
56
  group 'Spaces' do |group|
57
57
  group.command 'spaces', 'show your user\'s spaces'
58
- group.command 'spaces:create <space_name> [type]', 'add a new space. type => (normal,public,backup)'
59
- group.command 'spaces:delete <space_name> [type]', 'remove a space by and destroy its data'
60
- group.command 'spaces:snapshots <space_name>', 'show a space\'s snapshots'
61
- group.command 'spaces:create_snapshot <space_name@snapshot_name>', 'take a space of a space.'
62
- group.command 'spaces:delete_snapshot <space_name@snapshot_name>', 'remove a snapshot from a space'
58
+ group.command 'spaces:create <name> [type]', 'add a new space. type => (normal,public,backup)'
59
+ group.command 'spaces:delete <name> [type]', 'remove a space by and destroy its data'
60
+ group.command 'spaces:snapshots <name>', 'show a space\'s snapshots'
61
+ group.command 'spaces:create_snapshot <name@snapshot_name>', 'take a space of a space.'
62
+ group.command 'spaces:delete_snapshot <name@snapshot_name>', 'remove a snapshot from a space'
63
63
  end
64
64
 
65
65
  group 'Plugins' do |group|
@@ -163,6 +163,36 @@ module Strongspace
163
163
  def shell(cmd)
164
164
  FileUtils.cd(Dir.pwd) {|d| return `#{cmd}`}
165
165
  end
166
+
167
+ def space_exist?(name)
168
+ strongspace.spaces["spaces"].each do |space|
169
+ # TODO: clean up the json returned by the strongspace API requests to simplify this iteration
170
+ space = space["space"]
171
+ return true if space["name"] == name
172
+ end
173
+ return false
174
+ end
175
+
176
+ def valid_space_name?(name)
177
+ # For now, just make sure the space name is all "word characters," i.e. [0-9A-Za-z_]
178
+ return false if name =~ /\W/
179
+ return true
180
+ end
181
+
182
+ def backup_space?(name)
183
+ space = nil
184
+ strongspace.spaces["spaces"].each do |s|
185
+ s = s["space"]
186
+ if s["name"] == name then
187
+ space = s
188
+ break
189
+ end
190
+ end
191
+ return space["type"] == "backup"
192
+ end
193
+
194
+
195
+
166
196
  end
167
197
  end
168
198
 
@@ -1,3 +1,3 @@
1
1
  module Strongspace
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.1"
3
3
  end
data/spec/base.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+
3
+ # ruby 1.9.2 drops . from the load path
4
+ $:.unshift File.expand_path("../..", __FILE__)
5
+
6
+ require 'spec'
7
+ require 'fileutils'
8
+ require 'tmpdir'
9
+ require 'webmock/rspec'
10
+
11
+ require 'strongspace/command'
12
+ require 'strongspace/commands/base'
13
+ Dir["#{File.dirname(__FILE__)}/../lib/strongspace/commands/*"].each { |c| require c }
14
+
15
+ include WebMock::API
16
+
17
+ def stub_api_request(method, path)
18
+ stub_request(method, "https://www.strongspace.com/api/v1#{path}")
19
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path("./base", File.dirname(__FILE__))
2
+ require "cgi"
3
+ require "strongspace/client"
4
+
5
+ describe Strongspace::Client do
6
+ before do
7
+ @client = Strongspace::Client.new(nil, nil)
8
+ end
9
+
10
+ it "Client.auth -> get user details" do
11
+ api_token = { "api_key" => "abc" }
12
+ stub_request(:get, "https://foo:bar@www.strongspace.com/api/v1/api_token").to_return(:body => api_token.to_json)
13
+ Strongspace::Client.auth("foo", "bar").should == api_token
14
+ end
15
+
16
+ it "list -> get a list of this user's apps" do
17
+ stub_api_request(:get, "/spaces").to_return(:body => <<-EOJSON)
18
+ {"spaces":[{"space":{"name":"a space", "snapshots":0, "type":"normal"}}, {"space":{"name":"diskimages", "snapshots":0, "type":"normal"}}]}
19
+ EOJSON
20
+ @client.spaces.should == {"spaces"=>[{"space"=>{"name"=>"a space", "snapshots"=>0, "type"=>"normal"}}, {"space"=>{"name"=>"diskimages", "snapshots"=>0, "type"=>"normal"}}]}
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strongspace
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
- - 9
10
- version: 0.0.9
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Strongspace
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-16 00:00:00 -05:00
18
+ date: 2011-01-11 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -33,9 +33,51 @@ dependencies:
33
33
  type: :development
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: rspec
36
+ name: ZenTest
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: autotest-growl
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: autotest-fsevent
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: rspec
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
39
81
  none: false
40
82
  requirements:
41
83
  - - ~>
@@ -47,11 +89,11 @@ dependencies:
47
89
  - 0
48
90
  version: 1.3.0
49
91
  type: :development
50
- version_requirements: *id002
92
+ version_requirements: *id005
51
93
  - !ruby/object:Gem::Dependency
52
94
  name: taps
53
95
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
96
+ requirement: &id006 !ruby/object:Gem::Requirement
55
97
  none: false
56
98
  requirements:
57
99
  - - ~>
@@ -63,11 +105,11 @@ dependencies:
63
105
  - 11
64
106
  version: 0.3.11
65
107
  type: :development
66
- version_requirements: *id003
108
+ version_requirements: *id006
67
109
  - !ruby/object:Gem::Dependency
68
110
  name: webmock
69
111
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
112
+ requirement: &id007 !ruby/object:Gem::Requirement
71
113
  none: false
72
114
  requirements:
73
115
  - - ~>
@@ -79,11 +121,11 @@ dependencies:
79
121
  - 0
80
122
  version: 1.5.0
81
123
  type: :development
82
- version_requirements: *id004
124
+ version_requirements: *id007
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: open4
85
127
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
128
+ requirement: &id008 !ruby/object:Gem::Requirement
87
129
  none: false
88
130
  requirements:
89
131
  - - ">="
@@ -93,11 +135,11 @@ dependencies:
93
135
  - 0
94
136
  version: "0"
95
137
  type: :development
96
- version_requirements: *id005
138
+ version_requirements: *id008
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: ruby-fsevent
99
141
  prerelease: false
100
- requirement: &id006 !ruby/object:Gem::Requirement
142
+ requirement: &id009 !ruby/object:Gem::Requirement
101
143
  none: false
102
144
  requirements:
103
145
  - - ">="
@@ -107,11 +149,39 @@ dependencies:
107
149
  - 0
108
150
  version: "0"
109
151
  type: :development
110
- version_requirements: *id006
152
+ version_requirements: *id009
153
+ - !ruby/object:Gem::Dependency
154
+ name: open4
155
+ prerelease: false
156
+ requirement: &id010 !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ hash: 3
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ type: :runtime
166
+ version_requirements: *id010
167
+ - !ruby/object:Gem::Dependency
168
+ name: cronedit
169
+ prerelease: false
170
+ requirement: &id011 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ hash: 3
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ type: :runtime
180
+ version_requirements: *id011
111
181
  - !ruby/object:Gem::Dependency
112
182
  name: rest-client
113
183
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
184
+ requirement: &id012 !ruby/object:Gem::Requirement
115
185
  none: false
116
186
  requirements:
117
187
  - - <
@@ -123,11 +193,11 @@ dependencies:
123
193
  - 0
124
194
  version: 1.7.0
125
195
  type: :runtime
126
- version_requirements: *id007
196
+ version_requirements: *id012
127
197
  - !ruby/object:Gem::Dependency
128
198
  name: json_pure
129
199
  prerelease: false
130
- requirement: &id008 !ruby/object:Gem::Requirement
200
+ requirement: &id013 !ruby/object:Gem::Requirement
131
201
  none: false
132
202
  requirements:
133
203
  - - <
@@ -139,16 +209,18 @@ dependencies:
139
209
  - 0
140
210
  version: 1.5.0
141
211
  type: :runtime
142
- version_requirements: *id008
212
+ version_requirements: *id013
143
213
  description: Client library and command line tool for Strongspace.
144
214
  email: support@strongspace.com
145
215
  executables:
146
216
  - strongspace
217
+ - ss
147
218
  extensions: []
148
219
 
149
220
  extra_rdoc_files: []
150
221
 
151
222
  files:
223
+ - bin/ss
152
224
  - bin/strongspace
153
225
  - lib/strongspace/client.rb
154
226
  - lib/strongspace/command.rb
@@ -166,6 +238,8 @@ files:
166
238
  - lib/strongspace/version.rb
167
239
  - lib/strongspace.rb
168
240
  - README.markdown
241
+ - spec/base.rb
242
+ - spec/client_spec.rb
169
243
  has_rdoc: true
170
244
  homepage: http://github.com/expandrive/strongspace
171
245
  licenses: []