1# frozen_string_literal: true
2
3require "blather"
4
5class OOB < Blather::XMPPNode
6 register :oob, "jabber:x:oob"
7
8 def self.new(url=nil, desc: nil)
9 new_node = super :x
10
11 case url
12 when Nokogiri::XML::Node
13 new_node.inherit url
14 else
15 new_node.url = url if url
16 new_node.desc = desc if desc
17 end
18
19 new_node
20 end
21
22 def self.find_or_create(parent)
23 if (found_x = parent.find("ns:x", ns: registered_ns).first)
24 x = new(found_x)
25 found_x.remove
26 else
27 x = new
28 end
29 parent << x
30 x
31 end
32
33 def url
34 find("ns:url", ns: self.class.registered_ns).first&.content
35 end
36
37 def url=(url)
38 remove_children :url
39 i = Niceogiri::XML::Node.new(:url, document, namespace)
40 i.content = url
41 self << i
42 end
43
44 def desc
45 find("ns:desc", ns: self.class.registered_ns).first&.content
46 end
47
48 def desc=(description)
49 remove_children :desc
50 i = Niceogiri::XML::Node.new(:desc, document, namespace)
51 i.content = description
52 self << i
53 end
54end