lib/sprinkle/package.rb in crafterm-sprinkle-0.1.0 vs lib/sprinkle/package.rb in crafterm-sprinkle-0.1.1

- old
+ new

@@ -1,74 +1,74 @@ module Sprinkle module Package PACKAGES = {} - + def package(name, metadata = {}, &block) package = Package.new(name, metadata, &block) PACKAGES[name] = package - + if package.provides (PACKAGES[package.provides] ||= []) << package end - + package end - + class Package include ArbitraryOptions attr_accessor :name, :provides, :installer, :dependencies - + def initialize(name, metadata = {}, &block) raise 'No package name supplied' unless name @name = name @provides = metadata[:provides] @dependencies = [] self.instance_eval &block end - + def apt(*names) @installer = Sprinkle::Installers::Apt.new(self, *names) end - - def gem(name) + + def gem(name, options = {}, &block) @dependencies << :rubygems - @installer = Sprinkle::Installers::Gem.new(self, name) + @installer = Sprinkle::Installers::Gem.new(self, name, options, &block) end - - def source(source, &block) + + def source(source, options = {}, &block) @dependencies << :build_essential # REVISIT: should only be for Ubuntu/Debian, need platform specific bits here - @installer = Sprinkle::Installers::Source.new(self, source, &block) + @installer = Sprinkle::Installers::Source.new(self, source, options, &block) end - + def process(deployment, roles) return if meta_package? @installer.defaults(deployment) @installer.process(roles) end - + def requires(*packages) @dependencies << packages @dependencies.flatten! end - + def tree(depth = 1, &block) packages = [] - + @dependencies.each do |dep| package = PACKAGES[dep] block.call(self, package, depth) if block packages << package.tree(depth + 1, &block) end - + packages << self end - + def to_s; @name; end - + private - + def meta_package? @installer == nil end end end