lab42_rgxargs 0.2.1 → 0.2.4
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/lib/lab42/monkey/open_struct.rb +9 -0
- data/lib/lab42/rgxargs/version.rb +1 -1
- data/lib/lab42/rgxargs.rb +68 -12
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa12272618cb7bd23bf218ce2405f99119f1686352b7ddfc622e5697caa22dbf
|
4
|
+
data.tar.gz: 5f6c5ebf2b1ff5bdfa3d701b493359aff5fdea521f221b78d0f5f3e3838060a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb9e676b416e06afdb02c10740026afd313f41aaf17ce60824054309327915e00dd4883901d311bb96ff15d376793fdf27a9cc6be7a1c2ee6d8074a75ff302bc
|
7
|
+
data.tar.gz: 1a40c994e1b1943c070f6b2969c1b4b59ab832e17e79908cd7218210bbf12e916c1521ea5758aa0e7330515606dd4745a18941771f8bd9e3d57d775b941791a2
|
data/lib/lab42/rgxargs.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'forwardable'
|
2
|
-
require 'ostruct'
|
3
2
|
require 'lab42/enumerable'
|
4
3
|
require 'set'
|
4
|
+
|
5
|
+
require_relative 'monkey/open_struct'
|
5
6
|
module Lab42
|
6
7
|
|
7
8
|
class Rgxargs
|
@@ -18,7 +19,7 @@ module Lab42
|
|
18
19
|
extend Forwardable
|
19
20
|
def_delegators Predefined, :list_matcher
|
20
21
|
|
21
|
-
attr_reader :allowed, :args, :conversions, :defaults, :defined_rules, :errors, :options, :required, :syntaxes
|
22
|
+
attr_reader :allowed, :args, :conversions, :defaults, :defined_rules, :errors, :open_struct, :options, :posix, :required, :syntaxes
|
22
23
|
|
23
24
|
def predefined_matchers
|
24
25
|
Predefined.defined_names
|
@@ -52,11 +53,11 @@ module Lab42
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def parse argv
|
55
|
-
|
56
|
-
|
56
|
+
if posix
|
57
|
+
_parse_posix argv
|
58
|
+
else
|
59
|
+
_parse_ruby_syntax argv
|
57
60
|
end
|
58
|
-
_check_required_kwds
|
59
|
-
[options, args, errors]
|
60
61
|
end
|
61
62
|
|
62
63
|
def allows name, matcher=nil, &converter
|
@@ -69,18 +70,20 @@ module Lab42
|
|
69
70
|
|
70
71
|
private
|
71
72
|
|
72
|
-
def initialize &blk
|
73
|
+
def initialize(open_struct: true, posix: false, &blk)
|
73
74
|
@args = []
|
74
75
|
@allowed = nil
|
75
76
|
@conversions = {}
|
76
77
|
@defaults = {}
|
77
78
|
@defined_rules = []
|
78
79
|
@errors = []
|
80
|
+
@posix = posix
|
81
|
+
@open_struct = open_struct
|
79
82
|
@required = ::Set.new
|
80
83
|
@syntaxes = []
|
81
84
|
|
82
85
|
instance_exec(&blk) if blk
|
83
|
-
@options =
|
86
|
+
@options = defaults
|
84
87
|
end
|
85
88
|
|
86
89
|
def _convert(value, name:)
|
@@ -122,7 +125,16 @@ module Lab42
|
|
122
125
|
end
|
123
126
|
end
|
124
127
|
|
125
|
-
def
|
128
|
+
def _parse_next_posix argv
|
129
|
+
first, *rest = argv
|
130
|
+
if first == '--'
|
131
|
+
@args += rest
|
132
|
+
return []
|
133
|
+
end
|
134
|
+
_parse_posix_param first, rest
|
135
|
+
end
|
136
|
+
|
137
|
+
def _parse_next_ruby_syntax argv
|
126
138
|
first, *rest = argv
|
127
139
|
if first == '--'
|
128
140
|
@args += rest
|
@@ -131,12 +143,49 @@ module Lab42
|
|
131
143
|
_parse_symbolic first, rest
|
132
144
|
end
|
133
145
|
|
146
|
+
def _parse_posix argv
|
147
|
+
until argv.empty?
|
148
|
+
argv = _parse_next_posix argv
|
149
|
+
end
|
150
|
+
_check_required_kwds
|
151
|
+
_return_values
|
152
|
+
end
|
153
|
+
|
154
|
+
def _parse_posix_param first, rest
|
155
|
+
case first
|
156
|
+
when %r{\A--([-_[:alnum:]]+)=(.*)\z}
|
157
|
+
Regexp.last_match.to_a => _, name, value
|
158
|
+
name = name.gsub("-", "_")
|
159
|
+
options[name.to_sym] = _convert(value, name: name)
|
160
|
+
when %r{\A--([-_[:alnum:]]+)\z}
|
161
|
+
Regexp.last_match.to_a => _, name
|
162
|
+
name = name.gsub("-", "_")
|
163
|
+
options[name.to_sym] = true
|
164
|
+
when %r{\A-([[:alnum:]]+)\z}
|
165
|
+
$1.grapheme_clusters.each do |shopt|
|
166
|
+
options[shopt.to_sym]=true
|
167
|
+
end
|
168
|
+
else
|
169
|
+
args << first
|
170
|
+
# _parse_syntax(first)
|
171
|
+
end
|
172
|
+
rest
|
173
|
+
end
|
174
|
+
|
175
|
+
def _parse_ruby_syntax argv
|
176
|
+
until argv.empty?
|
177
|
+
argv = _parse_next_ruby_syntax argv
|
178
|
+
end
|
179
|
+
_check_required_kwds
|
180
|
+
_return_values
|
181
|
+
end
|
182
|
+
|
134
183
|
def _parse_symbolic first, rest
|
135
184
|
case first
|
136
185
|
when %r{\A:(.*)}
|
137
186
|
switch = $1.gsub('-','_').to_sym
|
138
187
|
_check_switch(switch)
|
139
|
-
options[switch]=true
|
188
|
+
options[switch.to_sym]=true
|
140
189
|
rest
|
141
190
|
when %r{(.*):\z}
|
142
191
|
kwd = $1.gsub('-', '_').to_sym
|
@@ -154,7 +203,7 @@ module Lab42
|
|
154
203
|
def _parse_syntax first
|
155
204
|
value, as = syntaxes.find_value(first){ |matcher| matcher.match(first) }
|
156
205
|
if as
|
157
|
-
options[as] = value
|
206
|
+
options[as.to_sym] = value
|
158
207
|
else
|
159
208
|
args << value
|
160
209
|
end
|
@@ -163,12 +212,19 @@ module Lab42
|
|
163
212
|
def _parse_value name, rest
|
164
213
|
value, *rest1 = rest
|
165
214
|
if value
|
166
|
-
options[name] = _convert(value, name: name)
|
215
|
+
options[name.to_sym] = _convert(value, name: name)
|
167
216
|
return rest1
|
168
217
|
end
|
169
218
|
errors << [:missing_required_value, name]
|
170
219
|
[]
|
171
220
|
end
|
172
221
|
|
222
|
+
def _return_values
|
223
|
+
if open_struct
|
224
|
+
[::OpenStruct.new(options), args, errors]
|
225
|
+
else
|
226
|
+
[options, args, errors]
|
227
|
+
end
|
228
|
+
end
|
173
229
|
end
|
174
230
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lab42_rgxargs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
@@ -73,6 +73,7 @@ extensions: []
|
|
73
73
|
extra_rdoc_files: []
|
74
74
|
files:
|
75
75
|
- lib/lab42/enumerable.rb
|
76
|
+
- lib/lab42/monkey/open_struct.rb
|
76
77
|
- lib/lab42/rgxargs.rb
|
77
78
|
- lib/lab42/rgxargs/argument_matcher.rb
|
78
79
|
- lib/lab42/rgxargs/checker.rb
|
@@ -101,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
102
|
- !ruby/object:Gem::Version
|
102
103
|
version: '0'
|
103
104
|
requirements: []
|
104
|
-
rubygems_version: 3.3.
|
105
|
+
rubygems_version: 3.3.7
|
105
106
|
signing_key:
|
106
107
|
specification_version: 4
|
107
108
|
summary: Parse CL args according to regexen
|