Class: SnsSender::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/sns_sender/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeClient

Returns a new instance of Client.



9
10
11
12
13
14
15
16
17
18
# File 'lib/sns_sender/client.rb', line 9

def initialize
  SnsSender.configuration.validate!
  @sns_client = Aws::SNS::Client.new(
    region: SnsSender.configuration.aws_region,
    credentials: Aws::Credentials.new(
      SnsSender.configuration.aws_access_key_id,
      SnsSender.configuration.aws_secret_access_key
    )
  )
end

Instance Attribute Details

#sns_clientObject (readonly)

Returns the value of attribute sns_client.



7
8
9
# File 'lib/sns_sender/client.rb', line 7

def sns_client
  @sns_client
end

Instance Method Details

#publish(topic_arn:, message:, message_attributes: {}) ⇒ Object

Raises:

  • (ArgumentError)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/sns_sender/client.rb', line 20

def publish(topic_arn:, message:, message_attributes: {})
  raise ArgumentError, "topic_arn is required" if topic_arn.nil? || topic_arn.empty?
  raise ArgumentError, "message is required" if message.nil? || message.empty?

  formatted_message = message.is_a?(String) ? message : message.to_json
  formatted_attributes = format_message_attributes(message_attributes)

  begin
    response = sns_client.publish(
      topic_arn: topic_arn,
      message: formatted_message,
      message_attributes: formatted_attributes
    )
    { success: true, message_id: response.message_id }
  rescue Aws::SNS::Errors::ServiceError => e
    raise PublishError, "Failed to publish message: #{e.message}"
  end
end