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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e50119d56d6b94ac58234ccfc24d3c5ddaf68a6f399753af89fc3fad2f210b3e
4
- data.tar.gz: 591810bdc390d16c1ed6b4fc2332f6bc1b98a683c218cd446fa7726d820ff22e
3
+ metadata.gz: 137d04ddd668a522d322093c831b92b12b6c52354ef621383825f90a860d6e30
4
+ data.tar.gz: 13a5bce9a7fd241d5bc27614eab56105b3a355e8f0140ad1e6390d59bed38de1
5
5
  SHA512:
6
- metadata.gz: b64e50f235e4f53e2f85a0508212b38b4fb80f7616150864a68cf04f39bb3c9d88dad4a3b1764ee3a7410978d01f20ae15739610a79c92a25190bad00bd24526
7
- data.tar.gz: 9ccf098df4a3226b39a85519251f172097ecb9854cd05adf95bc61d54a4fad9718703c6c2ed9a92abf61f1862fbe10738937b41473c34fa0eb75db34aca78b7e
6
+ metadata.gz: c9353c972bf23ee28025d2a373397bfad784da2abc51cf26d932a88359a9e6df8930d4e04fc2c82e11a12813049bb98d56c98cd0ff02793161c62cc98117d6a2
7
+ data.tar.gz: 29efa76ac44adfdc5b1146eb7d6bf8f7c8d6c012fcd0215f996b956478e0e8f84c908a4810ab9ca67a4bb0d8e6285d9bb68eed5d19478f77d0889366065cf652
data/README.md CHANGED
@@ -42,7 +42,7 @@ I prefer easy.
42
42
  Blah blah blah
43
43
  HELP
44
44
 
45
- VERSION = "6.1.0"
45
+ VERSION = "6.2.0"
46
46
 
47
47
  # Macros:
48
48
  HelpParser.string(name) # for options.name : String
data/lib/help_parser.rb CHANGED
@@ -11,7 +11,7 @@ require_relative './help_parser/options'
11
11
  require_relative './help_parser/macros'
12
12
 
13
13
  module HelpParser
14
- VERSION = '6.1.0'
14
+ VERSION = '6.2.0'
15
15
 
16
16
  def self.[](
17
17
  version = nil,
@@ -1,10 +1,11 @@
1
1
  module HelpParser
2
2
  class Completion
3
- def initialize(hash, specs, cache = NoDupHash.new)
4
- @hash,@specs,@cache = hash,specs,cache
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
 
@@ -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]] unless 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]
@@ -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 xs=specs[EXCLUSIVE]
23
- xs.each{|x| raise HelpParser::UsageError, MSG[EXCLUSIVE_KEYS,*x] if @hash.keys.count{|k|x.include?(k)}>1}
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
@@ -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 spec
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)
@@ -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
- unless specs[EXCLUSIVE].nil?
33
+ if exclusive=specs[EXCLUSIVE]
34
34
  seen = {}
35
- specs[EXCLUSIVE].each do |xs|
36
- k = xs.sort.join(',').to_sym
37
- raise HelpError, MSG[DUP_X,*xs] if seen[k]
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.1.0
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-25 00:00:00.000000000 Z
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!