class Inspec::Object::Test

Attributes

expectation[RW]
matcher[RW]
negated[RW]
only_if[RW]
qualifier[RW]
skip[RW]
variables[RW]

Public Class Methods

new() click to toggle source
# File lib/inspec/objects/test.rb, line 8
def initialize
  @qualifier = []
  @negated = false
  @variables = []
end

Public Instance Methods

negate!() click to toggle source
# File lib/inspec/objects/test.rb, line 14
def negate!
  @negated = !@negated
end
remove_expectation() click to toggle source
# File lib/inspec/objects/test.rb, line 37
def remove_expectation
  remove_instance_variable(:@expectation)
end
resource() click to toggle source
# File lib/inspec/objects/test.rb, line 28
def resource
  @resource ||=
    if qualifier.empty? || qualifier[0].empty? || qualifier[0][0].empty?
      nil
    else
      qualifier[0][0]
    end
end
to_hash() click to toggle source
# File lib/inspec/objects/test.rb, line 24
def to_hash
  { qualifier: qualifier, matcher: matcher, expectation: expectation, skip: skip, negated: negated }
end
to_ruby() click to toggle source
# File lib/inspec/objects/test.rb, line 18
def to_ruby
  return rb_skip unless skip.nil?

  rb_describe
end

Private Instance Methods

describe_chain() click to toggle source
# File lib/inspec/objects/test.rb, line 43
def describe_chain
  return if @qualifier.empty?

  resource = @qualifier.length > 1 ? @qualifier[0..-2] : [@qualifier[0]]
  res = resource.map { |q| ruby_qualifier(q) }.join(".")
  xres = nil

  if @qualifier.length > 1
    last = @qualifier[-1]
    last_call = last.is_a?(Array) ? last[0].to_s : ""
    if last.length == 1 && last_call !~ /^to_.$/ && !last_call.include?("[") && !last_call.empty?
      # this will go in its()
      xres = last_call
    else
      res += "." + ruby_qualifier(last) unless last_call.empty?
    end
  end

  [res, xres]
end
rb_describe() click to toggle source
# File lib/inspec/objects/test.rb, line 64
def rb_describe
  only_if_clause = "only_if { #{only_if} }\n" if only_if
  vars = variables.map(&:to_ruby).join("\n")
  vars += "\n" unless vars.empty?
  res, xtra = describe_chain
  itsy = xtra.nil? ? "it" : "its(" + xtra.to_s.inspect + ")"
  naughty = @negated ? "_not" : ""
  xpect = if !defined?(@expectation)
            ""
          elsif @expectation.class == Regexp
            # without this, xpect values like / \/zones\// will not be parsed properly
            "(#{@expectation.inspect})"
          elsif xpect != ""
            " " + expectation.inspect
          end
  format("%s%sdescribe %s do\n  %s { should%s %s%s }\nend",
         only_if_clause, vars, res, itsy, naughty, matcher, xpect)
end
rb_skip() click to toggle source
# File lib/inspec/objects/test.rb, line 83
def rb_skip
  dc = describe_chain
  obj = dc.nil? ? skip.inspect : dc[0]
  format("describe %s do\n  skip %s\nend", obj, skip.inspect)
end