@@ 5,20 5,21 @@ require "value_semantics/monkey_patched"
class CDR
module Disposition
def self.===(other)
- ["NO ANSWER", "ANSWERED", "BUSY", "FAILED"].include?(other)
+ ["NO ANSWER", "ANSWERED", "BUSY", "FAILED", "VOICEMAIL"].include?(other)
end
- def self.for(cause)
- case cause
- when "timeout", "rejected", "cancel"
- "NO ANSWER"
- when "hangup"
- "ANSWERED"
- when "busy"
- "BUSY"
- else
- "FAILED"
- end
+ CAUSES = {
+ timeout: "NO ANSWER",
+ rejected: "NO ANSWER",
+ cancel: "NO ANSWER",
+ hangup: "ANSWERED",
+ busy: "BUSY"
+ }.freeze
+
+ def self.for(cause, tag)
+ return tag if tag == "VOICEMAIL"
+
+ CAUSES.fetch(cause.to_sym, "FAILED")
end
end
@@ 39,7 40,7 @@ class CDR
cdr_id: "sgx-jmp/#{event['callId']}",
start: start,
billsec: (Time.parse(event["endTime"]) - start).ceil,
- disposition: Disposition.for(event["cause"])
+ disposition: Disposition.for(event["cause"], event["tag"])
}.merge(kwargs))
end