# 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