add tag object (#1590)

* add tag object

Signed-off-by: Christoph Hartmann <chris@lollyrock.com>

* add tests for to_hash function in tag

Signed-off-by: Christoph Hartmann <chris@lollyrock.com>
This commit is contained in:
Christoph Hartmann 2017-03-22 18:41:44 +01:00 committed by Adam Leff
parent 8a63e9d12c
commit 7c11ff9280
4 changed files with 93 additions and 2 deletions

View file

@ -2,6 +2,7 @@
module Inspec
autoload :Attribute, 'inspec/objects/attribute'
autoload :Tag, 'inspec/objects/tag'
autoload :Control, 'inspec/objects/control'
autoload :EachLoop, 'inspec/objects/each_loop'
autoload :List, 'inspec/objects/list'

View file

@ -2,17 +2,22 @@
module Inspec
class Control
attr_accessor :id, :title, :desc, :impact, :tests
attr_accessor :id, :title, :desc, :impact, :tests, :tags
def initialize
@tests = []
@tags = []
end
def add_test(t)
@tests.push(t)
end
def add_tag(t)
@tags.push(t)
end
def to_hash
{ id: id, title: title, desc: desc, impact: impact, tests: tests.map(&:to_hash) }
{ id: id, title: title, desc: desc, impact: impact, tests: tests.map(&:to_hash), tags: tags.map(&:to_hash) }
end
def to_ruby
@ -20,6 +25,7 @@ module Inspec
res.push " title #{title.inspect}" unless title.to_s.empty?
res.push " desc #{desc.inspect}" unless desc.to_s.empty?
res.push " impact #{impact}" unless impact.nil?
tags.each { |t| res.push(indent(t.to_ruby, 2)) }
tests.each { |t| res.push(indent(t.to_ruby, 2)) }
res.push 'end'
res.join("\n")

27
lib/inspec/objects/tag.rb Normal file
View file

@ -0,0 +1,27 @@
# encoding:utf-8
module Inspec
class Tag
attr_accessor :key, :value
def initialize(key, value)
@key = key
@value = value
end
def to_hash
{
name: key,
value: value,
}
end
def to_ruby
"tag #{key.inspect}: #{value.inspect}"
end
def to_s
"Tag #{key} with #{value}"
end
end
end

View file

@ -330,5 +330,62 @@ end
end
end
describe 'Inspec::Tag' do
it 'constructs a tag with key and value' do
control = Inspec::Control.new
res1 = { name: "key", value: "value" }
tag1 = Inspec::Tag.new(res1[:name], res1[:value])
tag1.to_hash.must_equal res1
control.add_tag(tag1)
res2 = { name: "key2'", value: "value'" }
tag2 = Inspec::Tag.new(res2[:name], res2[:value])
tag2.to_hash.must_equal res2
control.add_tag(tag2)
res3 = { name: "key3\"", value: "value\"" }
tag3 = Inspec::Tag.new(res3[:name], res3[:value])
tag3.to_hash.must_equal res3
control.add_tag(tag3)
res4 = { name: 'key4', value: ['a', 'b'] }
tag4 = Inspec::Tag.new(res4[:name], res4[:value])
tag4.to_hash.must_equal res4
control.add_tag(tag4)
control.id = 'tag.control.id'
control.to_ruby.must_equal '
control "tag.control.id" do
tag "key": "value"
tag "key2\'": "value\'"
tag "key3\"": "value\""
tag "key4": ["a", "b"]
end
'.strip
control_hash = {
id:"tag.control.id",
title: nil,
desc: nil,
impact: nil,
tests: [],
tags:[{
name:"key",
value:"value"
}, {
name:"key2'",
value:"value'"
}, {
name:"key3\"",
value:"value\""
}, {
name:"key4",
value:["a", "b"]
}]
}
control.to_hash.must_equal control_hash
end
end
end