help_parser 6.1.0 → 6.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/README.md +1 -1
- data/lib/help_parser.rb +1 -1
- data/lib/help_parser/completion.rb +7 -6
- data/lib/help_parser/constants.rb +2 -2
- data/lib/help_parser/k2t2r.rb +2 -2
- data/lib/help_parser/options.rb +8 -4
- data/lib/help_parser/parseh.rb +2 -2
- data/lib/help_parser/parseu.rb +2 -2
- data/lib/help_parser/validations.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 137d04ddd668a522d322093c831b92b12b6c52354ef621383825f90a860d6e30
|
4
|
+
data.tar.gz: 13a5bce9a7fd241d5bc27614eab56105b3a355e8f0140ad1e6390d59bed38de1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9353c972bf23ee28025d2a373397bfad784da2abc51cf26d932a88359a9e6df8930d4e04fc2c82e11a12813049bb98d56c98cd0ff02793161c62cc98117d6a2
|
7
|
+
data.tar.gz: 29efa76ac44adfdc5b1146eb7d6bf8f7c8d6c012fcd0215f996b956478e0e8f84c908a4810ab9ca67a4bb0d8e6285d9bb68eed5d19478f77d0889366065cf652
|
data/README.md
CHANGED
data/lib/help_parser.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module HelpParser
|
2
2
|
class Completion
|
3
|
-
def initialize(hash, specs,
|
4
|
-
@hash,@specs
|
3
|
+
def initialize(hash, specs, validate=true)
|
4
|
+
@hash,@specs = hash,specs
|
5
|
+
@cache = NoDupHash.new
|
5
6
|
usage if @specs.has_key?(USAGE)
|
6
7
|
pad
|
7
|
-
types
|
8
|
+
types(validate)
|
8
9
|
end
|
9
10
|
|
10
11
|
def usage
|
@@ -23,10 +24,10 @@ module HelpParser
|
|
23
24
|
raise UsageError, MATCH_USAGE
|
24
25
|
end
|
25
26
|
|
26
|
-
def types
|
27
|
+
def types(validate=true)
|
27
28
|
if t2r = HelpParser.t2r(@specs)
|
28
|
-
k2t = HelpParser.k2t(@specs)
|
29
|
-
HelpParser.validate_k2t2r(@specs, k2t, t2r)
|
29
|
+
k2t = HelpParser.k2t(@specs, validate)
|
30
|
+
HelpParser.validate_k2t2r(@specs, k2t, t2r) if validate
|
30
31
|
@hash.each do |key,value|
|
31
32
|
next unless key.is_a?(String)
|
32
33
|
if type = k2t[key]
|
@@ -28,7 +28,7 @@ module HelpParser
|
|
28
28
|
# spec W+ /~/
|
29
29
|
TYPE_DEF = /^(?<t>[A-Z]+),?\s+\/(?<r>\S+)\/$/
|
30
30
|
|
31
|
-
# spec w+( w+)
|
31
|
+
# spec w+( w+)+
|
32
32
|
X_DEF = /^\w+( +\w+)+$/
|
33
33
|
|
34
34
|
CSV = /,?\s+/
|
@@ -39,7 +39,6 @@ module HelpParser
|
|
39
39
|
EX_CONFIG = 78
|
40
40
|
|
41
41
|
# error messages, partials:
|
42
|
-
NO_MATCH = 'Software Error: NoMatch was not caught by HelpParser.'
|
43
42
|
DUP_KEY = 'Duplicate key'
|
44
43
|
DUP_WORD = 'Duplicate word'
|
45
44
|
DUP_FLAG = 'Duplicate flag'
|
@@ -67,6 +66,7 @@ module HelpParser
|
|
67
66
|
NOT_INTEGER = 'Not an Integer'
|
68
67
|
NOT_INTEGERS = 'Not all Integers'
|
69
68
|
# error messages, full:
|
69
|
+
NO_MATCH = 'Software Error: NoMatch was not caught by HelpParser.'
|
70
70
|
MATCH_USAGE = 'Please match usage.'
|
71
71
|
EXTRANEOUS_SPACES = 'Extraneous spaces in help.'
|
72
72
|
|
data/lib/help_parser/k2t2r.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module HelpParser
|
2
|
-
def self.k2t(specs)
|
2
|
+
def self.k2t(specs, validate=true)
|
3
3
|
k2t = NoDupHash.new
|
4
4
|
tokens = specs.select{|k,v| !(k==TYPES)}.values.flatten.select{|v|v.include?('=')}
|
5
5
|
tokens.each do |token|
|
6
6
|
if match = VARIABLE.match(token) || LONG.match(token)
|
7
7
|
name, type = match['k'], match['t']
|
8
8
|
k2t[name] = type if !k2t.has_key?(name)
|
9
|
-
raise HelpError, MSG[INCONSISTENT,name,type,k2t[name]]
|
9
|
+
raise HelpError, MSG[INCONSISTENT,name,type,k2t[name]] if validate and !(type==k2t[name])
|
10
10
|
else
|
11
11
|
# Expected these to be caught earlier...
|
12
12
|
raise SoftwareError, MSG[UNEXPECTED,token]
|
data/lib/help_parser/options.rb
CHANGED
@@ -11,16 +11,20 @@ module HelpParser
|
|
11
11
|
if @hash.has_key?('h') || _=@hash.has_key?('help')
|
12
12
|
begin
|
13
13
|
# validates help
|
14
|
-
HelpParser.parseh(help, true)
|
14
|
+
specs = HelpParser.parseh(help, true)
|
15
|
+
if t2r = HelpParser.t2r(specs)
|
16
|
+
k2t = HelpParser.k2t(specs, true)
|
17
|
+
HelpParser.validate_k2t2r(specs, k2t, t2r)
|
18
|
+
end
|
15
19
|
rescue HelpError
|
16
20
|
$stderr.puts $!
|
17
21
|
end if _
|
18
22
|
raise HelpException, help
|
19
23
|
end
|
20
24
|
specs = HelpParser.parseh(help, HelpParser.validate?)
|
21
|
-
Completion.new(@hash, specs)
|
22
|
-
if
|
23
|
-
|
25
|
+
Completion.new(@hash, specs, HelpParser.validate?)
|
26
|
+
if exclusive=specs[EXCLUSIVE]
|
27
|
+
exclusive.each{|xs| raise HelpParser::UsageError, MSG[EXCLUSIVE_KEYS,*xs] if @hash.keys.count{|k|xs.include?(k)}>1}
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
data/lib/help_parser/parseh.rb
CHANGED
@@ -10,12 +10,12 @@ module HelpParser
|
|
10
10
|
else
|
11
11
|
next if name==''
|
12
12
|
break if line[0]=='#'
|
13
|
-
next if line[0]
|
13
|
+
next if !(line[0]==' ')
|
14
14
|
spec = (index=line.rindex("\t"))? line[0,index].strip : line.strip
|
15
15
|
raise HelpError, EXTRANEOUS_SPACES if validate and spec==''
|
16
16
|
case name
|
17
17
|
when USAGE
|
18
|
-
specs[name].push HelpParser.parseu
|
18
|
+
specs[name].push HelpParser.parseu(spec, validate)
|
19
19
|
when TYPES
|
20
20
|
raise HelpError, MSG[UNRECOGNIZED_TYPE,spec] if validate and not spec=~TYPE_DEF
|
21
21
|
specs[name].push spec.split(CSV)
|
data/lib/help_parser/parseu.rb
CHANGED
@@ -18,11 +18,11 @@ module HelpParser
|
|
18
18
|
return tokens
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.parseu(line)
|
21
|
+
def self.parseu(line, validate=true)
|
22
22
|
chars = line.chars
|
23
23
|
HelpParser.validate_line_chars(chars)
|
24
24
|
tokens = HelpParser._parseu(chars)
|
25
|
-
HelpParser.validate_usage_tokens(tokens)
|
25
|
+
HelpParser.validate_usage_tokens(tokens) if validate
|
26
26
|
return tokens
|
27
27
|
end
|
28
28
|
end
|
@@ -30,11 +30,11 @@ module HelpParser
|
|
30
30
|
def self.validate_usage_specs(specs)
|
31
31
|
option_specs = specs.select{|a,b| !RESERVED[a]}
|
32
32
|
flags = option_specs.values.flatten.select{|f|f[0]=='-'}.map{|f| F2K[f]}
|
33
|
-
|
33
|
+
if exclusive=specs[EXCLUSIVE]
|
34
34
|
seen = {}
|
35
|
-
|
36
|
-
k = xs.sort.join('
|
37
|
-
raise HelpError, MSG[DUP_X
|
35
|
+
exclusive.each do |xs|
|
36
|
+
k = xs.sort.join(' ').to_sym
|
37
|
+
raise HelpError, MSG[DUP_X,k] if seen[k]
|
38
38
|
seen[k] = true
|
39
39
|
xs.each do |x|
|
40
40
|
raise HelpError, MSG[UNSEEN_FLAG, x] unless flags.include?(x)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: help_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- carlosjhr64
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Welcome to the best Help Parser of all!
|