summaryrefslogtreecommitdiff
path: root/lib/spandx/terraform/parsers/lock_file.rb
blob: 8cc23bea90b6f5090a45f1e3aff80f08da7197e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# frozen_string_literal: true

module Spandx
  module Terraform
    module Parsers
      class LockFile < ::Spandx::Core::Parser
        def initialize
          @parser = Hcl2::Parser.new
          super()
        end

        def match?(pathname)
          basename = pathname.basename
          basename.fnmatch?('.terraform.lock.hcl')
        end

        def parse(path)
          tree = @parser.parse(path.read)
          tree[:blocks].map do |block|
            version_arg = version_arg_from(block)
            ::Spandx::Core::Dependency.new(
              name: block[:name].to_s,
              version: version_arg[:value]&.to_s,
              path: path
            )
          end
        end

        private

        def version_arg_from(block)
          block[:arguments].find do |x|
            x[:name] == 'version'
          end
        end
      end
    end
  end
end