hcl_parser 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/CHANGELOG.md +10 -0
- data/lib/hcl_parser/loader.rb +67 -0
- data/lib/hcl_parser/version.rb +1 -1
- metadata +4 -4
- data/Gemfile.lock +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b2eea4da4681293e2c23c06758471554c56a34811c6ff6c0fff5381cbbdc88
|
4
|
+
data.tar.gz: 386ac2862e576b66272a277c44210cceea4b2aac7a25848517e0332f464fd261
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff94566dcf96f1228370731ff355934bd38dd2f67a7cb6558ec2829d0fd23060cb25bb639ec8559cb7d2cada4658bd84476654cc848c76b50ac4a4767467c553
|
7
|
+
data.tar.gz: ece0bd0213983d7619857db074105b950f681f82a395d3ef2acc792f043802987344f9ec684ebfa1a0687b5170cb05cb0ee1bfc7f5be1d975e7ed74becdfc3ec
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
|
+
|
6
|
+
## [0.2.0] - 2021-11-25
|
7
|
+
- [#1](https://github.com/boltops-tools/hcl_parser/pull/1) Complex types
|
8
|
+
|
9
|
+
## [0.1.0]
|
10
|
+
* Initial release
|
data/lib/hcl_parser/loader.rb
CHANGED
@@ -17,6 +17,73 @@ module HclParser
|
|
17
17
|
def code
|
18
18
|
return @code if @code
|
19
19
|
@code = fix_quotes(@raw)
|
20
|
+
@code = rewrite_complex_types(@code)
|
21
|
+
end
|
22
|
+
|
23
|
+
def rewrite_complex_types(raw)
|
24
|
+
lines = raw.split("\n")
|
25
|
+
results = []
|
26
|
+
|
27
|
+
variable_start_found = false
|
28
|
+
variable_start_index = nil
|
29
|
+
variable_end_index = nil
|
30
|
+
rewrite_lines = false
|
31
|
+
|
32
|
+
lines.each_with_index do |l,i|
|
33
|
+
# We dont rewrite lines until the next line/iteration
|
34
|
+
# This is actually the next iteration since we set rewrite_lines = true previously
|
35
|
+
# in rewrite_lines = has_complex_type?(lookahead_lines)
|
36
|
+
if rewrite_lines
|
37
|
+
if simple_default_assignment?(l)
|
38
|
+
results << l
|
39
|
+
elsif simple_default_assignment?(l)
|
40
|
+
# Doesnt matter what the default value is as long as there is one
|
41
|
+
# Doing this in case the default value spans multiple lines
|
42
|
+
results << ' default = "any"'
|
43
|
+
else
|
44
|
+
results << "# #{l}"
|
45
|
+
end
|
46
|
+
else
|
47
|
+
results << l
|
48
|
+
end
|
49
|
+
# End of logic in the next iteration
|
50
|
+
|
51
|
+
# Start of logic in the current iteration
|
52
|
+
variable_start_found = l.match(/^variable /)
|
53
|
+
if variable_start_found
|
54
|
+
variable_start_index = i
|
55
|
+
variable_end_index = variable_end_index(lines, variable_start_index)
|
56
|
+
lookahead_lines = lines[variable_start_index..variable_end_index]
|
57
|
+
rewrite_lines = has_complex_type?(lookahead_lines)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Disable rewriting before reaching the end of the variable definition so: i + 1
|
61
|
+
if variable_end_index == i + 1
|
62
|
+
variable_start_index = nil
|
63
|
+
variable_end_index = nil
|
64
|
+
rewrite_lines = false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
results.join("\n")
|
69
|
+
end
|
70
|
+
|
71
|
+
def simple_default_assignment?(line)
|
72
|
+
line.match(/default\s*=\s*("|'|null)/)
|
73
|
+
end
|
74
|
+
|
75
|
+
def has_complex_type?(lines)
|
76
|
+
!!lines.find do |l|
|
77
|
+
l.match(/object\(/)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def variable_end_index(lines, variable_start_index)
|
82
|
+
end_variable_index = nil
|
83
|
+
lines.each_with_index do |l,i|
|
84
|
+
next unless i > variable_start_index
|
85
|
+
return i if l.match(/^}/)
|
86
|
+
end
|
20
87
|
end
|
21
88
|
|
22
89
|
def empty?
|
data/lib/hcl_parser/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hcl_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rhcl
|
@@ -47,8 +47,8 @@ extra_rdoc_files: []
|
|
47
47
|
files:
|
48
48
|
- ".gitignore"
|
49
49
|
- ".rspec"
|
50
|
+
- CHANGELOG.md
|
50
51
|
- Gemfile
|
51
|
-
- Gemfile.lock
|
52
52
|
- LICENSE.txt
|
53
53
|
- README.md
|
54
54
|
- Rakefile
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
80
|
requirements: []
|
81
|
-
rubygems_version: 3.1.
|
81
|
+
rubygems_version: 3.1.6
|
82
82
|
signing_key:
|
83
83
|
specification_version: 4
|
84
84
|
summary: HCL Variables Parser
|
data/Gemfile.lock
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
hcl_parser (0.1.0)
|
5
|
-
rhcl
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
deep_merge (1.2.1)
|
11
|
-
diff-lcs (1.3)
|
12
|
-
rake (12.3.3)
|
13
|
-
rhcl (0.1.0)
|
14
|
-
deep_merge
|
15
|
-
rspec (3.9.0)
|
16
|
-
rspec-core (~> 3.9.0)
|
17
|
-
rspec-expectations (~> 3.9.0)
|
18
|
-
rspec-mocks (~> 3.9.0)
|
19
|
-
rspec-core (3.9.2)
|
20
|
-
rspec-support (~> 3.9.3)
|
21
|
-
rspec-expectations (3.9.2)
|
22
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
-
rspec-support (~> 3.9.0)
|
24
|
-
rspec-mocks (3.9.1)
|
25
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
-
rspec-support (~> 3.9.0)
|
27
|
-
rspec-support (3.9.3)
|
28
|
-
|
29
|
-
PLATFORMS
|
30
|
-
ruby
|
31
|
-
|
32
|
-
DEPENDENCIES
|
33
|
-
hcl_parser!
|
34
|
-
rake (~> 12.0)
|
35
|
-
rspec (~> 3.0)
|
36
|
-
|
37
|
-
BUNDLED WITH
|
38
|
-
2.1.4
|