1# frozen_string_literal: true
2
3module CustomerOGM
4 def self.for(url, fetch_vcard)
5 return Media.new(url) if url
6
7 TTS.for(fetch_vcard)
8 end
9
10 class Media
11 def initialize(url)
12 @url = url
13 end
14
15 def to_render
16 [:voicemail_ogm_media, { locals: { url: @url } }]
17 end
18 end
19
20 class TTS
21 def self.for(fetch_vcard)
22 fetch_vcard.call.then { |vcard|
23 new(vcard.first.payload_node)
24 }.catch { new(Nokogiri::XML::Document.new) }
25 end
26
27 def initialize(vcard)
28 @vcard = vcard
29 end
30
31 def [](k)
32 value = @vcard.find_first(
33 "./ns:#{k.downcase}/ns:text",
34 ns: "urn:ietf:params:xml:ns:vcard-4.0"
35 )
36 return if !value || value.content.empty?
37
38 value.content
39 end
40
41 def fn
42 self["FN"] || self["NICKNAME"] || "a user of JMP.chat"
43 end
44
45 def to_render
46 [:voicemail_ogm_tts, { locals: { fn: fn } }]
47 end
48 end
49end