Skip to content

Commit

Permalink
add PackageInstaller and standardize APIs a bit more
Browse files Browse the repository at this point in the history
  • Loading branch information
joshgoebel committed Apr 6, 2013
1 parent dee57d4 commit ad41ffc
Show file tree
Hide file tree
Showing 17 changed files with 143 additions and 125 deletions.
17 changes: 5 additions & 12 deletions lib/sprinkle/installers/apt.rb
Expand Up @@ -26,25 +26,18 @@ module Installers
# As you can see, setting options is as simple as creating a
# block and calling the option as a method with the value as
# its parameter.
class Apt < Installer
attr_accessor :packages #:nodoc:

class Apt < PackageInstaller
def initialize(parent, *packages, &block) #:nodoc:
packages.flatten!

options = { :dependencies_only => false }
options.update(packages.pop) if packages.last.is_a?(Hash)

super parent, options, &block

@packages = packages
super parent, *packages, &block
@options.reverse_merge!(:dependencies_only => false)
end

protected

def install_commands #:nodoc:
command = @options[:dependencies_only] ? 'build-dep' : 'install'
"env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get --force-yes -qyu #{command} #{@packages.join(' ')}"
noninteractive = "env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive"
"#{noninteractive} apt-get --force-yes -qyu #{command} #{@packages.join(' ')}"
end

end
Expand Down
1 change: 0 additions & 1 deletion lib/sprinkle/installers/binary.rb
Expand Up @@ -15,7 +15,6 @@ module Installers
class Binary < Installer
def initialize(parent, binary_archive, options = {}, &block) #:nodoc:
@binary_archive = binary_archive
@options = options
super parent, options, &block
end

Expand Down
9 changes: 1 addition & 8 deletions lib/sprinkle/installers/deb.rb
Expand Up @@ -10,14 +10,7 @@ module Installers
# deb 'http://debs.example.com/magic_beans.deb'
# end
#
class Deb < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class Deb < PackageInstaller

protected

Expand Down
9 changes: 1 addition & 8 deletions lib/sprinkle/installers/freebsd_pkg.rb
Expand Up @@ -16,14 +16,7 @@ module Installers
# freebsd_pkg %w(magic_beans magic_sauce)
# end
#
class FreebsdPkg < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class FreebsdPkg < PackageInstaller

protected

Expand Down
9 changes: 1 addition & 8 deletions lib/sprinkle/installers/openbsd_pkg.rb
Expand Up @@ -25,14 +25,7 @@ module Installers
#
# For help on PKG_PATH see section 15.2.2 of the OpenBSD FAQ
# (http://www.openbsd.org/faq/faq15.html)
class OpenbsdPkg < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class OpenbsdPkg < PackageInstaller

protected

Expand Down
9 changes: 1 addition & 8 deletions lib/sprinkle/installers/opensolaris_pkg.rb
Expand Up @@ -22,14 +22,7 @@ module Installers
#
# set :sudo, 'pfexec'
# set :sudo_prompt, ''
class OpensolarisPkg < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class OpensolarisPkg < PackageInstaller

protected

Expand Down
18 changes: 18 additions & 0 deletions lib/sprinkle/installers/package_installer.rb
@@ -0,0 +1,18 @@
module Sprinkle
module Installers
# This is a abstract class installer that most all the package installers
# inherit from (deb, *BSD pkg, rpm, etc)
class PackageInstaller < Installer

attr_accessor :packages #:nodoc:

def initialize(parent, *packages, &block) #:nodoc:
options = packages.extract_options!
super parent, options, &block
@packages = [*packages].flatten
end


end
end
end
12 changes: 1 addition & 11 deletions lib/sprinkle/installers/pacman.rb
@@ -1,17 +1,7 @@
module Sprinkle
module Installers
# The pacman installer installs Pacman packages
class Pacman < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, *packages, &block) #:nodoc:
super parent, options, &block

packages = [packages] unless packages.is_a?(Array)
packages.flatten!

@packages = packages
end
class Pacman < PackageInstaller

protected

Expand Down
9 changes: 1 addition & 8 deletions lib/sprinkle/installers/rpm.rb
Expand Up @@ -17,14 +17,7 @@ module Installers
# package :magic_beans do
# rpm %w(magic_beans magic_sauce)
# end
class Rpm < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, *packages, &block) #:nodoc:
super parent, &block
packages = [*packages].flatten
@packages = packages
end
class Rpm < PackageInstaller

protected

