class Imagemaster3000::Entities::Image

Attributes

actions[RW]
cpu[RW]
distribution[RW]
local_filename[RW]
name[RW]
ram[RW]
remote_filename[RW]
size[RW]
url[RW]
verification[RW]
version[RW]

Public Class Methods

new(name: nil, url: nil, distribution: nil, version: nil, ram: nil, cpu: nil, actions: nil, verification: nil) click to toggle source
# File lib/imagemaster3000/entities/image.rb, line 8
def initialize(name: nil, url: nil, distribution: nil, version: nil, ram: nil, cpu: nil, actions: nil, verification: nil)
  raise Imagemaster3000::Errors::ArgumentError, 'name, url, distribution or version cannot be nil' \
    if name.blank? || url.blank? || distribution.blank? || version.blank?

  @name = name
  @url = url
  @distribution = distribution
  @version = version
  @ram = ram
  @cpu = cpu
  @actions = prepare_actions actions
  @verification = prepare_verification verification

  logger.debug "Created image #{inspect}"
end

Private Instance Methods

prepare_actions(actions_hash) click to toggle source
# File lib/imagemaster3000/entities/image.rb, line 26
def prepare_actions(actions_hash)
  return nil if actions_hash.blank?
  logger.debug 'Preparing actions'

  namespace = Imagemaster3000::Actions
  prepared_actions = []

  actions_hash.each_pair do |action_name, array|
    action_const_name = action_name.capitalize.to_sym
    raise Imagemaster3000::Errors::ActionError, "No such action #{action_name.inspect}" \
      unless namespace.constants.include? action_const_name

    logger.debug "Recognized action #{action_name.inspect}"
    action_const = namespace.const_get action_const_name
    prepared_actions += array.map { |object| action_const.new(object) }
  end

  prepared_actions
end
prepare_hash_verification(hash_hash) click to toggle source
# File lib/imagemaster3000/entities/image.rb, line 74
def prepare_hash_verification(hash_hash)
  logger.debug 'Preparing hash verification'
  extend Imagemaster3000::Verification::Hash

  hash_function_name = hash_hash[:function]
  hash_function_const_name = hash_function_name.upcase.to_sym

  begin
    Digest(hash_function_const_name)
  rescue LoadError
    raise Imagemaster3000::Errors::VerificationError, "No such hash function #{hash_function_name}"
  end

  logger.debug "Recognized hash function #{hash_function_name}"
  { function: Digest.const_get(hash_function_const_name) }
end
prepare_signature_verification(signature_hash) click to toggle source
# File lib/imagemaster3000/entities/image.rb, line 59
def prepare_signature_verification(signature_hash)
  logger.debug 'Preparing signature verification'
  namespace = Imagemaster3000::Verification::Signatures
  signature_name = signature_hash.keys.first
  signature_const_name = signature_name.capitalize.to_sym

  raise Imagemaster3000::Errors::VerificationError, "No such signature type #{signature_name}" \
    unless namespace.constants.include? signature_const_name

  logger.debug "Recognized signature #{signature_name}"
  extend namespace.const_get(signature_const_name)

  signature_hash[signature_name]
end
prepare_verification(verification_hash) click to toggle source
# File lib/imagemaster3000/entities/image.rb, line 46
def prepare_verification(verification_hash)
  return nil if verification_hash.blank?
  logger.debug 'Preparing verification'

  extend Imagemaster3000::Verification::Verifiable
  prepared_verification = {}

  prepared_verification[:signature] = prepare_signature_verification verification_hash[:signature]
  prepared_verification[:hash] = prepare_hash_verification verification_hash[:hash]

  prepared_verification
end