# File lib/gem_plugin.rb, line 107
107:     def load(needs = {})
108:       sdir = File.join(Gem.dir, "specifications")
109:       gems = Gem::SourceIndex.from_installed_gems(sdir)
110:       needs = needs.merge({"gem_plugin" => INCLUDE})
111:       
112:       gems.each do |path, gem|
113:         # don't load gems more than once
114:         next if @gems.has_key? gem.name        
115:         check = needs.dup
116: 
117:         # rolls through the depends and inverts anything it finds
118:         gem.dependencies.each do |dep|
119:           # this will fail if a gem is depended more than once
120:           if check.has_key? dep.name
121:             check[dep.name] = !check[dep.name]
122:           end
123:         end
124:         
125:         # now since excluded gems start as true, inverting them
126:         # makes them false so we'll skip this gem if any excludes are found
127:         if (check.select {|name,test| !test}).length == 0
128:           # looks like no needs were set to false, so it's good
129:           gem_dir = File.join(Gem.dir, "gems", "#{gem.name}-#{gem.version}")
130:           require File.join(gem_dir, "lib", gem.name, "init.rb")
131:           @gems[gem.name] = gem_dir
132:         end
133:       end
134: 
135:       return nil
136:     end