Expand Down
44 changes: 26 additions & 18 deletions lib/sprinkle/installers/runner.rb
@@ -1,26 +1,34 @@
module Sprinkle
module Installers
# The runner installer is great for running a single command.
#
# == Example Usage
module Installers
# The runner installer is great for running a simple command.
#
# == Example Usage
#
# package :magic_beans do
# runner "make world"
# end
#
class Runner < Installer
attr_accessor :cmd #:nodoc:
# You can also pass multiple commands as arguments or an array.
#
# package :magic_beans do
# runner "make world", "destroy world"
# runner [ "make world", "destroy world" ]
# end
#
class Runner < Installer
attr_accessor :cmds #:nodoc:

def initialize(parent, cmd = nil , &block) #:nodoc:
super parent, {}, &block
@cmd = cmd
end

protected

def install_commands #:nodoc:
@cmd
end
end
end
def initialize(parent, *cmds , &block) #:nodoc:
super parent, {}, &block
@cmds = [*cmds].flatten
raise "you need to specify a command" if cmds.nil?
end

protected

def install_commands #:nodoc:
@cmds
end
end
end
end
11 changes: 2 additions & 9 deletions lib/sprinkle/installers/smart.rb
@@ -1,13 +1,6 @@
module Sprinkle
module Installers
class Smart < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class Smart < PackageInstaller

protected

Expand All @@ -22,7 +15,7 @@ module Sprinkle
module Package
class Package
def smart(*names, &block)
@installer = Sprinkle::Installers::Smart.new(self, *names, &block)
@installers << Sprinkle::Installers::Smart.new(self, *names, &block)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/sprinkle/installers/source.rb
Expand Up @@ -79,8 +79,8 @@ class Source < Installer
attr_accessor :source #:nodoc:

def initialize(parent, source, options = {}, &block) #:nodoc:
@source = source
super parent, options, &block
@source = source
end

protected
Expand Down
16 changes: 12 additions & 4 deletions lib/sprinkle/installers/user.rb
@@ -1,13 +1,21 @@
module Sprinkle
module Installers
# The user installer helps add users. You may pass flags as an option.
#
# == Example Usage
#
# package :users do
# adduser 'admin', :flags => "--disabled-password"
# end
class User < Installer
def initialize(package, username, options, &block)
super package, &block
def initialize(package, username, options = {}, &block) #:nodoc:
super package, options, &block
@username = username
@options = options
end

protected
def install_commands

def install_commands #:nodoc:
"adduser #{@options[:flags]} #{@username}"
end
end
Expand Down
15 changes: 3 additions & 12 deletions lib/sprinkle/installers/yum.rb
@@ -1,7 +1,5 @@
module Sprinkle
module Installers
# = Yum Package Installer
#
# The Yum package installer installs RPM packages.
#
# == Example Usage
Expand All @@ -12,19 +10,12 @@ module Installers
# yum 'magic_beans'
# end
#
# You may also specify multiple rpms as an array:
# You may also specify multiple rpms as arguments or an array:
#
# package :magic_beans do
# yum %w(magic_beans magic_sauce)
# yum "magic_beans", "magic_sauce"
# end
class Yum < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, packages, &block) #:nodoc:
super parent, &block
packages = [packages] unless packages.is_a? Array
@packages = packages
end
class Yum < PackageInstaller

protected

Expand Down
17 changes: 2 additions & 15 deletions lib/sprinkle/installers/zypper.rb
Expand Up @@ -13,25 +13,12 @@ module Installers
# zypper 'magic_beans'
# end
#
# You may also specify multiple packages as an array:
#
# package :magic_beans do
# zypper %w(magic_beans magic_sauce)
# end
#
# or an argument list:
# You may also specify multiple packages as an argument list or array:
#
# package :magic_beans do
# zypper "magic_beans", "magic_sauce"
# end
class Zypper < Installer
attr_accessor :packages #:nodoc:

def initialize(parent, *packages, &block) #:nodoc:
packages.flatten!
super parent, &block
@packages = packages
end
class Zypper < PackageInstaller

protected

Expand Down
10 changes: 8 additions & 2 deletions spec/sprinkle/installers/runner_spec.rb
Expand Up @@ -13,8 +13,14 @@ def create_runner(cmd)
describe 'when created' do
it 'should accept a single cmd to run' do
@installer = create_runner 'teste'
@installer.cmd.should == 'teste'
@installer.cmds.should == ['teste']
end

it 'should accept an array of commands to run' do
@installer = create_runner ['teste', 'world']
@installer.cmds.should == ['teste', 'world']
@installer.install_sequence.should == ['teste', 'world']
end
end

describe 'during execution' do
Expand All @@ -25,7 +31,7 @@ def create_runner(cmd)
end

it 'should run the given command for all specified packages' do
@install_commands.should == 'teste'
@install_commands.should == ['teste']
end
end
end

0 comments on commit ad41ffc

Please sign in to comment.