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