class Nifty::CommandExecutioner

Public Class Methods

available_backends() click to toggle source

List all available backends

@return [Array] array of all available backend classes

# File lib/nifty/command_executioner.rb, line 36
def available_backends
  constants = Nifty::Backends.constants.map { |sym| sym.to_s.downcase }
  constants.select! do |constant|
    unknown = Nifty::Backends.const_get(constant.camelize)

    unknown.respond_to?('backend?') && unknown.backend?
  end

  constants.sort
end
available_transfer_methods(backend) click to toggle source

List all available transfer methods for the backend

@param [Nifty::Backend] backend @return [Array] array of transfer method classes that support the backend

# File lib/nifty/command_executioner.rb, line 17
def available_transfer_methods(backend)
  unless Nifty::TransferMethods.constants.include? backend.camelize.to_sym
    fail Nifty::CommandExecutionError, "No backend with name '#{backend}'"
  end

  clazz = "Nifty::TransferMethods::#{backend.camelize}".constantize
  constants = clazz.constants.map { |sym| sym.to_s.downcase }
  constants.select! do |constant|
    unknown = clazz.const_get(constant.camelize)

    unknown.respond_to?('transfer_method?') && unknown.transfer_method?
  end

  constants.sort
end
exit_on_failure?() click to toggle source

Force Thor to exit with a non-zero return value on failure (after `exit` is called).

@return [TrueClass, FalseClass] true if thor fail, false otherwise

# File lib/nifty/command_executioner.rb, line 9
def exit_on_failure?
  true
end

Public Instance Methods

backends() click to toggle source
# File lib/nifty/command_executioner.rb, line 94
def backends
  backends = self.class.available_backends
  longest = backends.map { |backend| backend.length }.sort.last
  backends.each do |backend|
    $stdout.puts "%-#{longest + 2}s" % "#{backend}" + "# #{Nifty::Backends.const_get(backend.camelize).description}"
  end
end
version() click to toggle source
# File lib/nifty/command_executioner.rb, line 89
def version
  $stdout.puts Nifty::VERSION
end

Private Instance Methods

construct_transfer_method(backend, parameters) click to toggle source

Returns transfer method according to settings

@param [Nifty::Backend] backend @param [Hash] parameters @option parameters [String] transfer-method name of the transfer method @option parameters [String] transfer-destination destination fo the transfer method @return [Nifty::TransferMethod] instance of specified transfer method

# File lib/nifty/command_executioner.rb, line 227
def construct_transfer_method(backend, parameters)
  transfer_method_const = transfer_method_constant(backend, parameters[:"transfer-method"])

  transfer_method_const.new(parameters[:"transfer-destination"], parameters)
rescue Nifty::Errors::TransferMethodError => ex
  $stdout.puts ex.message
  exit Nifty::ExitCodes::TRANSFER_METHOD_ERROR_EXIT_CODE
end
init_log(parameters) click to toggle source

Inits logging according to the settings

@param [Hash] parameters @option parameters [String] logging-level @option parameters [String] logging-file file to log to @option parameters [TrueClass, FalseClass] debug debug mode @return [Type] description of returned object

# File lib/nifty/command_executioner.rb, line 181
def init_log(parameters)
  parameters[:"logging-level"] = 'DEBUG' if parameters[:debug]

  Yell.new :stdout, :name => Object, :level => parameters[:"logging-level"].downcase, :format => Yell::DefaultFormat
  Object.send :include, Yell::Loggable

  if parameters[:"logging-file"]
    unless (File.exist?(parameters[:"logging-file"]) && File.writable?(parameters[:"logging-file"])) || (File.writable?(File.dirname(parameters[:"logging-file"])))
      logger.error "File #{parameters[:"logging-file"]} isn't writable"
      return
    end

    logger.adapter :file, parameters[:"logging-file"]
  end
end
migrate(backend, options) click to toggle source
# File lib/nifty/command_executioner.rb, line 164
def migrate(backend, options)
  parameters = options.to_hash.deep_symbolize_keys
  init_log parameters

  backend = Nifty::Backends.const_get(backend.camelize)
  logger.debug "Selected backend '#{backend.inspect}'"

  exit backend.migrate(parameters)
end
start(backend, options) click to toggle source

Starts NIFTY with selected backend

@param [String] backend backend's name @param [Hash] options options from command line

# File lib/nifty/command_executioner.rb, line 148
def start(backend, options)
  parameters = options.to_hash.deep_symbolize_keys
  init_log parameters

  backend = Nifty::Backends.const_get(backend.camelize)
  logger.debug "Selected backend '#{backend.inspect}'"

  transfer_method = construct_transfer_method(backend, parameters)
  logger.debug "Selected transfer method '#{transfer_method.inspect}'"

  logger.debug "Parameters: #{parameters}"

  processor = Nifty::Event::Processor.new(backend, transfer_method, parameters)
  exit processor.process_events
end
transfer_method_constant(backend, transfer_method_name) click to toggle source

Returns class representing transfer method of specified name

@param [Nifty::Backend] backend @param [String] transfer_method_name name of the transfer method @return [Nifty::TransferMethod] transfer method class

# File lib/nifty/command_executioner.rb, line 202
def transfer_method_constant(backend, transfer_method_name)
  transfer_methods = "Nifty::TransferMethods::#{backend.name.demodulize}".constantize
  backend_name = backend.name.demodulize.underscore
  error_msg = "No such transfer method '#{transfer_method_name}' for backend '#{backend_name}'"
  unless transfer_methods.constants.include?(transfer_method_name.camelize.to_sym)
    $stdout.puts error_msg
    exit Nifty::ExitCodes::NO_TRANSFER_METHOD_ERROR_EXIT_CODE
  end

  transfer_method = transfer_methods.const_get(transfer_method_name.camelize)
  unless transfer_method.respond_to?('backend') && transfer_method.backend == backend
    $stdout.puts error_msg
    exit
  end

  transfer_method
end