# frozen_string_literal: true
require "blather"
require "nokogiri"
class XEP0122Field
attr_reader :field
def initialize(type, range: nil, **field)
@type = type
@range = range
@field = Blather::Stanza::X::Field.new(**field)
@field.add_child(validate)
end
protected
def validate
validate = Nokogiri::XML::Node.new("validate", field.document)
validate.default_namespace = "http://jabber.org/protocol/xdata-validate"
validate["datatype"] = @type
validate.add_child(validation)
validate
end
def validation
range_node || Nokogiri::XML::Node.new(
"basic",
field.document
).tap do |basic|
basic.default_namespace = "http://jabber.org/protocol/xdata-validate"
end
end
def range_node
return unless @range
Nokogiri::XML::Node.new("range", field.document).tap do |range|
range.default_namespace = "http://jabber.org/protocol/xdata-validate"
range["min"] = @range.min.to_s if @range.min
range["max"] = @range.max.to_s if @range.max
end
end
end