Class: Nu::GemTools

Inherits:
Object
  • Object
show all
Defined in:
lib/nu/gem_tools.rb

Instance Method Summary collapse

Instance Method Details

#dependency_from_requirement(spec, requirement) ⇒ Object



7
8
9
10
11
12
# File 'lib/nu/gem_tools.rb', line 7

def dependency_from_requirement(spec, requirement)
  unless requirement.respond_to?('satisfied_by?') 
    requirement = Gem::Requirement.create(requirement)
  end
  Gem::Dependency.new(spec,requirement)
end

#find(package_name, requirement = nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/nu/gem_tools.rb', line 14

def find(package_name, requirement=nil)
  dependency = dependency_from_requirement(package_name, nil)
  fetcher = Gem::SpecFetcher.new
  specs = fetcher.fetch(dependency, true)
  unless specs == nil
    specs.map! do |item| 
      item.first
    end
    specs.sort! {|a,b| b.version <=> a.version}
  end
  return specs unless requirement
  return specs.detect {|spec| spec.satisfies_requirement?(dependency)} if requirement
end

#lib_for(name, requirement = nil) ⇒ Object



50
51
52
53
54
# File 'lib/nu/gem_tools.rb', line 50

def lib_for(name, requirement=nil)
  spec = spec_for(name, requirement)
  gem_path = spec.full_gem_path
  File.expand_path(File.join(gem_path,spec.require_paths.first))
end

#remote_spec_for(spec, requirement = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/nu/gem_tools.rb', line 28

def remote_spec_for(spec, requirement=nil)
  dependency = dependency_from_requirement(spec, nil)
  fetcher = Gem::SpecFetcher.new
  specs = fetcher.fetch(dependency, true)
  dependency = dependency_from_requirement(spec, requirement)
  unless specs == nil
    specs.map! do |item| 
      item.first
    end
    specs.sort! {|a,b| b.version <=> a.version}
    specs.detect {|spec| spec.satisfies_requirement?(dependency)}
  end
end

#spec_for(spec, requirement = nil) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/nu/gem_tools.rb', line 42

def spec_for(spec, requirement=nil)
      dependency = dependency_from_requirement(spec, requirement)
      searcher = Gem::GemPathSearcher.new()
      all_installed_gems = searcher.init_gemspecs()

  return all_installed_gems.detect {|spec| spec.satisfies_requirement?(dependency)}
end

#write_spec(spec, dest) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/nu/gem_tools.rb', line 56

def write_spec(spec, dest)
  dest = File.expand_path(dest)
  dest = File.join(dest,'nu_spec.yaml')
  
  unless spec.is_a?(Gem::Specification) 
    spec = spec_for(spec)
  end
  
  File.open( dest, 'w' ) do |out|
      YAML.dump(spec, out)
  end
end