class EnigmaEncrypto::Decrypt

Public Class Methods

new() click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 7
def initialize
  @file_handler = FileHandler.new
  @rotator = Rotator.new
  @rotation_num_gen = RotationNumGen.new
end

Public Instance Methods

action() click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 43
def action
  exit if !get_command_args
  exit if !check_command_args
  decrypt
  puts "Decrypted #{@decrypted} with the key #{@key} and date #{@date}"
end
check_command_args() click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 25
def check_command_args
  if ("%05d" % (@key.to_i)).size != 5 || ("%06d" % (@date.to_i)).size != 6
    puts "Incorrect key or date entered"
    return false; end
  operation = @file_handler.check_file_useability(@encrypted, @decrypted)
  return false if operation == false || operation == "c"
  File.truncate(@decrypted, 0) if operation == "w"
  true
end
decrypt() click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 35
def decrypt
  @reverse_array = @rotation_num_gen.reverse_num_array(@key, @date)
  @opened_msg = @file_handler.read(@encrypted)
  length = @opened_msg.size
  decrypt_message(length)
  @opened_msg.close
end
get_command_args() click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 13
def get_command_args
  if ARGV.length != 4
    puts "Oooops!\nIncorrect number of arguments supplied.\nTry again."
    return false
  else
    @encrypted = ARGV[0]
    @decrypted = ARGV[1]
    @key = ARGV[2]
    @date = ARGV[3]
  end
end

Private Instance Methods

decrypt_message(length) click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 52
def decrypt_message(length)
  reverse_num_index = 0
  while length > 0
    character_in_msg = @opened_msg.getc
    reverse_msg(character_in_msg, reverse_num_index)
    reverse_num_index += 1
    reverse_num_index = 0 if reverse_num_index == 4
    length -= 1
  end
end
reverse_msg(character, index) click to toggle source
# File lib/enigma_encrypto/decrypt.rb, line 63
def reverse_msg(character, index)
  reversed_char = @rotator.reverse_text(character, @reverse_array[index])
  @file_handler.writer(@decrypted, reversed_char)
end