Tengo problemas con el ruby error.rb

Estoy trabajando en centos 5.0, he instalado asterisk y quiero integrar
un calendario a mi call center.. pero cuando sigo los pasos de este how
to

http://blog.voz-ip.com/2006/consulta-los-festivos-de-un-calendario-webdav-desde-asterisk/#more-23

corre todo bien pero a la hora de que hacen una llamada y ejecuto mi
script agi tengo este error

Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require’: no such file to load –error.rb (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require’
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/rs/receive_char.rb:24
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`gem_original_require’
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`require’
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/return_status.rb:9
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`gem_original_require’
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`require’
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/command.rb:40
… 10 levels…
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:228:in `activate’
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in
`active_gem_with_options’
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:59:in `require_gem’
from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:20
— AGI Script comprobar-festivos.rb completed, returning 0

···

--
Posted via http://www.ruby-forum.com/.

Creo que debe usar 'require' en vez de 'require_gem' en linea 20. Si
no me equivoco, con la última versión de rubygems ya no hace falta
´require_gem´.

--Brenton

···

On Jun 1, 12:48 am, Daniel <daniels_...@hotmail.com> wrote:

Estoy trabajando en centos 5.0, he instalado asterisk y quiero integrar
un calendario a mi call center.. pero cuando sigo los pasos de este how
to

http://blog.voz-ip.com/2006/consulta-los-festivos-de-un-calendario-we\.\.\.

corre todo bien pero a la hora de que hacen una llamada y ejecuto mi
script agi tengo este error

Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require': no such file to load -error.rb (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/rs/receive_char.rb:24
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`gem_original_require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`require'
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/return_status.rb:9
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`gem_original_require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in
`require'
from
/usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/command.rb:40
... 10 levels...
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:228:in `activate'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in
`active_gem_with_options'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:59:in `require_gem'
from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:20
- AGI Script comprobar-festivos.rb completed, returning 0

--
Posted viahttp://www.ruby-forum.com/.

Muchisimas gracias por el dato.. corregiste varias lineas. pero aun
sigue apareciendo este error...... :frowning:

Launched AGI Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in `active_gem_with_options':
undefined method `activate' for Gem:Module (NoMethodError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:59:in `require'
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:75
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17:in
`require'
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17
    -- AGI Script comprobar-festivos.rb completed, returning 0

muchas gracias de ante mano por tu ayuda y por tu tiempo.

···

--
Posted via http://www.ruby-forum.com/.

¿Sabe Ud. la versión de rubygems que tiene? Me pregunto si su versión
no está al día.

En su código no ha declarado otro modulo Gem, verdad¿? Me parece un
tanto extraño el NoMethodError. Pase un tiempo mirando el código de
rubygems y no encuentro el sitio donde se declara Gem#activate.

Does anyone familiar with rubygems know how the Gem module is suppose
to respond to activate?

···

On Jun 2, 4:47 pm, "Daniel Sánchez" <daniels...@gmail.com> wrote:

Muchisimas gracias por el dato.. corregiste varias lineas. pero aun
sigue apareciendo este error...... :frowning:

Launched AGI Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in `active_gem_with_options':
undefined method `activate' for Gem:Module (NoMethodError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:59:in `require'
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:75
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17:in
`require'
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17
    -- AGI Script comprobar-festivos.rb completed, returning 0

muchas gracias de ante mano por tu ayuda y por tu tiempo.

--
Posted viahttp://www.ruby-forum.com/.

Estoy usando Centos 5.0 kernel-2.6.18-8.el5 ruby-1.8.5-5.el5
ruby-rdoc-1.8.5-5.el5 rubygems-0.9.0
No se porque no encuentra ese modulo no he instalado ninguno ni lo he
eliminado.
Este es el archivo

rubygems.rb

···

================================================================================
#!/usr/bin/env ruby
# -*- ruby -*-

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require 'rbconfig'

module Gem
  class LoadError < ::LoadError
    attr_accessor :name, :version_requirement
  end
end

module Kernel

  # Adds a Ruby Gem to the $LOAD_PATH. Before a Gem is loaded, its
  # required Gems are loaded. If the version information is omitted,
  # the highest version Gem of the supplied name is loaded. If a Gem
  # is not found that meets the version requirement and/or a required
  # Gem is not found, a Gem::LoadError is raised. More information on
  # version requirements can be found in the Gem::Version
  # documentation.
  #
  # The +gem+ directive should be executed *before* any require
  # statements (otherwise rubygems might select a conflicting library
  # version).
  #
  # You can define the environment variable GEM_SKIP as a way to not
  # load specified gems. you might do this to test out changes that
  # haven't been intsalled yet. Example:
  #
  # GEM_SKIP=libA:libB ruby-I../libA -I../libB ./mycode.rb
  #
  # gem:: [String or Gem::Dependency] The gem name or dependency
  # instance.
  #
  # version_requirement:: [default=">= 0.0.0"] The version
  # requirement.
  #
  # return:: [Boolean] true if the Gem is loaded, otherwise false.
  #
  # raises:: [Gem::LoadError] if Gem cannot be found, is listed in
  # GEM_SKIP, or version requirement not met.
  #
  def gem(gem_name, *version_requirements)
    active_gem_with_options(gem_name, version_requirements)
  end

  # Same as the +gem+ command, but will also require a file if the gem
  # provides an auto-required file name.
  #
  # DEPRECATED! Use +gem+ instead.
  #
  def require_gem(gem_name, *version_requirements)
    active_gem_with_options(gem_name,
      version_requirements, :auto_require=>true)
  end

  def active_gem_with_options(gem_name, version_requirements,
options={})
    skip_list = (ENV['GEM_SKIP'] || "").split(/:/)
    raise Gem::LoadError, "skipping #{gem_name}" if skip_list.include?
gem_name
    Gem.activate(gem_name, options[:auto_require],
*version_requirements)
  end
  private :active_gem_with_options
end

# Main module to hold all RubyGem classes/modules.
#
module Gem
  require 'rubygems/rubygems_version.rb'

  class Exception < RuntimeError
  end

  class OperationNotSupportedError < Gem::Exception
  end

  RubyGemsPackageVersion = RubyGemsVersion

  DIRECTORIES = ['cache', 'doc', 'gems', 'specifications']

  @@source_index = nil

  class << self

    def manage_gems
      require 'rubygems/user_interaction'
      require 'rubygems/builder'
      require 'rubygems/format'
      require 'rubygems/remote_installer'
      require 'rubygems/installer'
      require 'rubygems/validator'
      require 'rubygems/doc_manager'
      require 'rubygems/cmd_manager'
      require 'rubygems/gem_runner'
      require 'rubygems/config_file'
    end

    # Returns an Cache of specifications that are in the Gem.path
    #
    # return:: [Gem::SourceIndex] Index of installed Gem::Specifications
    #
    def source_index
      @@source_index ||= SourceIndex.from_installed_gems
    end

    # Provide an alias for the old name.
    alias cache source_index

    # The directory path where Gems are to be installed.
    #
    # return:: [String] The directory path
    #
    def dir
      @gem_home ||= nil
      set_home(ENV['GEM_HOME'] || default_dir) unless @gem_home
      @gem_home
    end

    # List of directory paths to search for Gems.
    #
    # return:: [List<String>] List of directory paths.
    #
    def path
      @gem_path ||= nil
      set_paths(ENV['GEM_PATH']) unless @gem_path
      @gem_path
    end

    # The home directory for the user.
    def user_home
      @user_home ||= find_home
    end

    # Return the path to standard location of the users .gemrc file.
    def config_file
      File.join(Gem.user_home, '.gemrc')
    end

    # The standard configuration object for gems.
    def configuration
      @configuration ||= {}
    end

    # Use the given configuration object (which implements the
    # ConfigFile protocol) as the standard configuration object.
    def configuration=(config)
      @configuration = config
    end

    # Return the path the the data directory specified by the gem
    # name. If the package is not available as a gem, return nil.
    def datadir(gem_name)
      return nil if @loaded_specs.nil?
      spec = @loaded_specs[gem_name]
      return nil if spec.nil?
      File.join(spec.full_gem_path, 'data', gem_name)
    end

    # Return the Ruby command to use to execute the Ruby interpreter.
    def ruby
      "ruby"
    end

    # Activate a gem (i.e. add it to the Ruby load path). The gem
    # must satisfy all the specified version constraints. If
    # +autorequire+ is true, then automatically require the specified
    # autorequire file in the gem spec.
    #
    # Returns true if the gem is loaded by this call, false if it is
    # already loaded, or an exception otherwise.
    #
    def activate(gem, autorequire, *version_requirements)
      @loaded_specs ||= Hash.new
      unless version_requirements.size > 0
        version_requirements = [">= 0.0.0"]
      end
      unless gem.respond_to?(:name) &&
gem.respond_to?(:version_requirements)
        gem = Gem::Dependency.new(gem, version_requirements)
      end

      matches = Gem.source_index.find_name(gem.name,
gem.version_requirements)
      report_activate_error(gem) if matches.empty?

      if @loaded_specs[gem.name]
  # This gem is already loaded. If the currently loaded gem is
  # not in the list of candidate gems, then we have a version
  # conflict.
  existing_spec = @loaded_specs[gem.name]
  if ! matches.any? { |spec| spec.version == existing_spec.version }
    fail Gem::Exception, "can't activate #{gem}, already activated
#{existing_spec.full_name}]"
  end
  return false
      end

      # new load
      spec = matches.last
      if spec.loaded?
  return false unless autorequire
  result = spec.autorequire ? require(spec.autorequire) : false
  return result || false
      end

      spec.loaded = true
      @loaded_specs[spec.name] = spec

      # Load dependent gems first
      spec.dependencies.each do |dep_gem|
  activate(dep_gem, autorequire)
      end

      # add bin dir to require_path
      if(spec.bindir) then
  spec.require_paths << spec.bindir
      end

      # Now add the require_paths to the LOAD_PATH
      spec.require_paths.each do |path|
  $:.unshift File.join(spec.full_gem_path, path)
      end

      if autorequire && spec.autorequire then
        Array(spec.autorequire).each do |a_lib|
          require a_lib
        end
      end

      return true
    end

    # Report a load error during activation. The message of load
    # error depends on whether it was a version mismatch or if there
    # are not gems of any version by the requested name.
    def report_activate_error(gem)
      matches = Gem.source_index.find_name(gem.name)
      if matches.size==0
  error = Gem::LoadError.new(
    "Could not find RubyGem #{gem.name}
(#{gem.version_requirements})\n")
      else
  error = Gem::LoadError.new(
    "RubyGem version error: " +
    "#{gem.name}(#{matches.first.version} not
#{gem.version_requirements})\n")
      end
      error.name = gem.name
      error.version_requirement = gem.version_requirements
      raise error
    end
    private :report_activate_error

    # Reset the +dir+ and +path+ values. The next time +dir+ or +path+
    # is requested, the values will be calculated from scratch. This is
    # mainly used by the unit tests to provide test isolation.
    #
    def clear_paths
      @gem_home = nil
      @gem_path = nil
      @@source_index = nil
    end

    # Use the +home+ and (optional) +paths+ values for +dir+ and +path+.
    # Used mainly by the unit tests to provide environment isolation.
    #
    def use_paths(home, paths=[])
      clear_paths
      set_home(home) if home
      set_paths(paths.join(File::PATH_SEPARATOR)) if paths
    end

    # Return a list of all possible load paths for all versions for
    # all gems in the Gem installation.
    #
    def all_load_paths
      result = []
      Gem.path.each do |gemdir|
        each_load_path(all_partials(gemdir)) do |load_path|
          result << load_path
        end
      end
      result
    end

    # Return a list of all possible load paths for the latest version
    # for all gems in the Gem installation.
    def latest_load_paths
      result = []
      Gem.path.each do |gemdir|
        each_load_path(latest_partials(gemdir)) do |load_path|
          result << load_path
        end
      end
      result
    end

    def required_location(gemname, libfile, *version_constraints)
      version_constraints = [">0"] if version_constraints.empty?
      matches = Gem.source_index.find_name(gemname, version_constraints)
      return nil if matches.empty?
      spec = matches.last
      spec.require_paths.each do |path|
        result = File.join(spec.full_gem_path, path, libfile)
        return result if File.exists?(result)
      end
      nil
    end

    private

    # Return all the partial paths in the given +gemdir+.
    def all_partials(gemdir)
      Dir[File.join(gemdir, 'gems/*')]
    end

    # Return only the latest partial paths in the given +gemdir+.
    def latest_partials(gemdir)
      latest = {}
      all_partials(gemdir).each do |gp|
        base = File.basename(gp)
        matches = /(.*)-((\d+\.)*\d+)/.match(base)
        name, version = [matches[1], matches[2]]
        ver = Gem::Version.new(version)
        if latest[name].nil? || ver > latest[name][0]
          latest[name] = [ver, gp]
        end
      end
      latest.collect { |k,v| v[1] }
    end

    # Expand each partial gem path with each of the required paths
    # specified in the Gem spec. Each expanded path is yielded.
    def each_load_path(partials)
      partials.each do |gp|
        base = File.basename(gp)
        specfn = File.join(dir, "specifications", base + ".gemspec")
        if File.exist?(specfn)
          spec = eval(File.read(specfn))
          spec.require_paths.each do |rp|
            yield(File.join(gp, rp))
          end
        else
          filename = File.join(gp, 'lib')
          yield(filename) if File.exist?(filename)
        end
      end
    end

    # Set the Gem home directory (as reported by +dir+).
    def set_home(home)
      @gem_home = home
      ensure_gem_subdirectories(@gem_home)
    end

    # Set the Gem search path (as reported by +path+).
    def set_paths(gpaths)
      if gpaths
        @gem_path = gpaths.split(File::PATH_SEPARATOR)
        @gem_path << Gem.dir
      else
        @gem_path = [Gem.dir]
      end
      @gem_path.uniq!
      @gem_path.each do |gp| ensure_gem_subdirectories(gp) end
    end

    # Some comments from the ruby-talk list regarding finding the home
    # directory:
    #
    # I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
    # to be depending on HOME in those code samples. I propose that
    # it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
    # least on Win32).
    #
    def find_home
      ['HOME', 'USERPROFILE'].each do |homekey|
        return ENV[homekey] if ENV[homekey]
      end
      if ENV['HOMEDRIVE'] && ENV['HOMEPATH']
        return "#{ENV['HOMEDRIVE']}:#{ENV['HOMEPATH']}"
      end
      begin
        File.expand_path("~")
      rescue StandardError => ex
        if File::ALT_SEPARATOR
          "C:/"
        else
          "/"
        end
      end
    end

    public

    # Default home directory path to be used if an alternate value is
    # not specified in the environment.
    def default_dir
      ## rbconfig =
Dir.glob("{#{($LOAD_PATH).join(',')}}/rbconfig.rb").first
      ## if rbconfig
      ## module_eval File.read(rbconfig) unless
const_defined?("Config")
      ## else
      ## require 'rbconfig'
      ## end
      #
      # Note on above code: we have an issue if a Config class is
      # already defined and we load 'rbconfig'. The above code is
      # supposed to work around that but it's been commented out. In
      # any case, I moved "require 'rbconfig'" to the top of this
      # file, because there was a circular dependency between this
      # method and our custom require. In any case, rbconfig is a
      # fundamental RubyGems dependency, so it might as well be up the
      # top. -- Gavin Sinclair, 2004-12-12
      #
      if defined? RUBY_FRAMEWORK_VERSION
        return File.join(File.dirname(Config::CONFIG["sitedir"]),
"Gems")
      else
        File.join(Config::CONFIG['libdir'], 'ruby', 'gems',
Config::CONFIG['ruby_version'])
      end
    end

    private

    # Quietly ensure the named Gem directory contains all the proper
    # subdirectories. If we can't create a directory due to a
    # permission problem, then we will silently continue.
    def ensure_gem_subdirectories(gemdir)
      DIRECTORIES.each do |filename|
        fn = File.join(gemdir, filename)
        unless File.exists?(fn)
          require 'fileutils'
          FileUtils.mkdir_p(fn) rescue nil
        end
      end
    end

  end
end

# Modify the non-gem version of datadir to handle gem package names.

require 'rbconfig/datadir'
module Config
  class << self
    alias gem_original_datadir datadir

    # Return the path to the data directory associated with the named
    # package. If the package is loaded as a gem, return the gem
    # specific data directory. Otherwise return a path to the share
    # area as define by "#{Config::CONFIG['datadir']}/#{package_name}".
    def datadir(package_name)
      Gem.datadir(package_name) ||
Config.gem_original_datadir(package_name)
    end
  end
end

require 'rubygems/source_index'
require 'rubygems/specification'
require 'rubygems/security'
require 'rubygems/version'
#require 'rubygems/loadpath_manager' # custom_require replaces this
require 'rubygems/custom_require'

--
Posted via http://www.ruby-forum.com/.

Acabo de actualizar el Rubygem 0.9.0 al 0.9.4 con "gem update --system"
ahora ya tengo el rubygems 0.9.4 corregi el error del require que me
dijiste y ahora aparece este error

···

=================================================================================
Launched AGI Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:84:Warning: require_gem is
obsolete. Use gem instead.
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:76:in `active_gem_with_options':
undefined method `activate' for Gem:Module (NoMethodError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:61:in `require'
        from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:84
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17:in
`require'
        from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:17
    -- AGI Script comprobar-festivos.rb completed, returning 0

que puedo hacer y el nuevo rubygems.rb es e siguiente

#!/usr/bin/env ruby
# -*- ruby -*-

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require 'rbconfig'

module Gem
  class LoadError < ::LoadError
    attr_accessor :name, :version_requirement
  end
end

module Kernel

  # Adds a Ruby Gem to the $LOAD_PATH. Before a Gem is loaded, its
  # required Gems are loaded. If the version information is omitted,
  # the highest version Gem of the supplied name is loaded. If a Gem
  # is not found that meets the version requirement and/or a required
  # Gem is not found, a Gem::LoadError is raised. More information on
  # version requirements can be found in the Gem::Version
  # documentation.
  #
  # The +gem+ directive should be executed *before* any require
  # statements (otherwise rubygems might select a conflicting library
  # version).
  #
  # You can define the environment variable GEM_SKIP as a way to not
  # load specified gems. you might do this to test out changes that
  # haven't been intsalled yet. Example:
  #
  # GEM_SKIP=libA:libB ruby-I../libA -I../libB ./mycode.rb
  #
  # gem:: [String or Gem::Dependency] The gem name or dependency
  # instance.
  #
  # version_requirement:: [default=">= 0.0.0"] The version
  # requirement.
  #
  # return:: [Boolean] true if the Gem is loaded, otherwise false.
  #
  # raises:: [Gem::LoadError] if Gem cannot be found, is listed in
  # GEM_SKIP, or version requirement not met.
  #
  def gem(gem_name, *version_requirements)
    active_gem_with_options(gem_name, version_requirements)
  end

  # Same as the +gem+ command, but will also require a file if the gem
  # provides an auto-required file name.
  #
  # DEPRECATED! Use +gem+ instead.
  #
  def require(gem_name, *version_requirements)
    file, lineno = location_of_caller
    warn "#{file}:#{lineno}:warning: require_gem is obsolete. Use gem
instead."
    active_gem_with_options(gem_name, version_requirements,
:auto_require=>true)
  end

  # Return the file name (string) and line number (integer) of the
caller of
  # the caller of this method.
  def location_of_caller
    file, lineno = caller[1].split(':')
    lineno = lineno.to_i
    [file, lineno]
  end
  private :location_of_caller

  def active_gem_with_options(gem_name, version_requirements,
options={})
    skip_list = (ENV['GEM_SKIP'] || "").split(/:/)
    raise Gem::LoadError, "skipping #{gem_name}" if skip_list.include?
gem_name
    Gem.activate(gem_name, options[:auto_require],
*version_requirements)
  end
  private :active_gem_with_options
end

# Main module to hold all RubyGem classes/modules.
#
module Gem
  require 'rubygems/rubygems_version.rb'
  require 'thread'

  MUTEX = Mutex.new

  class Exception < RuntimeError
  end

  class OperationNotSupportedError < Gem::Exception
  end

  RubyGemsPackageVersion = RubyGemsVersion

  DIRECTORIES = ['cache', 'doc', 'gems', 'specifications']

  @@source_index = nil

  @configuration = nil
  @loaded_specs = {}

  class << self

    attr_reader :loaded_specs

    def manage_gems
      require 'rubygems/user_interaction'
      require 'rubygems/builder'
      require 'rubygems/format'
      require 'rubygems/remote_installer'
      require 'rubygems/installer'
      require 'rubygems/validator'
      require 'rubygems/doc_manager'
      require 'rubygems/command_manager'
      require 'rubygems/gem_runner'
      require 'rubygems/config_file'
    end

    # Returns an Cache of specifications that are in the Gem.path
    #
    # return:: [Gem::SourceIndex] Index of installed Gem::Specifications
    #
    def source_index
      @@source_index ||= SourceIndex.from_installed_gems
    end

    # Provide an alias for the old name.
    alias cache source_index

    # The directory path where Gems are to be installed.
    #
    # return:: [String] The directory path
    #
    def dir
      @gem_home ||= nil
      set_home(ENV['GEM_HOME'] || default_dir) unless @gem_home
      @gem_home
    end

    # The directory path where executables are to be installed.
    #
    def bindir(install_dir=Gem.dir)
      return File.join(install_dir, 'bin') unless install_dir ==
Gem.default_dir

      if defined? RUBY_FRAMEWORK_VERSION then # mac framework support
        File.join(File.dirname(Config::CONFIG["sitedir"]),
                  File.basename(Config::CONFIG["bindir"]))
      else # generic install
        Config::CONFIG['bindir']
      end
    end

    # List of directory paths to search for Gems.
    #
    # return:: [List<String>] List of directory paths.
    #
    def path
      @gem_path ||= nil
      set_paths(ENV['GEM_PATH']) unless @gem_path
      @gem_path
    end

    # The home directory for the user.
    def user_home
      @user_home ||= find_home
    end

    # Return the path to standard location of the users .gemrc file.
    def config_file
      File.join(Gem.user_home, '.gemrc')
    end

    # The standard configuration object for gems.
    def configuration
      return @configuration if @configuration

      @configuration = {}
      class << @configuration
        undef_method :verbose # HACK RakeFileUtils pollution
      end if @configuration.respond_to? :verbose

      def @configuration.method_missing(sym, *args, &block)
        if args.empty?
          self[sym]
        else
          super
        end
      end

      @configuration
    end

    # Use the given configuration object (which implements the
    # ConfigFile protocol) as the standard configuration object.
    def configuration=(config)
      @configuration = config
    end

    # Return the path the the data directory specified by the gem
    # name. If the package is not available as a gem, return nil.
    def datadir(gem_name)
      spec = @loaded_specs[gem_name]
      return nil if spec.nil?
      File.join(spec.full_gem_path, 'data', gem_name)
    end

    # Return the searcher object to search for matching gems.
    def searcher
      MUTEX.synchronize do
        @searcher ||= Gem::GemPathSearcher.new
      end
    end

    # Return the Ruby command to use to execute the Ruby interpreter.
    def ruby
      "ruby"
    end

    # Activate a gem (i.e. add it to the Ruby load path). The gem
    # must satisfy all the specified version constraints. If
    # +autorequire+ is true, then automatically require the specified
    # autorequire file in the gem spec.
    #
    # Returns true if the gem is loaded by this call, false if it is
    # already loaded, or an exception otherwise.
    #
    def activate(gem, autorequire, *version_requirements)
      unless version_requirements.size > 0
        version_requirements = [">= 0.0.0"]
      end
      unless gem.respond_to?(:name) &&
gem.respond_to?(:version_requirements)
        gem = Gem::Dependency.new(gem, version_requirements)
      end

      matches = Gem.source_index.find_name(gem.name,
gem.version_requirements)
      report_activate_error(gem) if matches.empty?

      if @loaded_specs[gem.name]
        # This gem is already loaded. If the currently loaded gem is
        # not in the list of candidate gems, then we have a version
        # conflict.
        existing_spec = @loaded_specs[gem.name]
        if ! matches.any? { |spec| spec.version == existing_spec.version
}
          fail Gem::Exception, "can't activate #{gem}, already activated
#{existing_spec.full_name}]"
        end
        return false
      end

      # new load
      spec = matches.last
      if spec.loaded?
        return false unless autorequire
        result = spec.autorequire ? require(spec.autorequire) : false
        return result || false
      end

      spec.loaded = true
      @loaded_specs[spec.name] = spec

      # Load dependent gems first
      spec.dependencies.each do |dep_gem|
        activate(dep_gem, autorequire)
      end

      # bin directory must come before library directories
      spec.require_paths.unshift spec.bindir if spec.bindir

      require_paths = spec.require_paths.map do |path|
        File.join spec.full_gem_path, path
      end

      sitelibdir = Config::CONFIG['sitelibdir']

      # gem directories must come after -I and ENV['RUBYLIB']
      $:.insert($:.index(sitelibdir), *require_paths)

      # Now autorequire
      if autorequire && spec.autorequire then # DEPRECATED
        Array(spec.autorequire).each do |a_lib|
          require a_lib
        end
      end

      return true
    end

    # Report a load error during activation. The message of load
    # error depends on whether it was a version mismatch or if there
    # are not gems of any version by the requested name.
    def report_activate_error(gem)
      matches = Gem.source_index.find_name(gem.name)
      if matches.size==0
        error = Gem::LoadError.new(
          "Could not find RubyGem #{gem.name}
(#{gem.version_requirements})\n")
      else
        error = Gem::LoadError.new(
          "RubyGem version error: " +
          "#{gem.name}(#{matches.first.version} not
#{gem.version_requirements})\n")
      end
      error.name = gem.name
      error.version_requirement = gem.version_requirements
      raise error
    end
    private :report_activate_error

    # Reset the +dir+ and +path+ values. The next time +dir+ or +path+
    # is requested, the values will be calculated from scratch. This is
    # mainly used by the unit tests to provide test isolation.
    #
    def clear_paths
      @gem_home = nil
      @gem_path = nil
      @@source_index = nil
    end

    # Use the +home+ and (optional) +paths+ values for +dir+ and +path+.
    # Used mainly by the unit tests to provide environment isolation.
    #
    def use_paths(home, paths=[])
      clear_paths
      set_home(home) if home
      set_paths(paths.join(File::PATH_SEPARATOR)) if paths
    end

    # Return a list of all possible load paths for all versions for
    # all gems in the Gem installation.
    #
    def all_load_paths
      result = []
      Gem.path.each do |gemdir|
        each_load_path(all_partials(gemdir)) do |load_path|
          result << load_path
        end
      end
      result
    end

    # Return a list of all possible load paths for the latest version
    # for all gems in the Gem installation.
    def latest_load_paths
      result = []
      Gem.path.each do |gemdir|
        each_load_path(latest_partials(gemdir)) do |load_path|
          result << load_path
        end
      end
      result
    end

    def required_location(gemname, libfile, *version_constraints)
      version_constraints = [">0"] if version_constraints.empty?
      matches = Gem.source_index.find_name(gemname, version_constraints)
      return nil if matches.empty?
      spec = matches.last
      spec.require_paths.each do |path|
        result = File.join(spec.full_gem_path, path, libfile)
        return result if File.exists?(result)
      end
      nil
    end

    def suffixes
      ['', '.rb', '.rbw', '.so', '.bundle', '.dll', '.sl', '.jar']
    end

    def suffix_pattern
      @suffix_pattern ||= "{#{suffixes.join(',')}}"
    end

    private

    # Return all the partial paths in the given +gemdir+.
    def all_partials(gemdir)
      Dir[File.join(gemdir, 'gems/*')]
    end

    # Return only the latest partial paths in the given +gemdir+.
    def latest_partials(gemdir)
      latest = {}
      all_partials(gemdir).each do |gp|
        base = File.basename(gp)
        matches = /(.*)-((\d+\.)*\d+)/.match(base)
        name, version = [matches[1], matches[2]]
        ver = Gem::Version.new(version)
        if latest[name].nil? || ver > latest[name][0]
          latest[name] = [ver, gp]
        end
      end
      latest.collect { |k,v| v[1] }
    end

    # Expand each partial gem path with each of the required paths
    # specified in the Gem spec. Each expanded path is yielded.
    def each_load_path(partials)
      partials.each do |gp|
        base = File.basename(gp)
        specfn = File.join(dir, "specifications", base + ".gemspec")
        if File.exist?(specfn)
          spec = eval(File.read(specfn))
          spec.require_paths.each do |rp|
            yield(File.join(gp, rp))
          end
        else
          filename = File.join(gp, 'lib')
          yield(filename) if File.exist?(filename)
        end
      end
    end

    # Set the Gem home directory (as reported by +dir+).
    def set_home(home)
      @gem_home = home
      ensure_gem_subdirectories(@gem_home)
    end

    # Set the Gem search path (as reported by +path+).
    def set_paths(gpaths)
      if gpaths
        @gem_path = gpaths.split(File::PATH_SEPARATOR)
        @gem_path << Gem.dir
      else
        @gem_path = [Gem.dir]
      end
      @gem_path.uniq!
      @gem_path.each do |gp| ensure_gem_subdirectories(gp) end
    end

    # Some comments from the ruby-talk list regarding finding the home
    # directory:
    #
    # I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
    # to be depending on HOME in those code samples. I propose that
    # it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
    # least on Win32).
    #
    def find_home
      ['HOME', 'USERPROFILE'].each do |homekey|
        return ENV[homekey] if ENV[homekey]
      end
      if ENV['HOMEDRIVE'] && ENV['HOMEPATH']
        return "#{ENV['HOMEDRIVE']}:#{ENV['HOMEPATH']}"
      end
      begin
        File.expand_path("~")
      rescue StandardError => ex
        if File::ALT_SEPARATOR
          "C:/"
        else
          "/"
        end
      end
    end

    public

    # Default home directory path to be used if an alternate value is
    # not specified in the environment.
    def default_dir
      if defined? RUBY_FRAMEWORK_VERSION
        return File.join(File.dirname(Config::CONFIG["sitedir"]),
"Gems")
      else
        File.join(Config::CONFIG['libdir'], 'ruby', 'gems',
Config::CONFIG['ruby_version'])
      end
    end

    private

    # Quietly ensure the named Gem directory contains all the proper
    # subdirectories. If we can't create a directory due to a
    # permission problem, then we will silently continue.
    def ensure_gem_subdirectories(gemdir)
      DIRECTORIES.each do |filename|
        fn = File.join(gemdir, filename)
        unless File.exist?(fn)
          require 'fileutils'
          FileUtils.mkdir_p(fn) rescue nil
        end
      end
    end

  end
end

# Modify the non-gem version of datadir to handle gem package names.

require 'rbconfig/datadir'
module Config # :nodoc:
  class << self
    alias gem_original_datadir datadir

    # Return the path to the data directory associated with the named
    # package. If the package is loaded as a gem, return the gem
    # specific data directory. Otherwise return a path to the share
    # area as define by "#{Config::CONFIG['datadir']}/#{package_name}".
    def datadir(package_name)
      Gem.datadir(package_name) ||
Config.gem_original_datadir(package_name)
    end
  end
end

require 'rubygems/source_index'
require 'rubygems/specification'
require 'rubygems/security'
require 'rubygems/version'
require 'rubygems/custom_require'

--
Posted via http://www.ruby-forum.com/.