class Macinbox::Actions::InstallBox

Public Class Methods

new(opts) click to toggle source
# File lib/macinbox/actions/install_box.rb, line 14
def initialize(opts)
  @input_box   = opts[:box_path]   or raise ArgumentError.new(":box_path not specified")
  @box_name    = opts[:box_name]   or raise ArgumentError.new(":box_name not specified")
  @box_format  = opts[:box_format] or raise ArgumentError.new(":box_format not specified")
  @boxes_dir   = opts[:boxes_dir]  or raise ArgumentError.new(":boxes_dir not specified")

  @box_version = opts[:macos_version].to_s rescue nil

  raise Macinbox::Error.new("box not found: #{@input_box}") unless File.exist? @input_box
  raise Macinbox::Error.new("boxes directory not found: #{@boxes_dir}") unless File.exist? @boxes_dir
end

Public Instance Methods

run() click to toggle source
# File lib/macinbox/actions/install_box.rb, line 30
def run
  Logger.info "Copying box to #{@boxes_dir}..." do
    if !@box_version || File.exist?(target_box_dir)
      @box_version = Dir["#{@boxes_dir}/#{@box_name}/*/*"].map { |o| o.split('/')[-2].to_i }.sort.last.next rescue 0
    end
    raise Macinbox::Error.new("box already exists") if File.exist? target_box_dir
    Task.run %W[ /bin/mkdir -p #{target_box_dir} ]
    Macinbox::copyfiles(from: Dir["#{@input_box}/*"], to: target_box_dir, recursive: true)
    Task.run %W[ /usr/sbin/chown -R #{ENV["SUDO_USER"]} #{@boxes_dir}/#{@box_name} ]
    Logger.info "Installed box: #{@box_name} (#{@box_format}, #{@box_version})"
  end
end
target_box_dir() click to toggle source
# File lib/macinbox/actions/install_box.rb, line 26
def target_box_dir
  "#{@boxes_dir}/#{@box_name}/#{@box_version}/#{@box_format}"
end