Skip to content

Commit

Permalink
Merge remote-tracking branch 'bsears/homebrew'
Browse files Browse the repository at this point in the history
  • Loading branch information
crafterm committed Sep 24, 2011
2 parents 5f53d51 + a4e8555 commit 410178a
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 0 deletions.
34 changes: 34 additions & 0 deletions lib/sprinkle/installers/brew.rb
@@ -0,0 +1,34 @@
module Sprinkle
module Installers
# = Homebrew Package Installer
#
# The Homebrew package installer uses the +brew+ command to install
# packages on OSX.
#
# == Example Usage
#
# package :magic_beans do
# description "Beans beans they're good for your heart..."
# brew 'magic_beans_package'
# end
#
class Brew < Installer
attr_accessor :formulas #:nodoc:

def initialize(parent, *formulas, &block) #:nodoc:
formulas.flatten!

super parent, &block

@formulas = formulas
end

protected

def install_commands #:nodoc:
"brew install #{@formulas.join(' ')}"
end

end
end
end
21 changes: 21 additions & 0 deletions lib/sprinkle/verifiers/brew.rb
@@ -0,0 +1,21 @@
module Sprinkle
module Verifiers
# = Brew package Verifier
#
# Contains a verifier to check the existance of a Homebrew formula.
#
# == Example Usage
#
# verify { has_brew 'ntp' }
#
module Brew
Sprinkle::Verify.register(Sprinkle::Verifiers::Brew)

# Checks to make sure the brew <tt>formula</tt> exists on the remote server.
def has_brew(package)
@commands << "brew list | grep #{package}"
end

end
end
end
66 changes: 66 additions & 0 deletions spec/sprinkle/installers/brew_spec.rb
@@ -0,0 +1,66 @@
require File.dirname(__FILE__) + '/../../spec_helper'

describe Sprinkle::Installers::Brew do

before do
@formula = mock(Sprinkle::Package, :name => 'formula')
end

def create_brew(*formulas, &block)
Sprinkle::Installers::Brew.new(@formula, *formulas, &block)
end

describe 'when created' do

it 'should accept a single package to install' do
@installer = create_brew 'ruby'
@installer.formulas.should == [ 'ruby' ]
end

it 'should accept an array of packages to install' do
@installer = create_brew %w( gcc gdb g++ )
@installer.formulas.should == ['gcc', 'gdb', 'g++']
end

it 'should remove options from packages list' do
@installer = create_brew 'ruby'
@installer.formulas.should == [ 'ruby' ]
end

end

describe 'during installation' do

before do
@installer = create_brew 'ruby' do
pre :install, 'op1'
post :install, 'op2'
end
@install_commands = @installer.send :install_commands
end

it 'should invoke the apt installer for all specified packages' do
@install_commands.should =~ /brew install ruby/
end

it 'should automatically insert pre/post commands for the specified package' do
@installer.send(:install_sequence).should == [ 'op1', %(brew install ruby), 'op2' ]
end

it 'should install a specific version if defined'

end

# describe 'during dependencies only installation' do
#
# before do
# @installer = create_apt('ruby') { dependencies_only true }
# @install_commands = @installer.send :install_commands
# end
#
# it 'should invoke the apt installer with build-dep command for all specified packages' do
# @install_commands.should =~ /apt-get --force-yes -qyu build-dep ruby/
# end
#
# end
end

0 comments on commit 410178a

Please sign in to comment.