lib/knapsack_pro/crypto/decryptor.rb
# frozen_string_literal: true
module KnapsackPro
module Crypto
class Decryptor
class TooManyEncryptedTestFilesError < StandardError; end
def self.call(test_files, encrypted_test_files)
if KnapsackPro::Config::Env.test_files_encrypted?
new(test_files, encrypted_test_files).call
else
# those test files are not encrypted
encrypted_test_files
end
end
def initialize(test_files, encrypted_test_files)
@test_files = test_files
@encrypted_test_files = encrypted_test_files
end
def call
decrypted_test_files = []
test_files.each do |test_file|
encrypted_path = Digestor.salt_hexdigest(test_file['path'])
encrypted_test_file = find_encrypted_test_file(encrypted_path)
next if encrypted_test_file.nil?
decrypted_test_file = encrypted_test_file.dup
decrypted_test_file['path'] = test_file['path']
decrypted_test_files << decrypted_test_file
end
decrypted_test_files
end
private
attr_reader :test_files,
:encrypted_test_files
def find_encrypted_test_file(encrypted_path)
test_files = encrypted_test_files.select do |t|
t['path'] == encrypted_path
end
if test_files.size == 1
test_files.first
elsif test_files.size > 1
raise TooManyEncryptedTestFilesError.new("Found more than one encrypted test file for encrypted path #{encrypted_path}")
end
end
end
end
end