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 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!