lib/aptinstaller/aptinstaller.rb in ngauthier-aptinstaller-0.2.0 vs lib/aptinstaller/aptinstaller.rb in ngauthier-aptinstaller-0.3.0
- old
+ new
@@ -1,11 +1,38 @@
require 'yaml'
class AptInstaller
def self.autopkg(opts = {})
- config_file = opts.delete(:config)
+ config_yaml = self.read_yaml_file(opts[:config])
+ packages = self.detect_packages_to_install(config_yaml['packages'])
+ if packages.size > 0
+ $stderr.write "\nThe following packages are required by this program but not installed:\n\n"
+ packages.each do |package|
+ $stderr.write "\t* "+package['executable']
+ $stderr.write " (provided by package \"#{package['package']}\")" if package['package']
+ $stderr.write "\n"
+ end
+ $stderr.write "\nYou can install them by running \"aptinstaller\" in the root of your project\n\n"
+ exit(1)
+ end
+ end
+
+ def self.autopkg_install(rails_root = '.')
+ rails_root ||= '.' # in case they pass in nil
+ config_yaml = self.read_yaml_file(File.join(rails_root, 'config', 'aptinstaller.yml'))
+ packages = self.detect_packages_to_install(config_yaml['packages'])
+ if packages.size > 0
+ exec("apt-get install #{packages.collect{|p| p['package'] || p['executable'] }.join(" ")}")
+ else
+ puts "All dependencies are installed"
+ end
+ end
+
+ private
+
+ def self.read_yaml_file(config_file)
raise "Error reading config file, no :config parameter specified" unless config_file
begin
begin
config = File.new(config_file, 'r').read
rescue
@@ -17,23 +44,18 @@
begin
config_yaml = YAML::load(config)
rescue => ex
raise "Error parsing YAML file: #{ex.to_s}"
end
- errors = []
- config_yaml['packages'].each do |package|
+ config_yaml
+ end
+
+ def self.detect_packages_to_install(packages)
+ not_installed = []
+ packages.each do |package|
exec = package['executable']
pkg = package['package']
- errors.push(package) if `which #{exec}`.size == 0
+ not_installed.push(package) if `which #{exec}`.size == 0
end
- if errors.size > 0
- $stderr.write "\nThe following packages are required by this program but not installed:\n\n"
- errors.each do |package|
- $stderr.write "\t* "+package['executable']+"\n"
- end
- $stderr.write "\nYou can install them by running:\n"
- $stderr.write "\tapt-get install "
- $stderr.write errors.collect{|p| p['package'] || p['executable']}.join(" ")
- $stderr.write "\n\nor by running \"aptinstaller\" in the root of your project\n\n"
- exit(1)
- end
+ not_installed
+ end
end