class Pandocomatic::ConvertDirCommand

Commmand to convert a directory

@!attribute config

@return [Configuration] configuration to use when converting directory

@!attribute src_dir

@return [String] the source directory to convert from

@!attribute dst_dir

@return [String] the destination directory to convert to

Attributes

config[R]
dst_dir[R]
src_dir[R]

Public Class Methods

new(current_config, src_dir, dst_dir) click to toggle source

Create a new ConvertDirCommand

@param current_config [Configuration] The configuration of pandocomatic

as it was before entering the source directory

@param src_dir [String] the directory to convert @param dst_dir [String] the directory to convert to

Calls superclass method
# File lib/pandocomatic/command/convert_dir_command.rb, line 53
def initialize(current_config, src_dir, dst_dir)
  super()
  @src_dir = src_dir
  @config = current_config

  begin
    @config = reconfigure current_config, @src_dir
  rescue ConfigurationError => e
    @errors.push e
  end

  @dst_dir = dst_dir

  if Dir.exist? @dst_dir
    @errors.push IOError.new(:directory_is_not_readable, nil, @dst_dir) unless File.readable? @dst_dir
    @errors.push IOError.new(:directory_is_not_writable, nil, @dst_dir) unless File.writable? @dst_dir
    @errors.push IOError.new(:directory_is_not_a_directory, nil, @dst_dir) unless File.directory? @dst_dir
  end

  Dir.foreach @src_dir do |filename|
    src = File.join @src_dir, filename

    next if config.skip? src

    @errors.push IOError.new(:file_or_directory_does_not_exist, nil, src) unless File.exist? src

    dst = File.join @dst_dir, filename

    if File.symlink?(src) && !config.follow_links?
      subcommand = CreateLinkCommand.new(src, dst)
    elsif File.directory? src
      subcommand = if config.recursive?
                     ConvertDirCommand.new(config, src, dst)
                   else
                     SkipCommand.new(src, :skipping_directory)
                   end
    elsif File.file? src
      if config.convert? src
        subcommand = ConvertFileMultipleCommand.new(config, src, dst)
      elsif !modified_only? || file_modified?(src, dst)
        subcommand = CopyFileCommand.new(src, dst)
      end
    else
      subcommand = SkipCommand.new(src, :unclear_what_to_do)
    end

    push subcommand unless subcommand.nil? || subcommand.skip?
  end

  # Empty commands do not count to the total amount of commands to execute
  uncount if skip?
end

Public Instance Methods

directory?() click to toggle source

Converts this command a directory?

@return [Boolean] true

# File lib/pandocomatic/command/convert_dir_command.rb, line 118
def directory?
  true
end
run() click to toggle source

Run this command

# File lib/pandocomatic/command/convert_dir_command.rb, line 130
def run
  if create_directory?
    Pandocomatic::LOG.info "  Creating directory '#{@dst_dir}'"
    Dir.mkdir @dst_dir
  end
rescue SystemError => e
  raise IOError.new(:error_creating_directory, e, @dst_dir)
end
skip?() click to toggle source

Should this command be skipped?

@return [Boolean] True if this command has no sub commands

# File lib/pandocomatic/command/convert_dir_command.rb, line 111
def skip?
  @subcommands.empty?
end
to_s() click to toggle source

Convert this command to a String representation for a Printer

@return [String]

# File lib/pandocomatic/command/convert_dir_command.rb, line 125
def to_s
  "convert #{@src_dir}; #{create_directory? ? 'create and ' : ''}enter #{@dst_dir}"
end

Private Instance Methods

create_directory?() click to toggle source
# File lib/pandocomatic/command/convert_dir_command.rb, line 141
def create_directory?
  !File.exist? @dst_dir or !File.directory? @dst_dir
end
reconfigure(current_config, src_dir) click to toggle source

If the source directory contains a configuration file, use it to reconfigure the converter. Otherwise, use the current configuration

# File lib/pandocomatic/command/convert_dir_command.rb, line 147
def reconfigure(current_config, src_dir)
  config_file = File.join src_dir, Configuration::CONFIG_FILE
  if File.exist? config_file
    current_config.reconfigure config_file
  else
    current_config
  end
end