gemenv 0.0.1 → 0.0.3
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.md +20 -11
- data/lib/gemenv.rb +2 -1
- data/lib/gemenv/activate.erb +5 -9
- data/lib/gemenv/activate_script.rb +2 -13
- data/lib/gemenv/env_dir.rb +9 -15
- data/lib/gemenv/exec.erb +5 -0
- data/lib/gemenv/exec_script.rb +12 -0
- data/lib/gemenv/generated_script.rb +52 -0
- data/lib/gemenv/version.rb +1 -1
- metadata +8 -5
data/README.md
CHANGED
@@ -9,16 +9,16 @@ Introduction
|
|
9
9
|
gemenv is a tool to build rubygem environments, in the spirit of
|
10
10
|
Python's virtualenv. It creates a directory with a complete GEM\_HOME
|
11
11
|
to contain all of your project's gems. It also contains an activation
|
12
|
-
script to enable this environment
|
12
|
+
script to enable this environment, and an executor to run subshells
|
13
|
+
(or anything else) with the right environment variables set.
|
13
14
|
|
14
15
|
Here's an example session:
|
15
16
|
|
16
17
|
$ cd /tmp
|
17
18
|
$ gemenv my-new-env
|
18
19
|
$ ls my-new-env
|
19
|
-
bin/
|
20
|
+
bin/ gem_home
|
20
21
|
$ source my-new-env/bin/activate
|
21
|
-
{gemenv:my-new-env}
|
22
22
|
$ gem install rake
|
23
23
|
Fetching: rake-10.0.3.gem (100%)
|
24
24
|
Successfully installed rake-10.0.3
|
@@ -26,25 +26,34 @@ Here's an example session:
|
|
26
26
|
Installing ri documentation for rake-10.0.3...
|
27
27
|
Installing RDoc documentation for rake-10.0.3...
|
28
28
|
{gemenv:my-new-env}
|
29
|
-
$ ls my-new-env/
|
29
|
+
$ ls my-new-env/gem_home/gems
|
30
30
|
rake-10.0.3
|
31
|
-
{gemenv:my-new-env}
|
32
31
|
$ which rake
|
33
32
|
/tmp/my-new-env/gem_home/bin/rake
|
33
|
+
$ echo $VIRTUAL_ENV
|
34
|
+
/tmp/my-new-env
|
35
|
+
|
34
36
|
|
35
37
|
You can see that sourcing the activate script does three things:
|
36
38
|
|
37
|
-
1. It
|
38
|
-
2. It sets GEM\_HOME so that gem installations go into the environment,
|
39
|
+
1. It sets GEM\_HOME so that gem installations go into the environment,
|
39
40
|
not your home or system GEM\_HOME
|
40
|
-
|
41
|
+
2. It adds the GEM\_HOME bin/ directory to your $PATH so that
|
41
42
|
gem-installed binaries are available.
|
43
|
+
3. It adds a VIRTUAL\_ENV environment variable that you can strap into
|
44
|
+
PS1 if you wish.
|
42
45
|
|
43
|
-
This is (almost) all it does. There is currently no way to deactivate
|
44
|
-
gemenv environment
|
46
|
+
This is (almost) all it does. There is currently no way to deactivate
|
47
|
+
a gemenv environment activated by bin/activate. If you want a
|
48
|
+
deactivatable environment, use bin/exec:
|
49
|
+
|
50
|
+
$ my-new-env/bin/exec /bin/bash
|
45
51
|
|
46
52
|
Anything which respects GEM\_HOME should work with gemenv, so you can,
|
47
53
|
for instance, use bundler to install gems into a gemenv.
|
48
54
|
|
49
|
-
|
55
|
+
The activation script currently overwrites GEM_PATH, so gemenv does
|
56
|
+
not currently support "global" gems.
|
57
|
+
|
58
|
+
--
|
50
59
|
Alex Young <alex@bytemark.co.uk>
|
data/lib/gemenv.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'gemenv/activate_script'
|
4
|
+
require 'gemenv/exec_script'
|
4
5
|
require 'gemenv/env_dir'
|
5
6
|
|
6
7
|
module Gemenv
|
@@ -12,7 +13,7 @@ module Gemenv
|
|
12
13
|
def run
|
13
14
|
raise "Need an env dir!" unless @env_dir
|
14
15
|
full_env_dir = File.expand_path( @env_dir )
|
15
|
-
EnvDir.new( full_env_dir, ActivateScript ).make
|
16
|
+
EnvDir.new( full_env_dir, ActivateScript, ExecScript ).make
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
data/lib/gemenv/activate.erb
CHANGED
@@ -1,18 +1,14 @@
|
|
1
|
-
|
2
|
-
export VIRTUAL_ENV
|
1
|
+
# Pick this up in $PS1 if you want
|
2
|
+
export VIRTUAL_ENV="<%= @env_path %>"
|
3
3
|
|
4
|
-
PATH="$VIRTUAL_ENV/gem_home/bin:$PATH"
|
5
|
-
export PATH
|
4
|
+
export PATH="$VIRTUAL_ENV/gem_home/bin:$PATH"
|
6
5
|
|
7
6
|
if [ -n "$GEM_HOME" ]; then
|
8
7
|
unset GEM_HOME
|
9
8
|
fi
|
10
9
|
|
11
|
-
GEM_HOME=$VIRTUAL_ENV/gem_home
|
12
|
-
export
|
13
|
-
GEM_PATH=$(gem env home)
|
14
|
-
|
15
|
-
PS1="{gemenv:$(basename $VIRTUAL_ENV)} $PS1"
|
10
|
+
export GEM_HOME=$VIRTUAL_ENV/gem_home
|
11
|
+
export GEM_PATH=$(gem env home)
|
16
12
|
|
17
13
|
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
|
18
14
|
hash -r 2> /dev/null
|
@@ -1,18 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'gemenv/generated_script'
|
3
3
|
|
4
4
|
module Gemenv
|
5
|
-
class ActivateScript
|
6
|
-
def initialize( env_dir )
|
7
|
-
@env_dir = env_dir
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_bash
|
11
|
-
here = File.dirname( __FILE__ )
|
12
|
-
template_filename = File.join( here, "activate.erb" )
|
13
|
-
template = File.read( template_filename )
|
14
|
-
ERB.new( template ).result( binding )
|
15
|
-
end
|
16
|
-
|
5
|
+
class ActivateScript < GeneratedScript
|
17
6
|
end
|
18
7
|
end
|
data/lib/gemenv/env_dir.rb
CHANGED
@@ -44,23 +44,25 @@ module Gemenv
|
|
44
44
|
class EnvDir
|
45
45
|
attr_reader :path
|
46
46
|
|
47
|
-
def initialize( env_dir,
|
47
|
+
def initialize( env_dir, *script_classes )
|
48
48
|
@path = Path.new( env_dir )
|
49
|
-
@
|
49
|
+
@script_classes = script_classes
|
50
50
|
end
|
51
51
|
|
52
52
|
def make
|
53
|
+
scripts = make_scripts( @path, @script_classes )
|
54
|
+
|
53
55
|
@path.mkdir_p
|
54
|
-
|
55
|
-
|
56
|
+
scripts.each do |script| script.render end
|
57
|
+
|
56
58
|
make_gem_home()
|
57
59
|
self
|
58
60
|
end
|
59
61
|
|
60
62
|
private
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
|
64
|
+
def make_scripts( env_path, script_classes )
|
65
|
+
script_classes.map { |cls| cls.new( env_path ) }
|
64
66
|
end
|
65
67
|
|
66
68
|
|
@@ -69,18 +71,10 @@ module Gemenv
|
|
69
71
|
end
|
70
72
|
|
71
73
|
|
72
|
-
def activate_path
|
73
|
-
@path/"bin"/"activate"
|
74
|
-
end
|
75
|
-
|
76
74
|
def gem_home_path
|
77
75
|
@path/"gem_home"
|
78
76
|
end
|
79
77
|
|
80
|
-
def activate_contents
|
81
|
-
@script_class.new( @path ).to_bash
|
82
|
-
end
|
83
|
-
|
84
78
|
|
85
79
|
end
|
86
80
|
end
|
data/lib/gemenv/exec.erb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module Gemenv
|
6
|
+
class GeneratedScript
|
7
|
+
def self.template_basename
|
8
|
+
self.target_basename + ".erb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.target_basename
|
12
|
+
self.name.split("::").last.
|
13
|
+
sub("Script", '').
|
14
|
+
gsub(/([a-z])([A-Z])/, '\1_\2').
|
15
|
+
downcase
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def self.template
|
20
|
+
here = File.dirname( __FILE__ )
|
21
|
+
template_filename = File.join( here, template_basename )
|
22
|
+
template = File.read( template_filename )
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
attr_reader :env_path
|
27
|
+
|
28
|
+
def initialize( env_path )
|
29
|
+
@env_path = env_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_bash
|
33
|
+
ERB.new( self.class.template ).result( binding )
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def mkdir
|
38
|
+
target_filename.dirname.mkdir_p
|
39
|
+
end
|
40
|
+
|
41
|
+
def target_filename
|
42
|
+
env_path/"bin"/self.class.target_basename
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def render
|
47
|
+
mkdir
|
48
|
+
target_filename.write( to_bash )
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/gemenv/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
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:
|
12
|
+
date: 2013-03-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Gemenv provides a container for your gems, and otherwise stays out of
|
15
15
|
your way.
|
@@ -21,10 +21,13 @@ extensions: []
|
|
21
21
|
extra_rdoc_files: []
|
22
22
|
files:
|
23
23
|
- bin/gemenv
|
24
|
-
- lib/gemenv/env_dir.rb
|
25
24
|
- lib/gemenv/activate_script.rb
|
26
|
-
- lib/gemenv/activate.erb
|
27
25
|
- lib/gemenv/version.rb
|
26
|
+
- lib/gemenv/generated_script.rb
|
27
|
+
- lib/gemenv/activate.erb
|
28
|
+
- lib/gemenv/env_dir.rb
|
29
|
+
- lib/gemenv/exec.erb
|
30
|
+
- lib/gemenv/exec_script.rb
|
28
31
|
- lib/gemenv.rb
|
29
32
|
- LICENSE.txt
|
30
33
|
- README.md
|
@@ -48,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
51
|
version: 1.3.6
|
49
52
|
requirements: []
|
50
53
|
rubyforge_project: gemenv
|
51
|
-
rubygems_version: 1.8.
|
54
|
+
rubygems_version: 1.8.25
|
52
55
|
signing_key:
|
53
56
|
specification_version: 3
|
54
57
|
summary: The best way to contain your dependencies
|