gemrage 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/Gemfile +2 -0
  2. data/Gemfile.lock +5 -0
  3. data/VERSION +1 -1
  4. data/gemrage.gemspec +148 -3
  5. data/lib/rubygems/commands/scan_command.rb +77 -4
  6. data/vendor/ruby/1.8/bin/rvm-install +19 -0
  7. data/vendor/ruby/1.8/cache/macaddr-1.0.0.gem +0 -0
  8. data/vendor/ruby/1.8/cache/rvm-1.0.14.gem +0 -0
  9. data/vendor/ruby/1.8/gems/macaddr-1.0.0/README +33 -0
  10. data/vendor/ruby/1.8/gems/macaddr-1.0.0/gemspec.rb +27 -0
  11. data/vendor/ruby/1.8/gems/macaddr-1.0.0/install.rb +210 -0
  12. data/vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb +69 -0
  13. data/vendor/ruby/1.8/gems/rvm-1.0.14/LICENCE +18 -0
  14. data/vendor/ruby/1.8/gems/rvm-1.0.14/README +127 -0
  15. data/vendor/ruby/1.8/gems/rvm-1.0.14/bin/rvm-install +5 -0
  16. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm +76 -0
  17. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm-auto-ruby +24 -0
  18. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm-prompt +204 -0
  19. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm-shell +35 -0
  20. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm-update-head +35 -0
  21. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvm-update-latest +27 -0
  22. data/vendor/ruby/1.8/gems/rvm-1.0.14/binscripts/rvmsudo +24 -0
  23. data/vendor/ruby/1.8/gems/rvm-1.0.14/config/db +71 -0
  24. data/vendor/ruby/1.8/gems/rvm-1.0.14/config/known +55 -0
  25. data/vendor/ruby/1.8/gems/rvm-1.0.14/config/md5 +87 -0
  26. data/vendor/ruby/1.8/gems/rvm-1.0.14/contrib/gemset_snapshot +25 -0
  27. data/vendor/ruby/1.8/gems/rvm-1.0.14/contrib/install-system-wide +191 -0
  28. data/vendor/ruby/1.8/gems/rvm-1.0.14/contrib/r +44 -0
  29. data/vendor/ruby/1.8/gems/rvm-1.0.14/examples/rvmrc +47 -0
  30. data/vendor/ruby/1.8/gems/rvm-1.0.14/gemsets/default.gems +1 -0
  31. data/vendor/ruby/1.8/gems/rvm-1.0.14/gemsets/global.gems +1 -0
  32. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/alias +46 -0
  33. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/benchmark +17 -0
  34. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/cleanup +23 -0
  35. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/debug +8 -0
  36. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/disk-usage +15 -0
  37. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/docs +22 -0
  38. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/exec +33 -0
  39. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/fetch +5 -0
  40. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/gem +0 -0
  41. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/gemdir +0 -0
  42. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/gemset +0 -0
  43. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/implode +0 -0
  44. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/info +64 -0
  45. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/install +0 -0
  46. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/list +0 -0
  47. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/migrate +15 -0
  48. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/monitor +0 -0
  49. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/notes +0 -0
  50. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/package +0 -0
  51. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/rake +14 -0
  52. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/remove +0 -0
  53. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/repair +23 -0
  54. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/reset +0 -0
  55. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/ruby +84 -0
  56. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/rubygems +11 -0
  57. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/rvmrc +34 -0
  58. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/snapshot +15 -0
  59. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/specs +0 -0
  60. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/srcdir +0 -0
  61. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/tests +0 -0
  62. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/tools +22 -0
  63. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/uninstall +0 -0
  64. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/update +0 -0
  65. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/upgrade +18 -0
  66. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/use +0 -0
  67. data/vendor/ruby/1.8/gems/rvm-1.0.14/help/wrapper +41 -0
  68. data/vendor/ruby/1.8/gems/rvm-1.0.14/install +631 -0
  69. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/VERSION.yml +4 -0
  70. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/capistrano.rb +45 -0
  71. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/alias.rb +69 -0
  72. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/cleanup.rb +54 -0
  73. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/configuration.rb +60 -0
  74. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/env.rb +52 -0
  75. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/gemset.rb +222 -0
  76. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/info.rb +13 -0
  77. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/list.rb +124 -0
  78. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/rubies.rb +50 -0
  79. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/sets.rb +123 -0
  80. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/tools.rb +68 -0
  81. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/utility.rb +173 -0
  82. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment/wrapper.rb +23 -0
  83. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/environment.rb +64 -0
  84. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/errors.rb +31 -0
  85. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/install_command_dumper.rb +51 -0
  86. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/abstract_wrapper.rb +145 -0
  87. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/calculate_rvm_path.sh +26 -0
  88. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/result.rb +42 -0
  89. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/shell_wrapper.sh +10 -0
  90. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/single_shot_wrapper.rb +56 -0
  91. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell/utility.rb +37 -0
  92. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/shell.rb +25 -0
  93. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm/version.rb +19 -0
  94. data/vendor/ruby/1.8/gems/rvm-1.0.14/lib/rvm.rb +156 -0
  95. data/vendor/ruby/1.8/gems/rvm-1.0.14/man/man1/rvm.1 +385 -0
  96. data/vendor/ruby/1.8/gems/rvm-1.0.14/man/man1/rvm.1.gz +0 -0
  97. data/vendor/ruby/1.8/gems/rvm-1.0.14/rvm.gemspec +184 -0
  98. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/alias +225 -0
  99. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/aliases +4 -0
  100. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/array +32 -0
  101. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/base +49 -0
  102. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/cd +87 -0
  103. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/cleanup +58 -0
  104. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/cli +781 -0
  105. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/color +49 -0
  106. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/completion +151 -0
  107. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/db +87 -0
  108. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/default +64 -0
  109. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/disk-usage +60 -0
  110. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/docs +115 -0
  111. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/env +46 -0
  112. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/environment-convertor +74 -0
  113. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/fetch +229 -0
  114. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/gemsets +950 -0
  115. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/hash +37 -0
  116. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/help +46 -0
  117. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/hook +23 -0
  118. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/info +214 -0
  119. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/initialize +29 -0
  120. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/install +631 -0
  121. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/irbrc +9 -0
  122. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/irbrc.rb +63 -0
  123. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/list +315 -0
  124. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/log +38 -0
  125. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/maglev +193 -0
  126. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/manage +2094 -0
  127. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/match +6 -0
  128. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/md5 +22 -0
  129. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/migrate +175 -0
  130. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/monitor +105 -0
  131. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/notes +121 -0
  132. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/override_gem +14 -0
  133. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/package +301 -0
  134. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/patches +64 -0
  135. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/patchsets +87 -0
  136. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/repair +199 -0
  137. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/rubygems +157 -0
  138. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/rvm +120 -0
  139. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/rvm-install +631 -0
  140. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/selector +818 -0
  141. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/set +301 -0
  142. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/snapshot +262 -0
  143. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/tools +58 -0
  144. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/update +631 -0
  145. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/upgrade +144 -0
  146. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/utility +1557 -0
  147. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/version +17 -0
  148. data/vendor/ruby/1.8/gems/rvm-1.0.14/scripts/wrapper +210 -0
  149. data/vendor/ruby/1.8/specifications/macaddr-1.0.0.gemspec +27 -0
  150. data/vendor/ruby/1.8/specifications/rvm-1.0.14.gemspec +42 -0
  151. metadata +149 -4
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ # Calculates a default rvm path
4
+
5
+ # Check first.
6
+ if [[ -n "$rvm_path" ]]; then
7
+ echo "$rvm_path"
8
+ exit
9
+ fi
10
+
11
+ # Load extra files.
12
+
13
+ [[ -s ~/.rvmrc ]] && source ~/.rvmrc >/dev/null 2>&1
14
+ [[ -s /etc/.rvmrc ]] && source /etc/rvmrc >/dev/null 2>&1
15
+
16
+ if [[ -n "$rvm_path" ]]; then
17
+ echo "$rvm_path"
18
+ elif [[ -d ~/.rvm ]]; then
19
+ echo "~/.rvm"
20
+ elif [[ -d /usr/local/rvm ]]; then
21
+ echo "/usr/local/rvm"
22
+ else
23
+ exit 1
24
+ fi
25
+
26
+ exit 0
@@ -0,0 +1,42 @@
1
+ module RVM
2
+ module Shell
3
+ # Represents the output of a shell command.
4
+ # This includes the exit status (and the helpful #successful? method)
5
+ # as well accessors for the command and stdout / stderr.
6
+ class Result
7
+
8
+ attr_reader :command, :stdout, :stderr, :raw_status
9
+
10
+ # Creates a new result object with the given details.
11
+ def initialize(command, status, stdout, stderr)
12
+ @command = command.dup.freeze
13
+ @raw_status = status
14
+ @environment = @raw_status["environment"] || {}
15
+ @successful = (exit_status == 0)
16
+ @stdout = stdout.freeze
17
+ @stderr = stderr.freeze
18
+ end
19
+
20
+ # Returns the hash of the environment.
21
+ def env
22
+ @environment
23
+ end
24
+
25
+ # Whether or not the command had a successful exit status.
26
+ def successful?
27
+ @successful
28
+ end
29
+
30
+ # Returns a value from the outputs environment.
31
+ def [](key)
32
+ env[key.to_s]
33
+ end
34
+
35
+ # Returns the exit status for the program
36
+ def exit_status
37
+ @exit_status ||= (Integer(@raw_status["exit_status"]) rescue 1)
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,10 @@
1
+ # Prints an epilog to a shell command.
2
+ __rvm_show_command_epilog() {
3
+ local last_command_result="$?"
4
+ echo "---------------RVM-RESULTS-START---------------"
5
+ echo "---"
6
+ echo " exit_status: \"$last_command_result\""
7
+ echo " environment:"
8
+ env | sed "s#'#\\'#g" | sed -e 's#"#\\"#g' -e "s#\\([^=]*\\)=\\(.*\\)# '\1': \"\2\"#"
9
+ echo "----------------RVM-RESULTS-END----------------"
10
+ }
@@ -0,0 +1,56 @@
1
+ require 'open3'
2
+
3
+ module RVM
4
+ module Shell
5
+ # Implementation of the abstract wrapper class that opens a new
6
+ # instance of bash when a command is run, only keeping it around
7
+ # for the lifetime of the command. Possibly inefficient but for
8
+ # the moment simplest and hence default implementation.
9
+ class SingleShotWrapper < AbstractWrapper
10
+
11
+ attr_accessor :current
12
+
13
+ # Runs a given command in the current shell.
14
+ # Defaults the command to true if empty.
15
+ def run_command(command)
16
+ command = "true" if command.to_s.strip.empty?
17
+ with_shell_instance do
18
+ stdin.puts wrapped_command(command)
19
+ stdin.close
20
+ out, err = stdout.read, stderr.read
21
+ out, status, _ = raw_stdout_to_parts(out)
22
+ return status, out, err
23
+ end
24
+ end
25
+
26
+ # Runs a command, ensuring no output is collected.
27
+ def run_command_silently(command)
28
+ with_shell_instance do
29
+ stdin.puts silent_command(command)
30
+ end
31
+ end
32
+
33
+ protected
34
+
35
+ # yields stdio, stderr and stdin for a shell instance.
36
+ # If there isn't a current shell instance, it will create a new one.
37
+ # In said scenario, it will also cleanup once it is done.
38
+ def with_shell_instance(&blk)
39
+ no_current = @current.nil?
40
+ if no_current
41
+ @current = Open3.popen3(self.shell_executable)
42
+ invoke_setup!
43
+ end
44
+ yield
45
+ ensure
46
+ @current = nil if no_current
47
+ end
48
+
49
+ # Direct access to each of the named descriptors
50
+ def stdin; @current[0]; end
51
+ def stdout; @current[1]; end
52
+ def stderr; @current[2]; end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,37 @@
1
+ module RVM
2
+ module Shell
3
+ module Utility
4
+
5
+ public
6
+
7
+ # Takes an array / number of arguments and converts
8
+ # them to a string useable for passing into a shell call.
9
+ def escape_arguments(*args)
10
+ return '' if args.nil?
11
+ args.flatten.map { |a| escape_argument(a.to_s) }.join(" ")
12
+ end
13
+
14
+ # Given a string, converts to the escaped format. This ensures
15
+ # that things such as variables aren't evaluated into strings
16
+ # and everything else is setup as expected.
17
+ def escape_argument(s)
18
+ return "''" if s.empty?
19
+ s.scan(/('+|[^']+)/).map do |section|
20
+ section = section.first
21
+ if section[0] == ?'
22
+ "\\'" * section.length
23
+ else
24
+ "'#{section}'"
25
+ end
26
+ end.join
27
+ end
28
+
29
+ # From a command, will build up a runnable command. If args isn't provided,
30
+ # it will escape arguments.
31
+ def build_cli_call(command, args = nil)
32
+ "#{command} #{escape_arguments(args)}".strip
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ module RVM
2
+ # Provides Generic access to a more ruby-like shell interface.
3
+ # For more details, see AbstractWrapper.
4
+ module Shell
5
+
6
+ autoload :AbstractWrapper, 'rvm/shell/abstract_wrapper'
7
+ autoload :SingleShotWrapper, 'rvm/shell/single_shot_wrapper'
8
+ # Current unimplemented
9
+ #autoload :PersistingWrapper, 'rvm/shell/persisting_wrapper'
10
+ autoload :TestWrapper, 'rvm/shell/test_wrapper'
11
+ autoload :Utility, 'rvm/shell/utility'
12
+ autoload :Result, 'rvm/shell/result'
13
+
14
+ # Returns the default shell wrapper class to use
15
+ def self.default_wrapper
16
+ @@default_wrapper ||= SingleShotWrapper
17
+ end
18
+
19
+ # Sets the default shell wrapper class to use.
20
+ def self.default_wrapper=(wrapper)
21
+ @@default_wrapper = wrapper
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ require 'yaml'
2
+
3
+ module RVM
4
+ module Version
5
+
6
+ # YAML of raw version info
7
+ VERSION_YAML = YAML.load_file(File.expand_path("../VERSION.yml", File.dirname(__FILE__)))
8
+
9
+ # Current major version of rvm
10
+ MAJOR = VERSION_YAML[:major]
11
+ # Current minor version of rvm
12
+ MINOR = VERSION_YAML[:minor]
13
+ # Current patch level of rvm
14
+ PATCH = VERSION_YAML[:patch]
15
+ # A String with the current rvm version
16
+ STRING = [MAJOR, MINOR, PATCH].join(".").freeze
17
+
18
+ end
19
+ end
@@ -0,0 +1,156 @@
1
+ # == Ruby Version Manager - Ruby API
2
+ #
3
+ # Provides a wrapper around the command line api implemented as part of the api.
4
+ # If you're not familiar with rvm, please read http://rvm.beginrescueend.com/
5
+ # first.
6
+ #
7
+ # == Usage
8
+ #
9
+ # When using the rvm ruby api, you gain access to most of the commands, including the set
10
+ # functionality. As a side node, the RVM module provides access to most of the api
11
+ # both via direct api wrappers (of the form <tt><tool>_<action></tt> - e.g. +alias_create+,
12
+ # +gemset_use+ and +wrapper+).
13
+ #
14
+ # == The Environment Model
15
+ #
16
+ # The RVM ruby api is implemented using an environment model. Each environment maps directly
17
+ # to some ruby string interpretable by rvm (e.g. +ree+, +ruby-1.8.7-p174+, +system+, +rbx@rails+
18
+ # and so on) and is considered a sandboxed environment (for commands like use etc) in which you
19
+ # can deal with rvm. it's worth noting that a single environment can have multiple environment
20
+ # instances and for the most part creating of these instances is best handled by the RVM.environment
21
+ # and RVM.environments methods.
22
+ #
23
+ # Each Environment (and instance of RVM::Environment) provides access to the rvm ruby api (in some
24
+ # cases, the api may not directly be related to the current ruby - but for simplicity / consistency
25
+ # purposes, they are still implemented as methods of RVM::Environment).
26
+ #
27
+ # When you perform an action with side effects (e.g. RVM::Environment#gemset_use or RVM::Environment#use)
28
+ # this will mutate the ruby string of the given environment (hence, an environment is considered mutable).
29
+ #
30
+ # Lastly, for the actual command line work, RVM::Environment works with an instance of RVM::Shell::AbstractWrapper.
31
+ # This performs logic (such as correctly escaping strings, calling the environment and such) in a way that
32
+ # is both reusable and simplified.
33
+ #
34
+ # By default, method_missing is used on the RVM module to proxy method calls to RVM.current (itself
35
+ # calling RVM::Environment.current), meaning things like RVM.gemset_name, RVM.alias_create and the like
36
+ # work. This is considered the 'global' instance and should be avoided unless needed directly.
37
+ #
38
+ # RVM::Environment.current will first attempt to use the current ruby string (determined by
39
+ # +ENV['GEM_HOME']+ but will fall back to using the rubies load path if that isn't available).
40
+ #
41
+ # In many cases, (e.g. +alias+, +list+ and the like) there is a more ruby-like wrapper class,
42
+ # typically available via <tt>RVM::Environment#<action></tt>.
43
+ #
44
+ # == Side Notes
45
+ #
46
+ # In the cases this api differs, see the RVM::Environment class for more information.
47
+ #
48
+ # You can check the name of a given environment in two ways - RVM::Environment#environment_name
49
+ # for the short version / the version set by RVM::Environment#use, RVM::Environment#gemset_use
50
+ # or RVM.environment. If you wish to get the full, expanded string (which has things such as
51
+ # the actual version of the selected ruby), you instead with to use RVM::Environment#expanded_name.
52
+ #
53
+ # Lastly, If you do need to pass environment variables to a specific environment, please use
54
+ # RVM::Environment.new, versus RVM.environment
55
+ #
56
+ module RVM
57
+ require 'rvm/errors'
58
+
59
+ autoload :Shell, 'rvm/shell'
60
+ autoload :Environment, 'rvm/environment'
61
+ autoload :Version, 'rvm/version'
62
+
63
+ class << self
64
+
65
+ # Returns the current global environment.
66
+ def current
67
+ Environment.current
68
+ end
69
+
70
+ # Reset the current global environment to the default / what it was
71
+ # when the process first started.
72
+ def reset_current!
73
+ Environment.reset_current!
74
+ end
75
+
76
+ # Returns an array of multiple environments. If given
77
+ # a block, will yield each time with the given environment.
78
+ #
79
+ # RVM.environments("ree@rails3,rbx@rails3") do |env|
80
+ # puts "Full environment: #{env.expanded_name}"
81
+ # end
82
+ #
83
+ # Alternatively, you can use the more ruby-like fashion:
84
+ #
85
+ # RVM.environments("ree@rails3", "rbx@rails3") do |env|
86
+ # puts "Full environment: #{env.expanded_name}"
87
+ # end
88
+ #
89
+ def environments(*names, &blk)
90
+ # Normalize the names before using them on for the environment.
91
+ names.flatten.join(",").split(",").uniq.map do |n|
92
+ environment(n, &blk)
93
+ end
94
+ end
95
+
96
+ # Returns the environment with the given name.
97
+ # If passed a block, will yield with that as the single argument.
98
+ #
99
+ # RVM.environment("ree@rails3") do |env|
100
+ # puts "Gemset is #{env.gemset.name}"
101
+ # end
102
+ #
103
+ def environment(name)
104
+ # TODO: Maintain an Environment cache.
105
+ # The cache needs to track changes via use etc though.
106
+ env = Environment.new(name)
107
+ yield env if block_given?
108
+ env
109
+ end
110
+
111
+ # Merges items into the default config, essentially
112
+ # setting environment variables passed to child processes:
113
+ #
114
+ # RVM.merge_config!({
115
+ # :some_shell_variable => "me",
116
+ # })
117
+ #
118
+ def merge_config!(config = {})
119
+ Environment.merge_config!(config)
120
+ end
121
+
122
+ # Returns the current 'best guess' value for rvm_path.
123
+ def path
124
+ Environment.rvm_path
125
+ end
126
+
127
+ # Shortcut to set rvm_path. Will set it on all new instances
128
+ # but wont affect currently running environments.
129
+ def path=(value)
130
+ Environment.rvm_path = value
131
+ end
132
+
133
+ private
134
+
135
+ def cache_method_call(name)
136
+ class_eval <<-END, __FILE__, __LINE__
137
+ def #{name}(*args, &blk)
138
+ current.__send__(:#{name}, *args, &blk)
139
+ end
140
+ END
141
+ end
142
+
143
+ # Proxies methods to the current environment, creating a
144
+ # method before dispatching to speed up future calls.
145
+ def method_missing(name, *args, &blk)
146
+ if current.respond_to?(name)
147
+ cache_method_call name
148
+ current.__send__ name, *args, &blk
149
+ else
150
+ super
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ end