Commit 149b738
Changed files (2)
lib
spandx
terraform
parsers
spec
unit
terraform
parsers
lib/spandx/terraform/parsers/hcl.rb
@@ -36,7 +36,7 @@ module Spandx
end
rule :value do
- match('[0-9A-Za-z.~> ]')
+ match('[0-9A-Za-z.~> ]').repeat
end
rule(:version_constraint) do
@@ -68,37 +68,26 @@ module Spandx
end
rule :argument do
- (
- str('version') |
- str('constraints')
- ).as(:argument) >> whitespace >> assign >> whitespace >> quote >> (
- version |
- version_constraint
- ).as(:value) >> quote
+ alpha.repeat.as(:name) >> whitespace >> assign >> whitespace >> quote >> value.as(:value) >> quote
end
rule :arguments do
- #((version_assignment | constraint_assignment) >> eol).repeat
(argument >> eol).repeat
end
rule :block do
- whitespace >> lcurly >> eol >> arguments >> rcurly >> eol
+ (alpha.repeat).as(:type) >> identifier >> whitespace >> lcurly >> eol >> arguments.as(:arguments) >> rcurly >> eol
end
rule :identifier do
whitespace >> quote >> ((alpha | match('[./]')).repeat).as(:name) >> quote >> whitespace
end
- rule :provider do
- (str('provider') >> identifier >> block).as(:provider)
+ rule :blocks do
+ block.repeat.as(:blocks)
end
- rule :providers do
- provider.repeat
- end
-
- root(:providers)
+ root(:blocks)
end
end
end
spec/unit/terraform/parsers/hcl_spec.rb
@@ -16,12 +16,14 @@ RSpec.describe Spandx::Terraform::Parsers::Hcl do
HCL
end
- specify { expect(subject[0].dig(:provider, :name).to_s).to eql('registry.terraform.io/hashicorp/aws') }
- specify { expect(subject[1].dig(:provider, :version).to_s).to eql('3.39.0') }
- specify { expect(subject[2].dig(:provider, :constraints).to_s).to eql('~> 3.27') }
specify { expect(subject).to be_truthy }
+ specify { expect(subject[:blocks][0][:name].to_s).to eql('registry.terraform.io/hashicorp/aws') }
+ specify { expect(subject[:blocks][0][:type].to_s).to eql('provider') }
specify do
- puts subject
+ expect(subject[:blocks][0][:arguments]).to match_array([
+ { name: 'version', value: '3.39.0' },
+ { name: 'constraints', value: '~> 3.27' },
+ ])
end
end
end