lab42_rgxargs 0.1.5 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47d38fb3f0f3f9881fd9ccc16ca4c883b88d4c275d7e18f857bd61da29c595a6
4
- data.tar.gz: 489530b10f2d2aa4ce02c4f3766aae359b5a03742bd3109bcf902839103d93ac
3
+ metadata.gz: 6c2b779615c5996b97aaa6fbb336adaecaba2119168d9cd6e28665bca4f26587
4
+ data.tar.gz: d1f125fb9a12342f54c3f6748d0a93c3782fc46d0abefd0330324a1ebe3aee3a
5
5
  SHA512:
6
- metadata.gz: a08a0dd92f963b90860f833ff070b41a1da5dc0c1725a3e67d8748277db9be7173ac2527f1f25eabeebbb7e3a67cc847b240466f2ce06da1d992d57f325fae38
7
- data.tar.gz: bcf5fdb925293e0a0ad10bfb372b6a3ae23990cb7ff72ea08baa621c45a09a181216592b36423d62663da6a85df562ab4b4f0643a95d7d8316eebc46cea72b9b
6
+ metadata.gz: dab565b74468cc86dfdedcc162343fc9b85eae244d908a0422b78ef68c5cae65c49e1eb0acf8463bc0a492a645f89441c2f71438e7671eac4534aca89b19bbdf
7
+ data.tar.gz: 7bb8d96d57afeb88a720c6500dcefda5b2f8fc24e877112c0930e6062e0918b5fa304aa3816e757a1885e51567ed24c3cfec238b73d30678d6e99fe7be4b8410
@@ -4,28 +4,40 @@ require 'lab42/enumerable'
4
4
  module Lab42
5
5
 
6
6
  class Rgxargs
7
+ require_relative 'rgxargs/checker'
8
+ require_relative 'rgxargs/constrainer'
7
9
  require_relative 'rgxargs/predefined_matchers'
8
10
  require_relative 'rgxargs/argument_matcher'
9
11
  require_relative 'rgxargs/syntax_definer'
12
+ include Checker
13
+ include Constrainer
14
+
10
15
  Predefined = PredefinedMatchers
11
16
 
12
17
  extend Forwardable
13
18
  def_delegators Predefined, :list_matcher
14
19
 
15
- attr_reader :args, :conversions, :defined_rules, :errors, :options, :syntaxes
20
+ attr_reader :allowed, :args, :conversions, :defaults, :defined_rules, :errors, :options, :required, :syntaxes
16
21
 
17
22
 
18
- def add_conversion(param, conversion, &block)
23
+ def add_conversion(param, conversion, required=nil, &block)
19
24
  case conversion
20
25
  when Symbol
21
- conversions[param] = Predefined.fetch(conversion, conversion)
26
+ _add_symbolic_conversion(param, conversion, required)
22
27
  else
23
- conversions[param] = block ? [conversion, block] : conversion
28
+ _add_proc_conversion(param, conversion, block, required)
24
29
  end
25
30
  end
26
31
 
27
32
  def add_syntax(rgx, parser=nil, as: nil)
28
- syntaxes << ArgumentMatcher.new(rgx, parser, arg_name: as)
33
+ case rgx
34
+ when Symbol, Regexp
35
+ syntaxes << ArgumentMatcher.new(rgx, parser, arg_name: as)
36
+ when Array
37
+ rgx.each do |rg1|
38
+ add_syntax( rg1, parser, as: as)
39
+ end
40
+ end
29
41
  end
30
42
 
31
43
  def define_arg name, &blk
@@ -36,6 +48,7 @@ module Lab42
36
48
  until argv.empty?
37
49
  argv = _parse_next argv
38
50
  end
51
+ _check_required_kwds
39
52
  [options, args, errors]
40
53
  end
41
54
 
@@ -44,16 +57,19 @@ module Lab42
44
57
 
45
58
  def initialize &blk
46
59
  @args = []
60
+ @allowed = nil
47
61
  @conversions = {}
62
+ @defaults = {}
48
63
  @defined_rules = []
49
64
  @errors = []
50
- @options = OpenStruct.new
65
+ @required = Set.new
51
66
  @syntaxes = []
52
67
 
53
68
  instance_exec(&blk) if blk
69
+ @options = OpenStruct.new(defaults)
54
70
  end
55
71
 
56
- def _convert(value, name:)
72
+ def _convert(value, name:)
57
73
  conv = conversions.fetch(name, nil)
