class AWS::SNS::Topic

def endpoint_opts(endpoint, opts = {})

def endpoint_opts(endpoint, opts = {})
  case
  when endpoint.is_a?(SQS::Queue)
    # auto add a policy to the queue to allow the topic
    # to send the queue messages
    unless opts[:update_policy] == false
      policy = endpoint.policy || SQS::Policy.new
      policy.allow(
        :principal => :any, 
        :actions => [:send_message], 
        :resources => [endpoint]
      ).where(:source_arn).is(arn)
      endpoint.policy = policy
    end
    
    { :protocol => 'sqs', :endpoint => endpoint.arn }
  when endpoint =~ /^arn:/
    raise ArgumentError, "expected a queue ARN" unless
      endpoint =~ /^arn:aws:sqs:/
    { :protocol => "sqs", :endpoint => endpoint }
  when endpoint.kind_of?(URI)
    { :protocol => endpoint.scheme,
      :endpoint => endpoint.to_s }
  when endpoint =~ /^(https?):/
    { :protocol => $1, :endpoint => endpoint }
  when endpoint.include?("@")
    { :protocol => opts[:json] ? "email-json" : "email",
      :endpoint => endpoint }
  when endpoint.gsub(/\D/,'') =~ /\d{11,15}/
    { :protocol => "sms", :endpoint => endpoint.gsub(/\D/,'') }
  else
    raise ArgumentError, "could not determine protocol for '#{endpoint}'"
  end
end