mirror of
https://github.com/inspec/inspec
synced 2024-11-22 20:53:11 +00:00
Include ref when writing out inspec control objects (#2259)
* support ref for inspec control objects Signed-off-by: Dominik Richter <dominik.richter@gmail.com> * lint Signed-off-by: Dominik Richter <dominik.richter@gmail.com>
This commit is contained in:
parent
b2597cecfa
commit
39d743b12e
2 changed files with 13 additions and 2 deletions
|
@ -2,10 +2,11 @@
|
|||
|
||||
module Inspec
|
||||
class Control
|
||||
attr_accessor :id, :title, :desc, :impact, :tests, :tags
|
||||
attr_accessor :id, :title, :desc, :impact, :tests, :tags, :refs
|
||||
def initialize
|
||||
@tests = []
|
||||
@tags = []
|
||||
@refs = []
|
||||
end
|
||||
|
||||
def add_test(t)
|
||||
|
@ -20,12 +21,13 @@ module Inspec
|
|||
{ id: id, title: title, desc: desc, impact: impact, tests: tests.map(&:to_hash), tags: tags.map(&:to_hash) }
|
||||
end
|
||||
|
||||
def to_ruby
|
||||
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")
|
||||
|
@ -33,6 +35,12 @@ module Inspec
|
|||
|
||||
private
|
||||
|
||||
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
|
||||
|
||||
# Pretty-print a text block of InSpec code
|
||||
#
|
||||
# @param s [String] should not be empty
|
||||
|
|
|
@ -275,12 +275,15 @@ end
|
|||
control.id = 'sample.control.id'
|
||||
control.title = 'Sample Control Important Title'
|
||||
control.desc = 'The most critical control the world has ever seen'
|
||||
control.refs = ['simple ref', {ref: 'title', url: 'my url'}]
|
||||
control.impact = 1.0
|
||||
control.to_ruby.must_equal '
|
||||
control "sample.control.id" do
|
||||
title "Sample Control Important Title"
|
||||
desc "The most critical control the world has ever seen"
|
||||
impact 1.0
|
||||
ref "simple ref"
|
||||
ref ({:ref=>"title", :url=>"my url"})
|
||||
describe command("ls /etc") do
|
||||
its("exit_status") { should eq 0 }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue