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