Class: Gem::SourceIndex

Inherits:
Object
  • Object
show all
Defined in:
lib/sprout/generator/base_mixins.rb

Instance Method Summary collapse

Instance Method Details

#sprout_search(gem_pattern, platform_only = false) ⇒ Object

This feature seems to be getting deprecated from the latest gems releases (1.3.x). We actually need it and don’t want the nagging - so, copied sources from RubyGems SVN trunk, and mixing in… :-( There should be a more stable integration point with RubyGems Any ideas or contributions are welcome!



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/sprout/generator/base_mixins.rb', line 11

def sprout_search(gem_pattern, platform_only = false)
  version_requirement = nil
  only_platform = false

  # unless Gem::Dependency === gem_pattern
  #   warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated"
  # end

  case gem_pattern
  when Regexp then
    version_requirement = platform_only || Gem::Requirement.default
  when Gem::Dependency then
    only_platform = platform_only
    version_requirement = gem_pattern.version_requirements
    gem_pattern = if Regexp === gem_pattern.name then
                    gem_pattern.name
                  elsif gem_pattern.name.empty? then
                    //
                  else
                    /^#{Regexp.escape gem_pattern.name}$/
                  end
  else
    version_requirement = platform_only || Gem::Requirement.default
    gem_pattern = /#{gem_pattern}/i
  end

  unless Gem::Requirement === version_requirement then
    version_requirement = Gem::Requirement.create version_requirement
  end

  specs = @gems.values.select do |spec|
    spec.name =~ gem_pattern and
      version_requirement.satisfied_by? spec.version
  end

  if only_platform then
    specs = specs.select do |spec|
      Gem::Platform.match spec.platform
    end
  end
  
  begin
    specs.sort_by { |s| s.sort_obj }
  rescue NoMethodError => e
    puts "It looks like your RubyGems installation is not compatible with this version of Sprouts.\n\nTo update, run:\ngem update --system\n\n"
    raise e
  end
end