junoser 0.4.3 → 0.4.6
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/.github/workflows/test-linux.yaml +1 -1
- data/CHANGELOG.md +22 -0
- data/Gemfile.lock +9 -9
- data/LICENSE.txt +1 -1
- data/README.md +1 -1
- data/lib/junoser/display/set.rb +4 -0
- data/lib/junoser/js_ruler.rb +2 -0
- data/lib/junoser/parser.rb +9 -7
- data/lib/junoser/ruler.rb +34 -23
- data/lib/junoser/version.rb +1 -1
- data/sig/junoser/ruler.rbs +21 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e5143d4a1cd52517e76888edab70ba8938e66b98e8869bcf9de3e5963860cee
|
4
|
+
data.tar.gz: be817dc008cd1f482c01e1d577314d72d90f436f582388db43df967dcd9599dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e579496b46fb6297e69909d20dc77f3851a75b10eec1c545530bab725b1953491bfab82d950183e3c99adcb0cd7655e23fcea8d74c5607acd3188ad37fda1edf
|
7
|
+
data.tar.gz: 2ce8eeff3c0af7927c4318e6ace521be67d5ccc3a479e72a2e1a460731785b7622eead33d53bdecf0ab3dabcee507252660675b3421d5231b0f66e2343177eed
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
## [0.4.6] - 2022-07-02
|
2
|
+
|
3
|
+
### Fixed
|
4
|
+
|
5
|
+
* Accept quoted strings under "system license keys key"
|
6
|
+
* "protocols bgp ... prefix-limit teardown"
|
7
|
+
|
8
|
+
|
9
|
+
## [0.4.5] - 2022-04-27
|
10
|
+
|
11
|
+
### Fixed
|
12
|
+
|
13
|
+
* Ignore "replace:" tag in structured form
|
14
|
+
|
15
|
+
|
16
|
+
## [0.4.4] - 2022-02-26
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
|
20
|
+
* "snmp name" instead of "snmp system-name"
|
21
|
+
|
22
|
+
|
1
23
|
## [0.4.3] - 2021-09-28
|
2
24
|
|
3
25
|
### Fixed
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
junoser (0.4.
|
4
|
+
junoser (0.4.6)
|
5
5
|
parslet
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
mini_portile2 (2.
|
11
|
-
nokogiri (1.
|
12
|
-
mini_portile2 (~> 2.
|
10
|
+
mini_portile2 (2.8.0)
|
11
|
+
nokogiri (1.13.6)
|
12
|
+
mini_portile2 (~> 2.8.0)
|
13
13
|
racc (~> 1.4)
|
14
14
|
parslet (2.0.0)
|
15
|
-
power_assert (2.0.
|
16
|
-
racc (1.
|
17
|
-
rake (13.0.
|
18
|
-
test-unit (3.
|
15
|
+
power_assert (2.0.1)
|
16
|
+
racc (1.6.0)
|
17
|
+
rake (13.0.6)
|
18
|
+
test-unit (3.5.3)
|
19
19
|
power_assert
|
20
20
|
|
21
21
|
PLATFORMS
|
@@ -29,4 +29,4 @@ DEPENDENCIES
|
|
29
29
|
test-unit
|
30
30
|
|
31
31
|
BUNDLED WITH
|
32
|
-
2.
|
32
|
+
2.3.13
|
data/LICENSE.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2015-
|
3
|
+
Copyright (c) 2015-2022 Shintaro Kojima
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
data/lib/junoser/display/set.rb
CHANGED
@@ -59,12 +59,16 @@ module Junoser
|
|
59
59
|
current_statement = ''
|
60
60
|
|
61
61
|
current_stack.each do |stack|
|
62
|
+
stack.gsub! 'replace: ', ''
|
63
|
+
|
62
64
|
if stack.gsub!('inactive: ', '')
|
63
65
|
statements << "deactivate #{current_statement}#{stack}"
|
64
66
|
end
|
65
67
|
current_statement << "#{stack} "
|
66
68
|
end
|
67
69
|
|
70
|
+
str.gsub! 'replace: ', ''
|
71
|
+
|
68
72
|
if str.gsub!('inactive: ', '')
|
69
73
|
statements << "deactivate #{current_statement}#{str}"
|
70
74
|
end
|
data/lib/junoser/js_ruler.rb
CHANGED
@@ -168,6 +168,8 @@ module Junoser
|
|
168
168
|
str.gsub! 'policy | Define a policy context from this zone', 'from-zone | Define a policy context from this zone'
|
169
169
|
# "to-zone-name | Destination zone" -> "to-zone | Destination zone"
|
170
170
|
str.gsub! 'to-zone-name | Destination zone', 'to-zone | Destination zone'
|
171
|
+
# "system-name | System name override" -> "name | System name override"
|
172
|
+
str.gsub! 'system-name | System name override', 'name | System name override'
|
171
173
|
|
172
174
|
fix_route_filter(str)
|
173
175
|
|
data/lib/junoser/parser.rb
CHANGED
@@ -8746,7 +8746,7 @@ module Junoser
|
|
8746
8746
|
).as(:oneline),
|
8747
8747
|
b(str("snmp"),
|
8748
8748
|
c(
|
8749
|
-
a(str("
|
8749
|
+
a(str("name"), quote | arg),
|
8750
8750
|
a(str("description"), quote | arg),
|
8751
8751
|
a(str("location"), quote | arg),
|
8752
8752
|
a(str("contact"), quote | arg),
|
@@ -14289,7 +14289,7 @@ module Junoser
|
|
14289
14289
|
b(str("suppress-tlv-advertisement"),
|
14290
14290
|
(str("MANAGEMENT_ADDRESS") | str("SYSTEM_CAPABILITIES") | str("SYSTEM_DESCRIPTION") | str("SYSTEM_NAME") | str("PORT_DESCRIPTION") | str("PORT_ID") | str("CHASSIS_ID"))
|
14291
14291
|
),
|
14292
|
-
a(str("
|
14292
|
+
a(str("name"), quote | arg),
|
14293
14293
|
a(str("system-description"), arg),
|
14294
14294
|
a(str("chassis-id"), arg),
|
14295
14295
|
b(str("chassis-id-type"),
|
@@ -63641,7 +63641,7 @@ module Junoser
|
|
63641
63641
|
rule(:bgpaf_accepted_prefix_limit) do
|
63642
63642
|
c(
|
63643
63643
|
a(str("maximum"), arg),
|
63644
|
-
b(str("teardown"),
|
63644
|
+
b(a(str("teardown"), arg),
|
63645
63645
|
ca(
|
63646
63646
|
b(str("idle-timeout"),
|
63647
63647
|
sc(
|
@@ -63652,7 +63652,8 @@ module Junoser
|
|
63652
63652
|
)
|
63653
63653
|
).as(:oneline)
|
63654
63654
|
)
|
63655
|
-
)
|
63655
|
+
),
|
63656
|
+
str("teardown")
|
63656
63657
|
)
|
63657
63658
|
end
|
63658
63659
|
|
@@ -63671,7 +63672,7 @@ module Junoser
|
|
63671
63672
|
rule(:bgpaf_prefix_limit) do
|
63672
63673
|
c(
|
63673
63674
|
a(str("maximum"), arg),
|
63674
|
-
b(str("teardown"),
|
63675
|
+
b(a(str("teardown"), arg),
|
63675
63676
|
ca(
|
63676
63677
|
b(str("idle-timeout"),
|
63677
63678
|
sc(
|
@@ -63682,7 +63683,8 @@ module Junoser
|
|
63682
63683
|
)
|
63683
63684
|
).as(:oneline)
|
63684
63685
|
)
|
63685
|
-
)
|
63686
|
+
),
|
63687
|
+
str("teardown")
|
63686
63688
|
)
|
63687
63689
|
end
|
63688
63690
|
|
@@ -97992,7 +97994,7 @@ module Junoser
|
|
97992
97994
|
),
|
97993
97995
|
b(str("keys"),
|
97994
97996
|
c(
|
97995
|
-
a(str("key"), arg)
|
97997
|
+
a(str("key"), quote | arg)
|
97996
97998
|
)
|
97997
97999
|
),
|
97998
98000
|
c(
|
data/lib/junoser/ruler.rb
CHANGED
@@ -14,7 +14,7 @@ module Junoser
|
|
14
14
|
str = @rule.read
|
15
15
|
str = remove_comments(str)
|
16
16
|
str = process_reserved_element(str)
|
17
|
-
str
|
17
|
+
str.split(/\n/).map { |l| format(process_line(l)) }.join("\n")
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
@@ -26,16 +26,16 @@ module Junoser
|
|
26
26
|
def process_line(str)
|
27
27
|
return str if str =~ /^(.* do|end)$/
|
28
28
|
|
29
|
-
str.gsub!(/("[^"]+")/) { "str(
|
29
|
+
str.gsub!(/("[^"]+")/) { "str(#{$1})" } # "foo" -> str("foo")
|
30
30
|
|
31
|
-
str.gsub!(/^(\s*)arg(\.as\(:\S+\))? \($/) { "#{$1}b(arg
|
32
|
-
str.gsub!(/^(\s*)(str\(\S+\)) ([^ \t\n\r\f
|
33
|
-
str.gsub!(/^(\s*)(str\(\S+\)) (enum)?\((.*)\)(,?)$/) { "#{$1}a(
|
31
|
+
str.gsub!(/^(\s*)arg(\.as\(:\S+\))? \($/) { "#{$1}b(arg#{$2}," } # arg ( -> b(arg,
|
32
|
+
str.gsub!(/^(\s*)(str\(\S+\)) ([^ \t\n\r\f(|,]+)(\.as\(:\S+\))?(,?)$/) { "#{$1}a(#{$2}, #{$3})#{$4}#{$5}" } # str("foo") bar -> a(str("foo"), bar)
|
33
|
+
str.gsub!(/^(\s*)(str\(\S+\)) (enum)?\((.*)\)(,?)$/) { "#{$1}a(#{$2}, #{$3}#{$4})#{$5}" } # str("foo") (a | b) -> a(str("foo"), a | b)
|
34
34
|
|
35
|
-
str.gsub!(/^(\s*)(str\(\S+\)) \($/) { "#{$1}b(
|
36
|
-
str.gsub!(/^(\s*)(enum)?(\(.*\))(\.as\(:\S\))? \($/) { "#{$1}b(
|
37
|
-
str.gsub!(/^(\s*)(str\(\S+\)) ([^ \t\n\r\f
|
38
|
-
str.gsub!(/^(\s*)(str\(\S+\)) (enum)?\((.*)\) \($/) { "#{$1}a(
|
35
|
+
str.gsub!(/^(\s*)(str\(\S+\)) \($/) { "#{$1}b(#{$2}," } # str("foo") ( -> b(str("foo"),
|
36
|
+
str.gsub!(/^(\s*)(enum)?(\(.*\))(\.as\(:\S\))? \($/) { "#{$1}b(#{$2}#{$3}#{$4}," } # (a | b) ( -> b((a | b),
|
37
|
+
str.gsub!(/^(\s*)(str\(\S+\)) ([^ \t\n\r\f(|,]+) \($/) { "#{$1}b(a(#{$2}, #{$3})," } # str("foo") bar ( -> b(a(str("foo"), bar),
|
38
|
+
str.gsub!(/^(\s*)(str\(\S+\)) (enum)?\((.*)\) \($/) { "#{$1}a(#{$2}, #{$3}#{$4}," } # str("foo") (a | b) ( -> a(str("foo"), a | b,
|
39
39
|
|
40
40
|
str
|
41
41
|
end
|
@@ -52,7 +52,7 @@ module Junoser
|
|
52
52
|
#
|
53
53
|
# Statements can be quoted
|
54
54
|
#
|
55
|
-
str.gsub!(/("ssh-\S+") arg/) { "
|
55
|
+
str.gsub!(/("ssh-\S+") arg/) { "#{$1} (quote | arg)" }
|
56
56
|
str.gsub! '"message" arg', '"message" (quote | arg)'
|
57
57
|
str.gsub! '"description" arg', '"description" (quote | arg)'
|
58
58
|
str.gsub! '"as-path-prepend" arg', '"as-path-prepend" (quote | arg)'
|
@@ -63,7 +63,7 @@ module Junoser
|
|
63
63
|
' quote | arg'], $1)
|
64
64
|
end
|
65
65
|
|
66
|
-
str.gsub!(/^rule\(:regular_expression\) do\s
|
66
|
+
str.gsub!(/^rule\(:regular_expression\) do\s.*?\s*end/) do
|
67
67
|
<<~EOS
|
68
68
|
rule(:regular_expression) do
|
69
69
|
(quote | arg).as(:arg)
|
@@ -99,7 +99,7 @@ module Junoser
|
|
99
99
|
#
|
100
100
|
# "arg" matches anything so move to the end
|
101
101
|
#
|
102
|
-
str.gsub!(/arg \| (".*")/) { "
|
102
|
+
str.gsub!(/arg \| (".*")/) { "#{$1} | arg" }
|
103
103
|
str.gsub!(/^(\s*)c\(\s*arg,$/) { "#{$1}ca(" }
|
104
104
|
str.gsub!(/(rule\(:control_route_filter_type\) do\s*)s\(\s*arg,/) { "#{$1}b(" }
|
105
105
|
str.gsub!(/(rule\(:control_source_address_filter_type\) do\s*)s\(\s*arg,/) { "#{$1}b(" }
|
@@ -130,18 +130,18 @@ module Junoser
|
|
130
130
|
#
|
131
131
|
# "inet",
|
132
132
|
# "inet6"
|
133
|
-
str.gsub!(/"cspf"(.*\s*.*)"cspf-link"/) { %["cspf-link"
|
134
|
-
str.gsub!(/"http"(.*\s*.*)"https"/) { %["https"
|
135
|
-
str.gsub!(/"inet"(.*\s*.*)"inet6"/) { %["inet6"
|
136
|
-
str.gsub!(/"icmp"(.*\s*.*)"icmp6"/) { %["icmp6"
|
137
|
-
str.gsub!(/"icmp"(.*\s*.*)"icmpv6"/) { %["icmpv6"
|
138
|
-
str.gsub!(/"snmp"(.*\s*.*)"snmptrap"/) { %["snmptrap"
|
139
|
-
str.gsub!(/"ospf"(.*\s*.*)"ospf3"/) { %["ospf3"
|
133
|
+
str.gsub!(/"cspf"(.*\s*.*)"cspf-link"/) { %["cspf-link"#{$1}"cspf"] }
|
134
|
+
str.gsub!(/"http"(.*\s*.*)"https"/) { %["https"#{$1}"http"] }
|
135
|
+
str.gsub!(/"inet"(.*\s*.*)"inet6"/) { %["inet6"#{$1}"inet"] }
|
136
|
+
str.gsub!(/"icmp"(.*\s*.*)"icmp6"/) { %["icmp6"#{$1}"icmp"] }
|
137
|
+
str.gsub!(/"icmp"(.*\s*.*)"icmpv6"/) { %["icmpv6"#{$1}"icmp"] }
|
138
|
+
str.gsub!(/"snmp"(.*\s*.*)"snmptrap"/) { %["snmptrap"#{$1}"snmp"] }
|
139
|
+
str.gsub!(/"ospf"(.*\s*.*)"ospf3"/) { %["ospf3"#{$1}"ospf"] }
|
140
140
|
str.gsub! '"tls1" | "tls11" | "tls12"', '"tls11" | "tls12" | "tls1"'
|
141
|
-
str.gsub!(/("group1" \| "group2" \| "group5") \| ([
|
141
|
+
str.gsub!(/("group1" \| "group2" \| "group5") \| ([^)]+)/) { "#{$2} | #{$1}"}
|
142
142
|
|
143
143
|
%w[ccc ethernet-over-atm tcc vpls bridge].each do |encap|
|
144
|
-
str.gsub!(/"ethernet"(.*)"ethernet-#{encap}"/) { %["ethernet-#{encap}"
|
144
|
+
str.gsub!(/"ethernet"(.*)"ethernet-#{encap}"/) { %["ethernet-#{encap}"#{$1}"ethernet"] }
|
145
145
|
end
|
146
146
|
|
147
147
|
str.gsub!(/^(\s*)"path" arg \(\s*c\(\s*sc\(\s*"abstract",\s*c\(\s*"loose",\s*"loose-link",\s*"strict"\s*\)\s*\)\.as\(:oneline\)/) do
|
@@ -163,9 +163,9 @@ module Junoser
|
|
163
163
|
#
|
164
164
|
# Fix .xsd: Elements without "nokeyword" flag
|
165
165
|
#
|
166
|
-
str.gsub!(/\((.*) \| "name"\)/) { "(
|
166
|
+
str.gsub!(/\((.*) \| "name"\)/) { "(#{$1} | arg)" }
|
167
167
|
str.gsub! '"vlan" ("all" | "vlan-name")', '"vlan" ("all" | arg)'
|
168
|
-
str.gsub!(/\((.*) \| "vlan-id"\)/) { "(
|
168
|
+
str.gsub!(/\((.*) \| "vlan-id"\)/) { "(#{$1} | arg)" }
|
169
169
|
|
170
170
|
%w[filename].each do |key|
|
171
171
|
str.gsub! %["#{key}" arg], 'arg'
|
@@ -220,6 +220,17 @@ module Junoser
|
|
220
220
|
# Fix .xsd: keywords "dest-nat-rule-match", "src-nat-rule-match", "static-nat-rule-match" are wrong
|
221
221
|
str.gsub!(/"(dest|src|static)-nat-rule-match"/) { '"match"' }
|
222
222
|
|
223
|
+
# Fix .xsd: "snmp system-name" should be "snmp name"
|
224
|
+
str.gsub! '"system-name" arg', '"name" (quote | arg)'
|
225
|
+
|
226
|
+
# Fix .xsd: argument of "system license keys key" can be quoted
|
227
|
+
str.gsub!(/^(rule\(:license_object\) do.*?"key") arg/m) { "#{$1} (quote | arg)"}
|
228
|
+
|
229
|
+
# Fix .xsd: "prefix-limit teardown"
|
230
|
+
str.gsub!(/^(\s*)"teardown" (\(.*?as\(:oneline\)\s*\)\s*\))/m) do
|
231
|
+
"#{$1}\"teardown\" arg #{$2},\n#{$1}\"teardown\""
|
232
|
+
end
|
233
|
+
|
223
234
|
str
|
224
235
|
end
|
225
236
|
|
data/lib/junoser/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
# TypeProf 0.21.2
|
2
|
+
|
3
|
+
# Classes
|
4
|
+
module Junoser
|
5
|
+
class Ruler
|
6
|
+
OFFSET: String
|
7
|
+
@rule: untyped
|
8
|
+
|
9
|
+
def initialize: (untyped input) -> void
|
10
|
+
def to_rule: -> String
|
11
|
+
def rule: -> untyped
|
12
|
+
|
13
|
+
private
|
14
|
+
def remove_comments: (untyped str) -> untyped
|
15
|
+
def process_line: (untyped str) -> untyped
|
16
|
+
def process_reserved_element: (untyped str) -> untyped
|
17
|
+
def format: (Array[String?] | String str, ?String? offset) -> String?
|
18
|
+
def rule_header: -> String
|
19
|
+
def rule_footer: -> String
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: junoser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shintaro Kojima
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/junoser/xsd/simple_type.rb
|
138
138
|
- lib/junoser/xsd/union.rb
|
139
139
|
- lib/underscorable.rb
|
140
|
+
- sig/junoser/ruler.rbs
|
140
141
|
homepage: https://github.com/codeout/junoser
|
141
142
|
licenses: []
|
142
143
|
metadata: {}
|
@@ -155,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
156
|
- !ruby/object:Gem::Version
|
156
157
|
version: '0'
|
157
158
|
requirements: []
|
158
|
-
rubygems_version: 3.
|
159
|
+
rubygems_version: 3.3.7
|
159
160
|
signing_key:
|
160
161
|
specification_version: 4
|
161
162
|
summary: PEG parser for JUNOS configuration.
|