\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/inspec-core-4.22.1/lib/inspec/objects/

Viewing File: describe.rb

# This class is deprecated and will be removed in the next major release of InSpec.
# Use the Inspec::Object classes from the inspec-objects rubygem instead.

require "inspec/utils/deprecation"

module Inspec
  class Describe
    # Internal helper to structure test objects.
    # Should not be exposed to the user as it is hidden behind
    # `add_test`, `to_hash`, and `to_ruby` in Inspec::Describe
    Test = Struct.new(:its, :matcher, :expectation, :negated) do
      def negate!
        self.negated = !negated
      end

      def to_ruby
        itsy = "it"
        unless its.nil?
          if its.is_a? Array
            itsy = "its(" + its.inspect + ")"
          else
            itsy = "its(" + its.to_s.inspect + ")"
          end
        end
        naughty = negated ? "_not" : ""
        xpect = if expectation.nil?
                  ""
                elsif expectation.class == Regexp
                  # without this, xpect values like / \/zones\// will not be parsed properly
                  "(#{expectation.inspect})"
                else
                  " " + expectation.inspect
                end
        format("%s { should%s %s%s }", itsy, naughty, matcher, xpect)
      end
    end

    # A qualifier describing the resource that will be tested. It may consist
    # of the resource identification and multiple accessors to pinpoint the data
    # the user wants to test.
    attr_accessor :qualifier

    # An array of individual tests for the qualifier. Every entry will be
    # translated into an `it` or `its` clause.
    attr_accessor :tests

    # Optional variables which are used by tests.
    attr_accessor :variables

    # Optional method to skip this describe block altogether. If `skip` is
    # defined it takes precendence and will print the skip statement instead
    # of adding other tests.
    attr_accessor :skip

    include RubyHelper

    def initialize
      @qualifier = []
      @tests = []
      @variables = []

      Inspec.deprecate(:object_classes, "The Inspec::Describe class is deprecated. Use the Inspec::Object::Describe class from the inspec-objects Ruby library.")
    end

    def add_test(its, matcher, expectation, opts = {})
      test = Inspec::Describe::Test.new(its, matcher, expectation, opts[:negated])
      tests.push(test)
      test
    end

    def to_ruby
      return rb_skip unless skip.nil?

      rb_describe
    end

    def to_hash
      { qualifier: qualifier, tests: tests.map(&:to_h), variables: variables, skip: skip }
    end

    def resource
      return nil if qualifier.empty? || qualifier[0].empty? || qualifier[0][0].empty?

      qualifier[0][0]
    end

    private

    def rb_describe
      vars = variables.map(&:to_ruby).join("\n")
      vars += "\n" unless vars.empty?

      objarr = @qualifier
      objarr = [["unknown object".inspect]] if objarr.nil? || objarr.empty?
      obj = objarr.map { |q| ruby_qualifier(q) }.join(".")

      rbtests = tests.map(&:to_ruby).join("\n  ")
      format("%sdescribe %s do\n  %s\nend", vars, obj, rbtests)
    end

    def rb_skip
      obj = @qualifier || skip.inspect
      format("describe %s do\n  skip %s\nend", obj, skip.inspect)
    end
  end
end