class Inspec::Object::Control
Attributes
descriptions[RW]
id[RW]
impact[RW]
only_if[RW]
refs[RW]
tests[RW]
title[RW]
Public Class Methods
new()
click to toggle source
# File lib/inspec/objects/control.rb, line 4 def initialize @tests = [] @tags = [] @refs = [] @descriptions = {} end
Public Instance Methods
add_tag(t)
click to toggle source
# File lib/inspec/objects/control.rb, line 15 def add_tag(t) @tags.push(t) end
add_test(t)
click to toggle source
# File lib/inspec/objects/control.rb, line 11 def add_test(t) @tests.push(t) end
to_hash()
click to toggle source
# File lib/inspec/objects/control.rb, line 19 def to_hash { id: id, title: title, descriptions: descriptions, impact: impact, tests: tests.map(&:to_hash), tags: tags.map(&:to_hash), } end
to_ruby()
click to toggle source
# File lib/inspec/objects/control.rb, line 30 def to_ruby # rubocop:disable Metrics/AbcSize res = ["control #{id.inspect} do"] res.push " title #{title.inspect}" unless title.to_s.empty? descriptions.each do |label, text| if label == :default next if text.nil? || (text == "") # don't render empty/nil desc res.push " desc #{prettyprint_text(text, 2)}" else res.push " desc #{label.to_s.inspect}, #{prettyprint_text(text, 2)}" end end 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)}") } res.push " only_if { #{only_if} }" if only_if tests.each { |t| res.push(indent(t.to_ruby, 2)) } res.push "end" res.join("\n") end
Private Instance Methods
indent(txt, d)
click to toggle source
# File lib/inspec/objects/control.rb, line 73 def indent(txt, d) dt = " " * d dt + txt.gsub("\n", "\n" + dt) end
prettyprint_text(s, depth)
click to toggle source
Pretty-print a text block of InSpec code
@param s [String] should not be empty @param depth [Int] indentation length for multiline text blocks @return [String] pretty-printed textblock
# File lib/inspec/objects/control.rb, line 65 def prettyprint_text(s, depth) txt = s.to_s.inspect.gsub('\n', "\n") return txt unless txt.include?("\n") middle = indent(txt[1..-2], depth + 2) txt[0] + "\n" + middle + "\n" + " " * depth + txt[-1] end
print_ref(x)
click to toggle source
# File lib/inspec/objects/control.rb, line 53 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