lab42_rgxargs 0.2.0 → 0.2.3

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