ibr.rb

 1# frozen_string_literal: true
 2
 3require "blather"
 4
 5class IBR < Blather::Stanza::Iq::Query
 6	register :ibr, nil, "jabber:iq:register"
 7
 8	def registered=(reg)
 9		query.at_xpath("./ns:registered", ns: self.class.registered_ns)&.remove
10		node = Nokogiri::XML::Node.new("registered", document)
11		node.default_namespace = self.class.registered_ns
12		query << node if reg
13	end
14
15	def registered?
16		!!query.at_xpath("./ns:registered", ns: self.class.registered_ns)
17	end
18
19	def remove!
20		query.children.remove
21		node = Nokogiri::XML::Node.new("remove", document)
22		node.default_namespace = self.class.registered_ns
23		query << node
24	end
25
26	def remove?
27		!!query.at_xpath("./ns:remove", ns: self.class.registered_ns)
28	end
29
30	[
31		"instructions",
32		"username",
33		"nick",
34		"password",
35		"name",
36		"first",
37		"last",
38		"email",
39		"address",
40		"city",
41		"state",
42		"zip",
43		"phone",
44		"url",
45		"date"
46	].each do |tag|
47		define_method("#{tag}=") do |v|
48			query.at_xpath("./ns:#{tag}", ns: self.class.registered_ns)&.remove
49			node = Nokogiri::XML::Node.new(tag, document)
50			node.default_namespace = self.class.registered_ns
51			node.content = v
52			query << node
53		end
54
55		define_method(tag) do
56			query.at_xpath("./ns:#{tag}", ns: self.class.registered_ns)&.content
57		end
58	end
59end