def initialize(package_name, opts = {}, &block)
@options = OpenStruct.new(:name => package_name.to_s)
@source, @target = opts.values_at(:source, :target).map(&:to_s)
@directory = File.expand_path(opts[:directory].to_s)
(@source.empty? || @target.empty? || options.name.empty?) &&
abort("Must specify package name, source and output")
desc "Package #{@name}" unless ::Rake.application.last_description
task(options.name) do |_, task_args|
block.call(*[options, task_args].first(block.arity)) if block_given?
abort("Must specify args") unless options.respond_to?(:args)
@args = options.delete_field(:args)
run_cli
end
end