nkryptic-sandbox 0.2.0 → 0.2.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/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/TODO +68 -13
- data/lib/sandbox/cli.rb +7 -7
- data/lib/sandbox/errors.rb +1 -0
- data/lib/sandbox/installer.rb +5 -5
- data/lib/sandbox/templates/activate_sandbox.erb +6 -0
- data/lib/sandbox/version.rb +1 -1
- data/sandbox.gemspec +3 -13
- data/spec/sandbox/cli_spec.rb +36 -0
- data/spec/sandbox/errors_spec.rb +34 -0
- data/spec/sandbox/installer_spec.rb +52 -0
- metadata +5 -39
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -15,9 +15,9 @@ begin
|
|
15
15
|
p.email = "nkryptic@gmail.com"
|
16
16
|
p.ignore_pattern = [ "tmp/*", "script/*" ]
|
17
17
|
p.development_dependencies = [
|
18
|
-
'echoe ~> 3.0',
|
19
|
-
'rspec ~> 1.1.0',
|
20
|
-
'mocha ~> 0.9',
|
18
|
+
# 'echoe ~> 3.0',
|
19
|
+
# 'rspec ~> 1.1.0',
|
20
|
+
# 'mocha ~> 0.9',
|
21
21
|
]
|
22
22
|
# p.dependencies = ['ParseTree >=2.1.1', 'ruby2ruby >=1.1.8']
|
23
23
|
end
|
data/TODO
CHANGED
@@ -1,14 +1,69 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
*
|
12
|
-
|
13
|
-
|
14
|
-
|
2
|
+
TODO: put in timeout when installing gems
|
3
|
+
TODO: check for network connection
|
4
|
+
TODO: perhaps look in installed rubygems cache first
|
5
|
+
TODO: make rubygems dependency fail immediately and gracefully?
|
6
|
+
* in bin/sandbox?
|
7
|
+
TODO: replace backticks for gem installs with open4 library?
|
8
|
+
TODO: allow for sandbox to be rerun against existing sandbox to update it?
|
9
|
+
TODO: test against various OS platforms
|
10
|
+
* BSD
|
11
|
+
* OSX
|
12
|
+
* Gentoo
|
13
|
+
* Debian/Ubuntu
|
14
|
+
* Could it work on Windows?
|
15
|
+
* ?
|
16
|
+
TODO: test against other shells
|
17
|
+
* csh
|
18
|
+
* zsh
|
19
|
+
TODO: test against other ruby versions?
|
20
|
+
* jruby
|
21
|
+
TODO: allow gem versions to be specified when installing
|
22
|
+
TODO: better documentation
|
23
|
+
* of the codebase
|
24
|
+
* in the readme
|
25
|
+
TODO: improve ui output
|
26
|
+
* use verbosity level
|
27
|
+
* include more messages about status
|
28
|
+
* move to ui class?
|
29
|
+
TODO: user config
|
30
|
+
* set list of ruby variants to query?
|
31
|
+
* list of gems to install
|
32
|
+
~/.sandbox/config
|
33
|
+
TODO: allow for install of ruby/rubygems
|
34
|
+
* how
|
35
|
+
* select dynamically?
|
36
|
+
* preset in config file?
|
37
|
+
* MRI, JRuby, Rubinius?
|
38
|
+
* each would have their own install method
|
39
|
+
* rubygems install would vary then
|
40
|
+
TODO: perhaps the following could be added to the activate script???
|
41
|
+
# function not_sourced() {
|
42
|
+
# ## ZSH source check
|
43
|
+
# test -n "$ZSH_NAME" -a "$HISTCMD" = "0" && return 0
|
44
|
+
# ## BASH source check
|
45
|
+
# test "`basename $1 2>/dev/null`" = "activate_sandbox" && return 0
|
46
|
+
# ## script was not sourced
|
47
|
+
# return 1
|
48
|
+
# }
|
49
|
+
# function exit_with_warning() {
|
50
|
+
# echo "You must source this script (ie. source bin/activate_sandbox)"
|
51
|
+
# exit 1
|
52
|
+
# }
|
53
|
+
# not_sourced $0 && exit_with_warning
|
54
|
+
# unset not_sourced
|
55
|
+
# unset exit_with_warning
|
56
|
+
|
57
|
+
# OTHER WAYS
|
58
|
+
# ====
|
59
|
+
# ONLY WORKS FOR BASH
|
60
|
+
# if [[ "$BASH_SOURCE" == "$0" ]]
|
61
|
+
# then
|
62
|
+
# echo "script was executed, not sourced"
|
63
|
+
# fi
|
64
|
+
# ====
|
65
|
+
# COULD WORK FOR BASH:
|
66
|
+
# if [ -n `readlink -f $0` ]; then
|
67
|
+
# echo "script was executed, not sourced"
|
68
|
+
# fi
|
69
|
+
|
data/lib/sandbox/cli.rb
CHANGED
@@ -122,9 +122,9 @@ module Sandbox
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
def show_help
|
126
|
-
|
127
|
-
end
|
125
|
+
# def show_help
|
126
|
+
# puts parser
|
127
|
+
# end
|
128
128
|
|
129
129
|
def long_help
|
130
130
|
unindent( <<-HELP )
|
@@ -140,14 +140,14 @@ module Sandbox
|
|
140
140
|
|
141
141
|
Running from your own gem repositories is fairly straight-forward, but
|
142
142
|
managing the necessary environment is a pain. This utility will create a new
|
143
|
-
environment which may be activated by the script `bin/
|
144
|
-
sandbox directory.
|
143
|
+
environment which may be activated by the script `bin/activate_sandbox` in
|
144
|
+
your sandbox directory.
|
145
145
|
|
146
146
|
Run the script with the following to enable your new environment:
|
147
|
-
$ source bin/
|
147
|
+
$ source bin/activate_sandbox
|
148
148
|
|
149
149
|
When you want to leave the environment:
|
150
|
-
$
|
150
|
+
$ deactivate_sandbox
|
151
151
|
|
152
152
|
NOTES:
|
153
153
|
1. It creates an environment that has its own installation directory for Gems.
|
data/lib/sandbox/errors.rb
CHANGED
data/lib/sandbox/installer.rb
CHANGED
@@ -99,10 +99,10 @@ module Sandbox
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def restore_sandbox_env
|
102
|
-
ENV.update( @old_env )
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
# ENV.update( @old_env )
|
103
|
+
ENV[ 'HOME' ] = @old_env[ 'HOME' ]
|
104
|
+
ENV[ 'GEM_HOME' ] = @old_env[ 'GEM_HOME' ]
|
105
|
+
ENV[ 'GEM_PATH' ] = @old_env[ 'GEM_PATH' ]
|
106
106
|
end
|
107
107
|
|
108
108
|
def resolve_target( path )
|
@@ -117,7 +117,7 @@ module Sandbox
|
|
117
117
|
if check_path!( base )
|
118
118
|
break
|
119
119
|
elsif base == '/'
|
120
|
-
|
120
|
+
raise "something is seriously wrong; we should never get here"
|
121
121
|
end
|
122
122
|
end
|
123
123
|
return path
|
data/lib/sandbox/version.rb
CHANGED
data/sandbox.gemspec
CHANGED
@@ -2,18 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{sandbox}
|
5
|
-
|
6
|
-
s.version = "0.2.0"
|
5
|
+
s.version = "0.2.1"
|
7
6
|
|
8
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
9
8
|
s.authors = ["Jacob Radford"]
|
10
|
-
s.date = %q{2008-12-
|
9
|
+
s.date = %q{2008-12-05}
|
11
10
|
s.default_executable = %q{sandbox}
|
12
11
|
s.description = %q{Create virtual ruby/rubygems sandboxes.}
|
13
12
|
s.email = %q{nkryptic@gmail.com}
|
14
13
|
s.executables = ["sandbox"]
|
15
14
|
s.extra_rdoc_files = ["CHANGELOG", "TODO", "README.rdoc", "tasks/rspec.rake", "tasks/cucumber.rake", "tasks/gem.rake", "tasks/dcov.rake", "lib/sandbox.rb", "lib/sandbox/installer.rb", "lib/sandbox/cli.rb", "lib/sandbox/templates/activate_sandbox.erb", "lib/sandbox/version.rb", "lib/sandbox/errors.rb", "bin/sandbox"]
|
16
|
-
s.files = ["sandbox.gemspec", "CHANGELOG", "TODO", "spec/sandbox/cli_spec.rb", "spec/sandbox/installer_spec.rb", "spec/sandbox_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "Manifest", "features/steps/common.rb", "features/steps/env.rb", "features/development.feature", "README.rdoc", "tasks/rspec.rake", "tasks/cucumber.rake", "tasks/gem.rake", "tasks/dcov.rake", "Rakefile", "lib/sandbox.rb", "lib/sandbox/installer.rb", "lib/sandbox/cli.rb", "lib/sandbox/templates/activate_sandbox.erb", "lib/sandbox/version.rb", "lib/sandbox/errors.rb", "bin/sandbox"]
|
15
|
+
s.files = ["sandbox.gemspec", "CHANGELOG", "TODO", "spec/sandbox/errors_spec.rb", "spec/sandbox/cli_spec.rb", "spec/sandbox/installer_spec.rb", "spec/sandbox_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "Manifest", "features/steps/common.rb", "features/steps/env.rb", "features/development.feature", "README.rdoc", "tasks/rspec.rake", "tasks/cucumber.rake", "tasks/gem.rake", "tasks/dcov.rake", "Rakefile", "lib/sandbox.rb", "lib/sandbox/installer.rb", "lib/sandbox/cli.rb", "lib/sandbox/templates/activate_sandbox.erb", "lib/sandbox/version.rb", "lib/sandbox/errors.rb", "bin/sandbox"]
|
17
16
|
s.has_rdoc = true
|
18
17
|
s.homepage = %q{http://github.com/nkryptic/sandbox}
|
19
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Sandbox", "--main", "README.rdoc"]
|
@@ -27,17 +26,8 @@ Gem::Specification.new do |s|
|
|
27
26
|
s.specification_version = 2
|
28
27
|
|
29
28
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
30
|
-
s.add_development_dependency(%q<echoe>, ["~> 0", "= 3.0"])
|
31
|
-
s.add_development_dependency(%q<rspec>, ["~> 0", "= 1.1.0"])
|
32
|
-
s.add_development_dependency(%q<mocha>, ["~> 0", "= 0.9"])
|
33
29
|
else
|
34
|
-
s.add_dependency(%q<echoe>, ["~> 0", "= 3.0"])
|
35
|
-
s.add_dependency(%q<rspec>, ["~> 0", "= 1.1.0"])
|
36
|
-
s.add_dependency(%q<mocha>, ["~> 0", "= 0.9"])
|
37
30
|
end
|
38
31
|
else
|
39
|
-
s.add_dependency(%q<echoe>, ["~> 0", "= 3.0"])
|
40
|
-
s.add_dependency(%q<rspec>, ["~> 0", "= 1.1.0"])
|
41
|
-
s.add_dependency(%q<mocha>, ["~> 0", "= 0.9"])
|
42
32
|
end
|
43
33
|
end
|
data/spec/sandbox/cli_spec.rb
CHANGED
@@ -47,6 +47,32 @@ describe Sandbox::CLI do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
describe "handling errors" do
|
51
|
+
it "should just print Sandbox::Error message" do
|
52
|
+
err = Sandbox::Error.new( "spec test msg" )
|
53
|
+
Sandbox::CLI.expects( :puts ).once.with( regexp_matches( /^Sandbox error: spec test msg/ ) )
|
54
|
+
Sandbox::CLI.handle_error( err )
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should just print wrapped StandardError message" do
|
58
|
+
err = StandardError.new( "spec test msg" )
|
59
|
+
Sandbox::CLI.expects( :puts ).once.with( regexp_matches( /^Error: spec test msg/ ) )
|
60
|
+
Sandbox::CLI.handle_error( err )
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should have simple message for Interrupt" do
|
64
|
+
err = Interrupt.new( "spec test msg" )
|
65
|
+
Sandbox::CLI.expects( :puts ).once.with( 'Interrupted' )
|
66
|
+
Sandbox::CLI.handle_error( err )
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should reraise other errors" do
|
70
|
+
err = NotImplementedError.new( 'you should have implemented it, dummy' )
|
71
|
+
Sandbox::CLI.expects( :raise ).once.with( err )
|
72
|
+
Sandbox::CLI.handle_error( err )
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
50
76
|
describe "a new instance" do
|
51
77
|
|
52
78
|
before( :each ) do
|
@@ -193,6 +219,16 @@ describe Sandbox::CLI do
|
|
193
219
|
|
194
220
|
end
|
195
221
|
|
222
|
+
describe "instance calling long_help" do
|
223
|
+
it "should return a long descriptive string" do
|
224
|
+
@cli.long_help.split( "\n" ).size.should be > 20
|
225
|
+
@cli.long_help.should =~ /activate_sandbox/
|
226
|
+
@cli.long_help.should =~ /deactivate_sandbox/
|
227
|
+
@cli.long_help.should =~ /NOTES:/
|
228
|
+
@cli.long_help.should =~ /WARNINGS:/
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
196
232
|
end
|
197
233
|
|
198
234
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
require File.dirname( __FILE__ ) + '/../spec_helper.rb'
|
3
|
+
|
4
|
+
describe 'new', Sandbox::Error do
|
5
|
+
it "should wrap it's message with 'Sandbox error'" do
|
6
|
+
Sandbox::Error.new( 'msg' ).message.should == 'Sandbox error: msg'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'new', Sandbox::LoadedSandboxError do
|
11
|
+
it "should have informative default msg" do
|
12
|
+
Sandbox::LoadedSandboxError.new.message.should =~ /loaded sandbox/
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'new', Sandbox::ParseError do
|
17
|
+
it "should accept reason with array" do
|
18
|
+
Sandbox::ParseError.new( 'testing', [ 1, 2, 3, 4 ] ).
|
19
|
+
message.should =~ /testing => 1 2 3 4/
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should accept reason with string" do
|
23
|
+
Sandbox::ParseError.new( 'testing', "1, 2, 3, 4" ).
|
24
|
+
message.should =~ /testing => 1, 2, 3, 4/
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should fall back to reason alone" do
|
28
|
+
Sandbox::ParseError.new( 'testing', [] ).
|
29
|
+
message.should =~ /testing$/
|
30
|
+
Sandbox::ParseError.new( 'testing', '' ).
|
31
|
+
message.should =~ /testing$/
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -130,6 +130,12 @@ describe Sandbox::Installer, "(mocked)" do
|
|
130
130
|
@installer.expects( :check_path! ).with( '/absolute' ).returns( true )
|
131
131
|
@installer.resolve_target( @path ).should == @path
|
132
132
|
end
|
133
|
+
|
134
|
+
it "should have emergency safeguard for dirname on root" do
|
135
|
+
@installer.stubs( :fix_path ).returns( '/absolute' )
|
136
|
+
@installer.expects( :check_path! ).with( '/' ).returns( false )
|
137
|
+
lambda { @installer.resolve_target( '/absolute' ) }.should raise_error( RuntimeError )
|
138
|
+
end
|
133
139
|
end
|
134
140
|
|
135
141
|
# check_path!( path )
|
@@ -180,6 +186,52 @@ describe Sandbox::Installer, "(mocked)" do
|
|
180
186
|
@installer.fix_path( path ).should == abs_path + '/' + path
|
181
187
|
end
|
182
188
|
end
|
189
|
+
|
190
|
+
# shell_out( cmd )
|
191
|
+
describe "when shell_out called" do
|
192
|
+
it "should record true when successful" do
|
193
|
+
@installer = Sandbox::Installer.new
|
194
|
+
result = @installer.shell_out( '/bin/true' )
|
195
|
+
result.first.should be_true
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should record false when unsuccessful" do
|
199
|
+
@installer = Sandbox::Installer.new
|
200
|
+
result = @installer.shell_out( '/bin/false' )
|
201
|
+
result.first.should_not be_true
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should record std output" do
|
205
|
+
@installer = Sandbox::Installer.new
|
206
|
+
result = @installer.shell_out( 'ls -d /' )
|
207
|
+
result.last.chomp.should == '/'
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should ignore std error" do
|
211
|
+
@installer = Sandbox::Installer.new
|
212
|
+
result = @installer.shell_out( 'ls -d / 1>&2' )
|
213
|
+
result.last.chomp.should == ''
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe "setup and restore sandbox env called" do
|
218
|
+
it "should set and restore the environment" do
|
219
|
+
orig_home = ENV[ 'HOME' ]
|
220
|
+
orig_gem_home = ENV[ 'GEM_HOME' ]
|
221
|
+
orig_gem_path = ENV[ 'GEM_PATH' ]
|
222
|
+
@installer = Sandbox::Installer.new
|
223
|
+
@installer.stubs( :target ).returns( 'dummypath' )
|
224
|
+
|
225
|
+
@installer.setup_sandbox_env
|
226
|
+
ENV[ 'HOME' ].should == 'dummypath'
|
227
|
+
ENV[ 'GEM_HOME' ].should == 'dummypath/rubygems'
|
228
|
+
ENV[ 'GEM_PATH' ].should == 'dummypath/rubygems'
|
229
|
+
@installer.restore_sandbox_env
|
230
|
+
ENV[ 'HOME' ].should == orig_home
|
231
|
+
ENV[ 'GEM_HOME' ].should == orig_gem_home
|
232
|
+
ENV[ 'GEM_PATH' ].should == orig_gem_path
|
233
|
+
end
|
234
|
+
end
|
183
235
|
end
|
184
236
|
end
|
185
237
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nkryptic-sandbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Radford
|
@@ -9,45 +9,10 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-05 00:00:00 -08:00
|
13
13
|
default_executable: sandbox
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: echoe
|
17
|
-
version_requirement:
|
18
|
-
version_requirements: !ruby/object:Gem::Requirement
|
19
|
-
requirements:
|
20
|
-
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: "0"
|
23
|
-
- - "="
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: "3.0"
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
|
-
version_requirement:
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: "0"
|
35
|
-
- - "="
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 1.1.0
|
38
|
-
version:
|
39
|
-
- !ruby/object:Gem::Dependency
|
40
|
-
name: mocha
|
41
|
-
version_requirement:
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: "0"
|
47
|
-
- - "="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: "0.9"
|
50
|
-
version:
|
14
|
+
dependencies: []
|
15
|
+
|
51
16
|
description: Create virtual ruby/rubygems sandboxes.
|
52
17
|
email: nkryptic@gmail.com
|
53
18
|
executables:
|
@@ -73,6 +38,7 @@ files:
|
|
73
38
|
- sandbox.gemspec
|
74
39
|
- CHANGELOG
|
75
40
|
- TODO
|
41
|
+
- spec/sandbox/errors_spec.rb
|
76
42
|
- spec/sandbox/cli_spec.rb
|
77
43
|
- spec/sandbox/installer_spec.rb
|
78
44
|
- spec/sandbox_spec.rb
|