Sha256: 5455df9e9ed5e114c430dcee48d5e0218f4865668a5f5d4ae28912ddd1321709
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
require 'pathname' module Teapot class Package class BuildError < StandardError end class Task def initialize @callbacks = {} end def define(name, &callback) @callbacks[name] = callback end def [](name) @callbacks[name] || @callbacks[:all] end end def self.build_order(available, packages) ordered = [] expand = lambda do |name| package = available[name] unless package puts "Couldn't resolve #{name}" else package.depends.each do |dependency| expand.call(dependency) end unless ordered.include? package ordered << package end end end packages.each do |package| expand.call(package.name) end return ordered end def initialize(context, name, path = nil) @context = context parts = name.split('-') @name = parts[0..-2].join('-') @version = parts[-1] @path = path || (context.config.packages_path + @name) @build = Task.new @depends = [] @source_path = @path + name @fetch_location = nil end attr :name attr :version attr :path attr :variants attr :fetch_location attr :depends, true attr :source_path, true def install! if @fetch_location end end def build(platform, &block) @build.define(platform, &block) end def build!(platform = :all, config = {}) task = @build[platform.name] puts "Building #{@name} for #{platform.name}" if task Dir.chdir(@path) do puts "Entering #{@path}..." task.call(platform, platform.config.merge(config)) end else raise BuildError.new("Could not find task #{task_name} for #{platform.name}!") end end def fetch_from(location) @fetch_location = location end def to_s "<Package: #{@name}>" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
teapot-0.0.1 | lib/teapot/package.rb |