class Inspec::Object::Control
Attributes
descriptions[RW]
header[RW]
id[RW]
impact[RW]
only_if[RW]
post_body[RW]
refs[RW]
tests[RW]
title[RW]
Public Class Methods
new()
click to toggle source
# File lib/inspec/objects/control.rb, line 6 def initialize @header = "" @tests = [] @tags = [] @refs = [] @descriptions = {} @post_body = "" end
Public Instance Methods
add_header(header)
click to toggle source
# File lib/inspec/objects/control.rb, line 15 def add_header(header) @header = header end
add_post_body(post_body)
click to toggle source
# File lib/inspec/objects/control.rb, line 27 def add_post_body(post_body) @post_body = post_body end
add_tag(t)
click to toggle source
# File lib/inspec/objects/control.rb, line 23 def add_tag(t) @tags.push(t) end
add_test(t)
click to toggle source
# File lib/inspec/objects/control.rb, line 19 def add_test(t) @tests.push(t) end
to_hash()
click to toggle source
# File lib/inspec/objects/control.rb, line 31 def to_hash { header: header, id: id, title: title, descriptions: descriptions, impact: impact, tests: tests.map(&:to_hash), tags: tags.map(&:to_hash), post_body: post_body, } end
to_ruby()
click to toggle source
# File lib/inspec/objects/control.rb, line 44 def to_ruby res = [] res.push header unless header.nil? || header.empty? res.push "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(indent(post_body, 2)) unless post_body.nil? || post_body.empty? res.push "end" res.join("\n") end
Private Instance Methods
indent(txt, d)
click to toggle source
# File lib/inspec/objects/control.rb, line 90 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 82 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 70 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