Method: Gem::Source::Local#load_specs

Defined in:
lib/rubygems/source/local.rb

#load_specs(type) ⇒ Object

:nodoc:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rubygems/source/local.rb', line 35

def load_specs(type) # :nodoc:
  @load_specs_names[type] ||= begin
    names = []

    @specs = {}

    Dir["*.gem"].each do |file|
      pkg = Gem::Package.new(file)
      spec = pkg.spec
    rescue SystemCallError, Gem::Package::FormatError
      # ignore
    else
      tup = spec.name_tuple
      @specs[tup] = [File.expand_path(file), pkg]

      case type
      when :released
        unless pkg.spec.version.prerelease?
          names << pkg.spec.name_tuple
        end
      when :prerelease
        if pkg.spec.version.prerelease?
          names << pkg.spec.name_tuple
        end
      when :latest
        tup = pkg.spec.name_tuple

        cur = names.find {|x| x.name == tup.name }
        if !cur
          names << tup
        elsif cur.version < tup.version
          names.delete cur
          names << tup
        end
      else
        names << pkg.spec.name_tuple
      end
    end

    names
  end
end