help_parser 6.1.0 → 6.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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!
|