def extract!(force = false)
      return if @options[:dry_run] && !force
      
      # If opening an already extracted package; do nothing.
      if not package?
        return
      end
      
      # Create the path to the course
      FileUtils.mkdir_p(@path)
      
      Zip::ZipFile::foreach(@package) do |entry|
        entry_path = File.join(@path, entry.name)
        entry_dir = File.dirname(entry_path)
        FileUtils.mkdir_p(entry_dir) unless File.exists?(entry_dir)
        entry.extract(entry_path)
      end
    end
def extract!(force = false)
      return if @options[:dry_run] && !force
      
      # If opening an already extracted package; do nothing.
      if not package?
        return
      end
      
      # Create the path to the course
      FileUtils.mkdir_p(@path)
      
      Zip::ZipFile::foreach(@package) do |entry|
        entry_path = File.join(@path, entry.name)
        entry_dir = File.dirname(entry_path)
        FileUtils.mkdir_p(entry_dir) unless File.exists?(entry_dir)
        entry.extract(entry_path)
      end
    end
Extracts the content of the package to the course repository. This will be
 done automatically when opening a package so this method will rarely be
 used. If the +dry_run+ option was set to +true+ when the package was
 opened nothing will happen. This behavior can be overridden with the
 +force+ parameter.