Flowdock
method

refresh!

Importance_0
Ruby on Rails latest stable (v4.0.2) - 0 notes - Class: Rails::VendorGemSourceIndex

Method deprecated or moved

This method is deprecated or moved on the latest stable version. The last existing version (v2.3.8) is shown here.

refresh!() public

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File railties/lib/rails/vendor_gem_source_index.rb, line 32
    def refresh!
      # reload the installed gems
      @installed_source_index.refresh!
      vendor_gems = {}

      # handle vendor Rails gems - they are identified by having loaded_from set to ""
      # we add them manually to the list, so that other gems can find them via dependencies
      Gem.loaded_specs.each do |n, s|
        next unless s.loaded_from.to_s.empty?
        vendor_gems[s.full_name] = s
      end

      # load specifications from vendor/gems
      Dir[File.join(Rails::GemDependency.unpacked_path, '*')].each do |d|
        dir_name = File.basename(d)
        dir_version = version_for_dir(dir_name)
        spec = load_specification(d)
        if spec
          if spec.full_name != dir_name
            # mismatched directory name and gem spec - produced by 2.1.0-era unpack code
            if dir_version
              # fix the spec version - this is not optimal (spec.files may be wrong)
              # but it's better than breaking apps. Complain to remind users to get correct specs.
              # use ActiveSupport::Deprecation.warn, as the logger is not set yet
              $stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems has a mismatched specification file."+
                           " Run 'rake gems:refresh_specs' to fix this.") unless @@silence_spec_warnings
              spec.version = dir_version
            else
              $stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems is not in a versioned directory"+
                           "(should be #{spec.full_name}).") unless @@silence_spec_warnings
              # continue, assume everything is OK
            end
          end
        else
          # no spec - produced by early-2008 unpack code
          # emulate old behavior, and complain.
          $stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems has no specification file."+
                       " Run 'rake gems:refresh_specs' to fix this.") unless @@silence_spec_warnings
          if dir_version
            spec = Gem::Specification.new
            spec.version = dir_version
            spec.require_paths = ['lib']
            ext_path = File.join(d, 'ext')
            spec.require_paths << 'ext' if File.exist?(ext_path)
            spec.name = /^(.*)-[^-]+$/.match(dir_name)[1]
            files = ['lib']
            # set files to everything in lib/
            files += Dir[File.join(d, 'lib', '*')].map { |v| v.gsub(/^#{d}\//, '') }
            files += Dir[File.join(d, 'ext', '*')].map { |v| v.gsub(/^#{d}\//, '') } if ext_path
            spec.files = files
          else
            $stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems not in a versioned directory."+
                         " Giving up.") unless @@silence_spec_warnings
            next
          end
        end
        spec.loaded_from = File.join(d, '.specification')
        # finally, swap out full_gem_path
        # it would be better to use a Gem::Specification subclass, but the YAML loads an explicit class
        class << spec
          def full_gem_path
            path = File.join installation_path, full_name
            return path if File.directory? path
            File.join installation_path, original_name
          end
        end
        vendor_gems[File.basename(d)] = spec
      end
      @vendor_source_index = Gem::SourceIndex.new(vendor_gems)
    end
Register or log in to add new notes.