lab42_rgxargs 0.2.0 → 0.2.3

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: 41047fa38d0777afaefc8141cf5cf6a5c903dcb096e34e30da5b0f1dc0fdae68
4
- data.tar.gz: 350afca829cc580e8c865e714625c066cafe2158a35f36a11eebae63957b4e68
3
+ metadata.gz: 46ea3cf93ac7771a551e9a10b20f186f138212ebce19c00a5083f81643d6f5aa
4
+ data.tar.gz: 67228a63a2bafd4e31146ed404763f5594d04874814ceb4a305f32fbc43be2bb
5
5
  SHA512:
6
- metadata.gz: 68b1c191e340488ad1adf0f91feaa2eb623223a31b6b1f80fcd53bc8fc30ac91f2b04150160022123dd41d9ea28802f5293691db929816310fde9ede4ba63dde
7
- data.tar.gz: a6d9e9f157e915c73f4700886fdb336f19ae8a0154284217190bb75880aad08bc0a0c008cacbfc5a1f8518ed9a5420de7d38894a0a3387296ce16b1fd41e7a77
6
+ metadata.gz: 6ed3a187a04077514644c693ac0e4ec39a3043da60b4bf1f89e330e09de277b87383173d4705e5b977a3f004fb9dc0c96dbe906a4e68944a78ea9e3d0db09b50
7
+ data.tar.gz: 7d4e6142d636dfb485c2724ef6c55a20bef1128d025778f478feb6ce7f7ac0c2a9756e23c22c695475d24c03a2c814ed30735e7cc9eafcc8341ad4d8189b8d93
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ class OpenStruct
5
+ def deconstruct_keys(_keys)
6
+ to_h
7
+ end
8
+ end
9
+ # SPDX-License-Identifier: Apache-2.0
@@ -15,7 +15,7 @@ module Lab42
15
15
  missing = required - options.to_h.keys
16
16
  @errors += missing.map(&_mk_pair(:required_kwd_missing))
17
17
  end
18
-
18
+
19
19
 
20
20
  def _mk_pair(prefix)
21
21
  -> element do
@@ -24,7 +24,7 @@ module Lab42
24
24
  end
25
25
 
26
26
  def _check_switch(_)
27
-
27
+
28
28
  end
29
29
 
30
30
 
@@ -1,5 +1,6 @@
1
1
  module Lab42::Rgxargs::PredefinedMatchers extend self
2
2
  PREDEFINED = {
3
+ existing_dirs: [%r{(.+)}, ->(glob){ Dir.glob(glob).filter{ File.directory?(_1) } }],
3
4
  int: [%r{\A([-+]?\d+)\z}, :to_i.to_proc],
4
5
  int_list: [%r{\A(-?\d+(?:,-?\d+)*)\z}, ->(*groups){ groups.first.split(",").map(&:to_i)}],
5
6
  int_range: [%r{\A(-?\d+)(?:-|\.\.)(-?\d+)\z}, ->(f, l){ Range.new(f.to_i, l.to_i) }],
@@ -1,5 +1,5 @@
1
1
  module Lab42
2
2
  class Rgxargs
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.3"
4
4
  end
5
5
  end
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, :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
- until argv.empty?
56
- argv = _parse_next argv
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,13 +70,14 @@ module Lab42
69
70
 
70
71
  private
71
72
 
72
- def initialize &blk
73
+ def initialize(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
79
81
  @required = ::Set.new
80
82
  @syntaxes = []
81
83
 
@@ -122,7 +124,16 @@ module Lab42
122
124
  end
123
125
  end
124
126
 
125
- def _parse_next argv
127
+ def _parse_next_posix argv
128
+ first, *rest = argv
129
+ if first == '--'
130
+ @args += rest
131
+ return []
132
+ end
133
+ _parse_posix_param first, rest
134
+ end
135
+
136
+ def _parse_next_ruby_syntax argv
126
137
  first, *rest = argv
127
138
  if first == '--'
128
139
  @args += rest
@@ -131,6 +142,43 @@ module Lab42
131
142
  _parse_symbolic first, rest
132
143
  end
133
144
 
145
+ def _parse_posix argv
146
+ until argv.empty?
147
+ argv = _parse_next_posix argv
148
+ end
149
+ _check_required_kwds
150
+ [options, args, errors]
151
+ end
152
+
153
+ def _parse_posix_param first, rest
154
+ case first
155
+ when %r{\A--([-_[:alnum:]]+)=(.*)\z}
156
+ Regexp.last_match.to_a => _, name, value
157
+ name = name.gsub("-", "_")
158
+ options[name] = _convert(value, name: name)
159
+ when %r{\A--([-_[:alnum:]]+)\z}
160
+ Regexp.last_match.to_a => _, name
161
+ name = name.gsub("-", "_")
162
+ options[name] = true
163
+ when %r{\A-([[:alnum:]]+)\z}
164
+ $1.grapheme_clusters.each do |shopt|
165
+ options[shopt]=true
166
+ end
167
+ else
168
+ args << first
169
+ # _parse_syntax(first)
170
+ end
171
+ rest
172
+ end
173
+
174
+ def _parse_ruby_syntax argv
175
+ until argv.empty?
176
+ argv = _parse_next_ruby_syntax argv
177
+ end
178
+ _check_required_kwds
179
+ [options, args, errors]
180
+ end
181
+
134
182
  def _parse_symbolic first, rest
135
183
  case first
136
184
  when %r{\A:(.*)}
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.0
4
+ version: 0.2.3
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.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