58
74
  case conv
59
75
  when Symbol
@@ -62,7 +78,7 @@ module Lab42
62
78
  conv.(value)
63
79
  when Array
64
80
  if (match = conv.first.match(value))
65
- conv[1].(*match.captures)
81
+ conv[1].(*match.captures)
66
82
  else
67
83
  errors << [:syntax_error, name, "#{value} does not match #{conv.first}"]
68
84
  nil
@@ -72,6 +88,19 @@ module Lab42
72
88
  end
73
89
  end
74
90
 
91
+ def _add_proc_conversion(param, conversion, block, required)
92
+ Array(param).each do |para|
93
+ @required.add para if required == :required
94
+ conversions[para] = block ? [conversion, block] : conversion
95
+ end
96
+ end
97
+
98
+ def _add_symbolic_conversion(param, conversion, required)
99
+ Array(param).each do |para|
100
+ @required.add para if required == :required
101
+ conversions[para] = Predefined.fetch(conversion, conversion)
102
+ end
103
+ end
75
104
 
76
105
  def _parse_next argv
77
106
  first, *rest = argv
@@ -85,10 +114,14 @@ module Lab42
85
114
  def _parse_symbolic first, rest
86
115
  case first
87
116
  when %r{\A:(.*)}
88
- options[$1.gsub('-','_').to_sym]=true
117
+ switch = $1.gsub('-','_').to_sym
118
+ _check_switch(switch)
119
+ options[switch]=true
89
120
  rest
90
121
  when %r{(.*):\z}
91
- _parse_value $1.gsub('-', '_').to_sym, rest
122
+ kwd = $1.gsub('-', '_').to_sym
123
+ _check_kwd(kwd)
124
+ _parse_value kwd, rest
92
125
  when %r{\A\\(.*)}
93
126
  args << $1
94
127
  rest
@@ -0,0 +1,33 @@
1
+ module Lab42
2
+ class Rgxargs
3
+ module Checker
4
+
5
+ private
6
+
7
+ def _check_kwd(kwd)
8
+ return if allowed.nil?
9
+ return if allowed.member? kwd
10
+ return if required.member? kwd
11
+ errors << [:unauthorized_kwd, kwd]
12
+ end
13
+
14
+ def _check_required_kwds
15
+ missing = required - options.to_h.keys
16
+ @errors += missing.map(&_mk_pair(:required_kwd_missing))
17
+ end
18
+
19
+
20
+ def _mk_pair(prefix)
21
+ -> element do
22
+ [prefix, element]
23
+ end
24
+ end
25
+
26
+ def _check_switch(_)
27
+
28
+ end
29
+
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ module Lab42
2
+ class Rgxargs
3
+ module Constrainer
4
+
5
+ def allow_kwds(*kwds)
6
+ @allowed = (allowed||Set.new).union(Set.new(kwds.flatten))
7
+ end
8
+
9
+ def require_kwds(*kwds)
10
+ @required = (required||Set.new).union(Set.new(kwds.flatten))
11
+ end
12
+
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lab42_rgxargs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: lab42_speculate
14
+ name: speculate_about
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.4
19
+ version: 0.1.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.4
26
+ version: 0.1.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +75,8 @@ files:
75
75
  - lib/lab42/enumerable.rb
76
76
  - lib/lab42/rgxargs.rb
77
77
  - lib/lab42/rgxargs/argument_matcher.rb
78
+ - lib/lab42/rgxargs/checker.rb
79
+ - lib/lab42/rgxargs/constrainer.rb
78
80
  - lib/lab42/rgxargs/error.rb
79
81
  - lib/lab42/rgxargs/predefined_matchers.rb
80
82
  - lib/lab42/rgxargs/syntax.rb
@@ -83,7 +85,7 @@ homepage: https://github.com/robertdober/lab42_rgxargs
83
85
  licenses:
84
86
  - Apache-2.0
85
87
  metadata: {}
86
- post_install_message:
88
+ post_install_message:
87
89
  rdoc_options: []
88
90
  require_paths:
89
91
  - lib
@@ -99,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
101
  version: '0'
100
102
  requirements: []
101
103
  rubygems_version: 3.1.2
102
- signing_key:
104
+ signing_key:
103
105
  specification_version: 4
104
106
  summary: Parse CL args according to regexen
105
107
  test_files: []