Class: Rcr::GemSync

Inherits:
Object
  • Object
show all
Defined in:
lib/rcr/gem_sync.rb

Constant Summary collapse

VERSION =
'0.2.0'
GITHUB =
"http://gems.github.com"
RCR_GEM_LIST =
File.expand_path(File.join(File.dirname(__FILE__), *%w[.. runcoderun_gems.txt]))

Class Method Summary collapse

Class Method Details

.convert_gem_list(string) ⇒ Object



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

def self.convert_gem_list(string)
  gems = []
  string.each do |line|
    name = parse_name(line)
    next unless name
    versions = parse_versions(line)
    versions.each do |version|
      gems << OpenStruct.new(:name => name, :version => version.strip)
    end
  end
  gems
end

.gem_installed?(name, version) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/rcr/gem_sync.rb', line 50

def self.gem_installed?(name, version)
  installed_gems.detect {|gem| gem.name == name && gem.version == version}
end

.install_gemsObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rcr/gem_sync.rb', line 9

def self.install_gems
  gem_list = File.read(RCR_GEM_LIST)
  convert_gem_list(gem_list).each do |gem|
    if gem_installed?(gem.name, gem.version)
      puts "skipping #{gem.name} #{gem.version}"
      next
    end
    cmd = "gem install #{gem.name} --no-ri --no-rdoc"
    cmd << " --version #{gem.version}" if gem.version
    puts cmd
    puts `#{cmd}`
    unless $?.success?
      cmd << " --source #{GITHUB}"
      puts "***** WARNING Trying to install gem #{gem.name} from github - watch for security issues."
      puts cmd
      puts `#{cmd}`
    end
  end
end

.installed_gemsObject



54
55
56
# File 'lib/rcr/gem_sync.rb', line 54

def self.installed_gems
  @installed_gems ||= convert_gem_list `gem list`
end

.parse_name(string) ⇒ Object



42
43
44
# File 'lib/rcr/gem_sync.rb', line 42

def self.parse_name(string)
  string.match(/[\w\-_]*/)[0]
end

.parse_versions(string) ⇒ Object



46
47
48
# File 'lib/rcr/gem_sync.rb', line 46

def self.parse_versions(string)
  string.scan(/([\d\.]+)/).flatten
end