class ChefEc2NodeRm::SqsMessage

Attributes

instance_id[R]
state[R]

Public Class Methods

new(msg) click to toggle source
# File lib/chef_ec2_node_rm/sqs_message.rb, line 5
def initialize(msg)
  msg_parsed = JSON.parse(msg)
  raise SqsMessageNotHash, "Expected a Hash but got a #{msg_parsed.class}" unless msg_parsed.is_a?(Hash)

  attr_map = {
    instance_id: ['detail', 'instance-id'],
    state: %w[detail state]
  }
  attr_map.each do |name, path|
    value = msg_parsed.dig(*path)
    raise ChefEc2NodeRm::SqsMessageMissingAttribute, "Missing value for #{name} (msg='#{msg}', path='#{path.join('.')}')" if value.nil?
    instance_variable_set("@#{name}", value)
  end
rescue JSON::ParserError => e
  raise ChefEc2NodeRm::SqsMessageMalformedJson, "Malformed JSON: #{e}"
end