Class: Inspec::Resources::JsonConfig

Inherits:
Object
  • Object
show all
Includes:
ObjectTraverser
Defined in:
lib/resources/json.rb

Direct Known Subclasses

CsvConfig, IniConfig, TomlConfig, YamlConfig

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ObjectTraverser

#extract_value

Constructor Details

#initialize(opts) ⇒ JsonConfig



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/resources/json.rb', line 31

def initialize(opts)
  @opts = opts
  if opts.is_a?(Hash)
    if opts.key?(:content)
      @file_content = opts[:content]
    elsif opts.key?(:command)
      @command = inspec.command(opts[:command])
      @file_content = @command.stdout
    end
  else
    @path = opts
    @file = inspec.file(@opts)
    @file_content = @file.content

    # check if file is available
    if !@file.file?
      skip_resource "Can't find file \"#{@path}\""
      return @params = {}
    end

    # check if file is readable
    if @file_content.nil? && !@file.empty?
      skip_resource "Can't read file \"#{@path}\""
      return @params = {}
    end
  end

  @params = parse(@file_content)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(*keys) ⇒ Object

Shorthand to retrieve a parameter name via ‘#its`. Example: describe json(’file’) { its(‘paramX’) { should eq ‘Y’ } }



75
76
77
78
79
80
# File 'lib/resources/json.rb', line 75

def method_missing(*keys)
  # catch bahavior of rspec its implementation
  # @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
  keys.shift if keys.is_a?(Array) && keys[0] == :[]
  value(keys)
end

Instance Attribute Details

#paramsObject (readonly)

make params readable



29
30
31
# File 'lib/resources/json.rb', line 29

def params
  @params
end

Instance Method Details

#parse(content) ⇒ Object



61
62
63
64
# File 'lib/resources/json.rb', line 61

def parse(content)
  require 'json'
  JSON.parse(content)
end

#to_sObject



82
83
84
85
86
87
88
# File 'lib/resources/json.rb', line 82

def to_s
  if @opts.is_a?(Hash) && @opts.key?(:content)
    'Json content'
  else
    "Json #{@path}"
  end
end

#value(key) ⇒ Object



66
67
68
# File 'lib/resources/json.rb', line 66

def value(key)
  extract_value(key, @params)
end