form_table.rb

 1# frozen_string_literal: true
 2
 3class FormTable
 4	def initialize(rows, **cols)
 5		@cols = cols
 6		@rows = rows
 7	end
 8
 9	def add_to_form(form)
10		Nokogiri::XML::Builder.with(form) do |xml|
11			xml.reported do
12				@cols.each do |var, label|
13					xml.field(var: var.to_s, label: label.to_s)
14				end
15			end
16
17			add_rows_to_xml(xml)
18		end
19	end
20
21protected
22
23	def add_rows_to_xml(xml)
24		@rows.each do |row|
25			xml.item do
26				row.each.with_index do |val, idx|
27					xml.field(var: @cols.keys[idx].to_s) do
28						[val].compact.flatten.each { |x| xml.value x.to_s }
29					end
30				end
31			end
32		end
33	end
34end