fnando-renv 0.0.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.markdown ADDED
@@ -0,0 +1,83 @@
1
+ Renv
2
+ ====
3
+
4
+ Renv is a simple and dumb environment manager for RubyGems.
5
+
6
+ Install Renv:
7
+
8
+ sudo gem install fnando-renv --source=http://gems.github.com
9
+
10
+ Or
11
+
12
+ git clone git://github.com/fnando/renv.git
13
+ cd renv
14
+ rake gem:install
15
+
16
+ Then put this on your `~/.bash_profile`:
17
+
18
+ export RENVDIR="$HOME/.renv"
19
+ export PATH="$PATH:$RENVDIR/active/bin"
20
+ export GEM_HOME="$RENVDIR/active/lib"
21
+
22
+ Reload your profile with `source ~/.bash_profile`.
23
+
24
+ Here's the supported commands
25
+
26
+ renv use base
27
+ #=> create and switch to "base" environment
28
+
29
+ renv install json -v 1.1.3
30
+ #=> install json 1.1.3
31
+
32
+ renv uninstall json
33
+ #=> uninstall json
34
+
35
+ renv env
36
+ #=> display current environment
37
+
38
+ renv clone base mycopy
39
+ #=> duplicate an environment as mycopy
40
+
41
+ renv delete mycopy
42
+ #=> remove the environment
43
+
44
+ renv list
45
+ #=> list all environments
46
+
47
+ renv gems
48
+ #=> list all installed gems in the current environment
49
+
50
+ To get all available commands, run `renv help`.
51
+
52
+ **Note:** I implemented Renv because I needed something for 3 projects I'm currently
53
+ working on. I tried [Rip](http://hellorip.com) but Rip uses `gem unpack` for now
54
+ and I couldn't make it install old gems versions.
55
+
56
+ MAINTAINER
57
+ ----------
58
+
59
+ * Nando Vieira ([http://simplesideias.com.br](http://simplesideias.com.br))
60
+
61
+ LICENSE:
62
+ --------
63
+
64
+ (The MIT License)
65
+
66
+ Permission is hereby granted, free of charge, to any person obtaining
67
+ a copy of this software and associated documentation files (the
68
+ 'Software'), to deal in the Software without restriction, including
69
+ without limitation the rights to use, copy, modify, merge, publish,
70
+ distribute, sublicense, and/or sell copies of the Software, and to
71
+ permit persons to whom the Software is furnished to do so, subject to
72
+ the following conditions:
73
+
74
+ The above copyright notice and this permission notice shall be
75
+ included in all copies or substantial portions of the Software.
76
+
77
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
78
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
79
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
80
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
81
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
82
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
83
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,73 @@
1
+ require "rake"
2
+ require File.dirname(__FILE__) + "/lib/renv"
3
+
4
+ PKG_FILES = %w(Rakefile renv.gemspec README.markdown) + Dir["{bin,lib}/**/*"]
5
+
6
+ spec = Gem::Specification.new do |s|
7
+ s.name = "renv"
8
+ s.version = Renv::VERSION
9
+ s.summary = "Renv is a simple and dumb environment manager for RubyGems."
10
+ s.authors = ["Nando Vieira"]
11
+ s.email = ["fnando.vieira@gmail.com"]
12
+ s.homepage = "http://github.com/fnando/renv"
13
+ s.has_rdoc = false
14
+ s.files = PKG_FILES
15
+ s.bindir = "bin"
16
+ s.executables = "renv"
17
+
18
+ s.add_dependency "rubigen"
19
+ s.add_dependency "main"
20
+ end
21
+
22
+ namespace :gem do
23
+ # Thanks to the Merb project for this code.
24
+ desc "Update Github Gemspec"
25
+ task :update_gemspec do
26
+ skip_fields = %w(new_platform original_platform specification_version loaded required_ruby_version rubygems_version platform )
27
+
28
+ result = "# WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!\n"
29
+ result << "# RUN : 'rake gem:update_gemspec'\n\n"
30
+ result << "Gem::Specification.new do |s|\n"
31
+
32
+ spec.instance_variables.each do |ivar|
33
+ value = spec.instance_variable_get(ivar)
34
+ name = ivar.split("@").last
35
+ next if name == "date"
36
+
37
+ next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
38
+ if name == "dependencies"
39
+ value.each do |d|
40
+ dep, *ver = d.to_s.split(" ")
41
+ result << " s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "").gsub(", runtime", "")}\n"
42
+ end
43
+ else
44
+ case value
45
+ when Array
46
+ value = name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
47
+ when FalseClass
48
+ when TrueClass
49
+ when Fixnum
50
+ when String
51
+ value = value.inspect
52
+ else
53
+ value = value.to_s.inspect
54
+ end
55
+ result << " s.#{name} = #{value}\n"
56
+ end
57
+ end
58
+
59
+ result << "end"
60
+ File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
61
+ end
62
+
63
+ desc "Build gem"
64
+ task :build => [:update_gemspec] do
65
+ system "gem build #{spec.instance_variable_get('@name')}.gemspec"
66
+ end
67
+
68
+ desc "Install gem"
69
+ task :install => [:update_gemspec, :build] do
70
+ system "sudo gem install #{spec.instance_variable_get('@name')}"
71
+ system "rm *.gem"
72
+ end
73
+ end
data/bin/renv ADDED
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "main"
5
+ require File.dirname(__FILE__) + "/../lib/renv"
6
+
7
+ Main {
8
+ description <<-TXT
9
+ The 'renv' command handles RubyGems environments.
10
+
11
+ VERSION: #{Renv::VERSION}
12
+
13
+ USAGE: renv help [command]
14
+ TXT
15
+
16
+ mode(:use) {
17
+ description <<-TXT
18
+ Create and use a new environment
19
+ TXT
20
+
21
+ examples <<-TXT
22
+ * renv use base
23
+ * renv use simplesideias
24
+ TXT
25
+
26
+ argument(:name) {
27
+ attr
28
+ }
29
+
30
+ run { Renv::Env.setup(name) }
31
+ }
32
+
33
+ mode(:clone) {
34
+ description <<-TXT
35
+ Clone a existing environment
36
+ TXT
37
+
38
+ examples <<-TXT
39
+ * renv clone [source] [destiny]
40
+ * renv clone base simplesideias
41
+ TXT
42
+
43
+ argument(:source) {
44
+ attr
45
+ }
46
+
47
+ argument(:destiny) {
48
+ attr
49
+ }
50
+
51
+ run { Renv::Env.clone(:source => source, :destiny => destiny) }
52
+ }
53
+
54
+ mode(:list) {
55
+ description <<-TXT
56
+ List all environments
57
+ TXT
58
+
59
+ examples <<-TXT
60
+ * renv list
61
+ TXT
62
+
63
+ run { Renv::Env.list }
64
+ }
65
+
66
+ mode(:env) {
67
+ description <<-TXT
68
+ Display current environment
69
+ TXT
70
+
71
+ examples <<-TXT
72
+ * renv env
73
+ TXT
74
+
75
+ run {
76
+ puts "Current environment: #{Renv.env}"
77
+ }
78
+ }
79
+
80
+ mode(:gems) {
81
+ description <<-TXT
82
+ List all environment installed gems
83
+ TXT
84
+
85
+ examples <<-TXT
86
+ * renv gems
87
+ TXT
88
+
89
+ run { Renv::Gem.list }
90
+ }
91
+
92
+ mode(:delete) {
93
+ description <<-TXT
94
+ Remove an environment
95
+ TXT
96
+
97
+ examples <<-TXT
98
+ * renv delete base
99
+ TXT
100
+
101
+ argument(:name) {
102
+ attr
103
+ }
104
+
105
+ run { Renv::Env.delete(name) }
106
+ }
107
+
108
+ mode(:install) {
109
+ description <<-TXT
110
+ Install a new RubyGem.
111
+ TXT
112
+
113
+ examples <<-TXT
114
+ * renv install json
115
+ * renv install json --version=1.1.3
116
+ TXT
117
+
118
+ argument(:name) {
119
+ attr
120
+ }
121
+
122
+ option(:version, :v) {
123
+ optional
124
+ argument :required
125
+ desc "Gem version"
126
+ attr
127
+ }
128
+
129
+ run { Renv::Gem.install(:name => name, :version => version) }
130
+ }
131
+
132
+ mode(:uninstall) {
133
+ description <<-TXT
134
+ Uninstall a RubyGem.
135
+ TXT
136
+
137
+ examples <<-TXT
138
+ * renv uninstall json
139
+ * renv uninstall json --version=1.1.3
140
+ TXT
141
+
142
+ argument(:name) {
143
+ attr
144
+ }
145
+
146
+ option(:version, :v) {
147
+ optional
148
+ argument :required
149
+ desc "Gem version"
150
+ attr
151
+ }
152
+
153
+ run { Renv::Gem.uninstall(:name => name, :version => version) }
154
+ }
155
+
156
+ run { help! }
157
+ }
data/lib/renv.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Renv
2
+ extend self
3
+
4
+ VERSION = "0.0.1"
5
+
6
+ def dir
7
+ ENV["RENVDIR"] || File.expand_path("~/.renv")
8
+ end
9
+
10
+ def env
11
+ file = File.join(Renv.dir, "env")
12
+ exit 1 unless File.file?(file)
13
+ File.read(file)
14
+ end
15
+ end
16
+
17
+ # add renv lib to load path
18
+ $LOAD_PATH << File.dirname(__FILE__)
19
+
20
+ require "FileUtils" unless defined?(FileUtils)
21
+ require "renv/env"
22
+ require "renv/gem"
data/lib/renv/env.rb ADDED
@@ -0,0 +1,86 @@
1
+ module Renv
2
+ module Env
3
+ extend self
4
+
5
+ def setup(environment)
6
+ create_root
7
+ use(environment)
8
+ end
9
+
10
+ def clone(options)
11
+ unless File.exists?(File.join(Renv.dir, options[:source]))
12
+ puts "source environment doesn't exist"
13
+ exit 1
14
+ end
15
+
16
+ if File.exists?(File.join(Renv.dir, options[:destiny]))
17
+ puts "destiny environment already exist"
18
+ exit 1
19
+ end
20
+
21
+ FileUtils.cp_r(File.join(Renv.dir, options[:source]), File.join(Renv.dir, options[:destiny]))
22
+ use options[:destiny]
23
+ end
24
+
25
+ def list
26
+ envs = Dir.entries(Renv.dir).reject do |d|
27
+ %w(. .. active env).include?(d) || !File.directory?(File.join(Renv.dir, d))
28
+ end
29
+
30
+ if envs.empty?
31
+ puts "no environments created"
32
+ else
33
+ puts envs.join(", ")
34
+ end
35
+ end
36
+
37
+ def delete(environment)
38
+ if Renv.env == environment
39
+ puts "cannot remove active environment"
40
+ exit 1
41
+ end
42
+
43
+ puts "removing #{environment.inspect} environment"
44
+ FileUtils.rm_rf File.join(Renv.dir, environment)
45
+ puts "done!"
46
+ end
47
+
48
+ def create
49
+ target = File.join(Renv.dir, Renv.env)
50
+
51
+ unless File.directory?(target)
52
+ puts "creating #{Renv.env.inspect} environment"
53
+ FileUtils.mkdir_p(target)
54
+ end
55
+ end
56
+
57
+ def create_root
58
+ unless File.directory?(Renv.dir)
59
+ puts "creating ~/.renv"
60
+ FileUtils.mkdir_p(Renv.dir)
61
+ end
62
+ end
63
+
64
+ def use(environment)
65
+ if %w(active env).include?(environment)
66
+ puts "#{environment.inspect} cannot be used as environment name"
67
+ exit 1
68
+ end
69
+
70
+ puts "activating #{environment.inspect} environment"
71
+ File.open(File.join(Renv.dir, "env"), "w+") do |f|
72
+ f << environment
73
+ end
74
+
75
+ create
76
+ symlink
77
+ puts "done!"
78
+ end
79
+
80
+ def symlink
81
+ dir = File.join(Renv.dir, "active")
82
+ FileUtils.rm_rf(dir) if File.directory?(dir)
83
+ FileUtils.ln_s(File.join(Renv.dir, Renv.env), dir)
84
+ end
85
+ end
86
+ end
data/lib/renv/gem.rb ADDED
@@ -0,0 +1,36 @@
1
+ module Renv
2
+ module Gem
3
+ extend self
4
+
5
+ def install(options)
6
+ cmd = "gem install #{options[:name]}"
7
+ cmd << " --no-rdoc --no-ri"
8
+ cmd << " -i #{File.join(Renv.dir, Renv.env)}/lib"
9
+ cmd << " -n #{File.join(Renv.dir, Renv.env)}/bin"
10
+ cmd << " --version=#{options[:version]}" if options[:version]
11
+
12
+ system cmd
13
+ end
14
+
15
+ def uninstall(options)
16
+ puts "uninstalling gem with #{options.inspect}"
17
+ cmd = "gem uninstall #{options[:name]}"
18
+ cmd << " -i #{File.join(Renv.dir, Renv.env)}/lib"
19
+ cmd << " -n #{File.join(Renv.dir, Renv.env)}/bin"
20
+ cmd << " --version=#{options[:version]}" if options[:version]
21
+
22
+ system cmd
23
+ end
24
+
25
+ def list
26
+ dir = File.join(Renv.dir, Renv.env, "lib", "gems")
27
+ gems = Dir.entries(dir).reject {|d| %w(. ..).include?(d) }
28
+
29
+ if gems.empty?
30
+ puts "no gems installed"
31
+ else
32
+ puts gems.join(", ")
33
+ end
34
+ end
35
+ end
36
+ end
data/renv.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!
2
+ # RUN : 'rake gem:update_gemspec'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.required_rubygems_version = ">= 0"
6
+ s.has_rdoc = true
7
+ s.email = ["fnando.vieira@gmail.com"]
8
+ s.name = "renv"
9
+ s.homepage = "http://github.com/fnando/renv"
10
+ s.bindir = "bin"
11
+ s.executables = ["renv"]
12
+ s.summary = "Renv is a simple and dumb environment manager for RubyGems."
13
+ s.add_dependency "rubigen", ">= 0"
14
+ s.add_dependency "main", ">= 0"
15
+ s.version = "0.0.1"
16
+ s.require_paths = ["lib"]
17
+ s.files = ["Rakefile",
18
+ "renv.gemspec",
19
+ "README.markdown",
20
+ "bin/renv",
21
+ "lib/renv",
22
+ "lib/renv/env.rb",
23
+ "lib/renv/gem.rb",
24
+ "lib/renv.rb"]
25
+ s.authors = ["Nando Vieira"]
26
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fnando-renv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nando Vieira
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-16 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubigen
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: main
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description:
36
+ email:
37
+ - fnando.vieira@gmail.com
38
+ executables:
39
+ - renv
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - Rakefile
46
+ - renv.gemspec
47
+ - README.markdown
48
+ - bin/renv
49
+ - lib/renv
50
+ - lib/renv/env.rb
51
+ - lib/renv/gem.rb
52
+ - lib/renv.rb
53
+ has_rdoc: true
54
+ homepage: http://github.com/fnando/renv
55
+ post_install_message:
56
+ rdoc_options: []
57
+
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: "0"
71
+ version:
72
+ requirements: []
73
+
74
+ rubyforge_project:
75
+ rubygems_version: 1.2.0
76
+ signing_key:
77
+ specification_version: 2
78
+ summary: Renv is a simple and dumb environment manager for RubyGems.
79
+ test_files: []
80
+