class Inspec::Control
def add_tag(t)
def add_tag(t) @tags.push(t) end
def add_test(t)
def add_test(t) @tests.push(t) end
def indent(txt, d)
def indent(txt, d) dt = ' '*d dt + txt.gsub("\n", "\n"+dt) end
def initialize
def initialize @tests = [] @tags = [] @refs = [] end
def prettyprint_text(s, depth)
-
(String)- pretty-printed textblock
Parameters:
-
depth(Int) -- indentation length for multiline text blocks -
s(String) -- should not be empty
def prettyprint_text(s, depth) txt = s.to_s.inspect.gsub('\n', "\n") return txt if !txt.include?("\n") middle = indent(txt[1..-2], depth+2) txt[0] + "\n" + middle + "\n" + ' '*depth + txt[-1] end
def print_ref(x)
def print_ref(x) return x.inspect if x.is_a?(String) raise "Cannot process the ref: #{x}" unless x.is_a?(Hash) '('+x.inspect+')' end
def to_hash
def to_hash { id: id, title: title, desc: desc, impact: impact, tests: tests.map(&:to_hash), tags: tags.map(&:to_hash) } end
def to_ruby # rubocop:disable Metrics/AbcSize
def to_ruby # rubocop:disable Metrics/AbcSize res = ["control #{id.inspect} do"] res.push " title #{title.inspect}" unless title.to_s.empty? res.push " desc #{prettyprint_text(desc, 2)}" unless desc.to_s.empty? res.push " impact #{impact}" unless impact.nil? tags.each { |t| res.push(indent(t.to_ruby, 2)) } refs.each { |t| res.push(" ref #{print_ref(t)}") } tests.each { |t| res.push(indent(t.to_ruby, 2)) } res.push 'end' res.join("\n") end