~singpolyma/sgx-jmp

ref: da30c371e56b8bb577897f1151b59c24e209127f sgx-jmp/lib/oob.rb -rw-r--r-- 946 bytes
da30c371Stephen Paul Weber Allow finishing admin command 11 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# frozen_string_literal: true

require "blather"

class OOB < Blather::XMPPNode
	register :oob, "jabber:x:oob"

	def self.new(url=nil, desc: nil)
		new_node = super :x

		case url
		when Nokogiri::XML::Node
			new_node.inherit url
		else
			new_node.url = url if url
			new_node.desc = desc if desc
		end

		new_node
	end

	def self.find_or_create(parent)
		if (found_x = parent.find("ns:x", ns: registered_ns).first)
			x = new(found_x)
			found_x.remove
		else
			x = new
		end
		parent << x
		x
	end

	def url
		find("ns:url", ns: self.class.registered_ns).first&.content
	end

	def url=(url)
		remove_children :url
		i = Niceogiri::XML::Node.new(:url, document, namespace)
		i.content = url
		self << i
	end

	def desc
		find("ns:desc", ns: self.class.registered_ns).first&.content
	end

	def desc=(description)
		remove_children :desc
		i = Niceogiri::XML::Node.new(:desc, document, namespace)
		i.content = description
		self << i
	end
end