lab42_rgxargs 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/lab42/rgxargs.rb +93 -91
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1284c83060453b9b65c017381fb3afb8388a2bff50bc256bfd1d4456f46a94d1
4
- data.tar.gz: 8e51fe32f62a1d16b6ba4e6a7b99a6011e203041c5dcd7b19cce3ed751af818d
3
+ metadata.gz: ad2ab026f6192cc81dd04008d035a79188ed42723b4d687a536a49c010d8a0db
4
+ data.tar.gz: b4503cbb9403aec807fb871c5d901690d6ba026edb8c6b6080e0af4506b6e2a7
5
5
  SHA512:
6
- metadata.gz: 428e2088c5f440857f952069a63e9dce4cb33e7ee331d4b7bfbde2bbaa7d9e623ed74b121a93650e8621c3c80e536b50761d1dfbcc04dbaba84bbee9210b238f
7
- data.tar.gz: 2b455ae68e0a12c97a43f4395d3d49dcd0ca059532db4489fc71e2b17c74e664d8b422194e550fcec30992d16a0febe7294e641043bf1926bea7eb84fce136c4
6
+ metadata.gz: e41fc413182c5a6e6ca070c8980b9356738df2b956915c1fdf55849136642ff36b97cef4ee01e1fc3505269a7f9c7b9328044bd8c7a1d4b3401e08aa8820a5b8
7
+ data.tar.gz: e75cbfc5b427e68838513444862d0e3ccca90fe5363f517fe24f40beae2655c830c020f2c55559375069bfe837c4ab55940559f3625e318656b12c9c4ff3d5cc
data/lib/lab42/rgxargs.rb CHANGED
@@ -1,117 +1,119 @@
1
1
  require 'forwardable'
2
2
  require 'ostruct'
3
3
  require 'lab42/enumerable'
4
+ module Lab42
4
5
 
5
- class Lab42::Rgxargs
6
- require_relative 'rgxargs/predefined_matchers'
7
- Predefined = PredefinedMatchers
6
+ class Rgxargs
7
+ require_relative 'rgxargs/predefined_matchers'
8
+ Predefined = PredefinedMatchers
8
9
 
9
- extend Forwardable
10
- def_delegators Predefined, :list_matcher
10
+ extend Forwardable
11
+ def_delegators Predefined, :list_matcher
11
12
 
12
- attr_reader :args, :conversions, :defined_rules, :errors, :options, :syntaxes
13
+ attr_reader :args, :conversions, :defined_rules, :errors, :options, :syntaxes
13
14
 
14
15
 
15
- def add_conversion(param, conversion)
16
- case conversion
17
- when Symbol
18
- conversions[param] = Predefined.fetch(conversion, conversion)
19
- else
20
- conversions[param] = conversion
16
+ def add_conversion(param, conversion)
17
+ case conversion
18
+ when Symbol
19
+ conversions[param] = Predefined.fetch(conversion, conversion)
20
+ else
21
+ conversions[param] = conversion
22
+ end
21
23
  end
22
- end
23
24
 
24
- def add_syntax(rgx, parser=nil)
25
- if parser
26
- syntaxes << [rgx, parser]
27
- else
28
- if predef = Predefined.fetch(rgx)
29
- syntaxes << predef
25
+ def add_syntax(rgx, parser=nil)
26
+ if parser
27
+ syntaxes << [rgx, parser]
30
28
  else
31
- raise ArgumentError, "#{rgx} is not a predefined syntax, use one of the following:\n\t#{Predefined.defined_names}"
29
+ if predef = Predefined.fetch(rgx)
30
+ syntaxes << predef
31
+ else
32
+ raise ArgumentError, "#{rgx} is not a predefined syntax, use one of the following:\n\t#{Predefined.defined_names}"
33
+ end
34
+ end
32
35
  end
33
- end
34
- end
35
36
 
36
- def parse argv
37
- until argv.empty?
38
- argv = _parse_next argv
39
- end
40
- [options, args, errors]
41
- end
37
+ def parse argv
38
+ until argv.empty?
39
+ argv = _parse_next argv
40
+ end
41
+ [options, args, errors]
42
+ end
42
43
 
43
44
 
44
- private
45
+ private
45
46
 
46
- def initialize &blk
47
- @args = []
48
- @conversions = {}
49
- @defined_rules = []
50
- @errors = []
51
- @options = OpenStruct.new
52
- @syntaxes = []
47
+ def initialize &blk
48
+ @args = []
49
+ @conversions = {}
50
+ @defined_rules = []
51
+ @errors = []
52
+ @options = OpenStruct.new
53
+ @syntaxes = []
53
54
 
54
- instance_exec(&blk) if blk
55
- end
55
+ instance_exec(&blk) if blk
56
+ end
56
57
 
57
- def _convert(value, name:)
58
- conv = conversions.fetch(name, nil)
59
- case conv
60
- when Symbol
61
- value.send conv
62
- when Proc
63
- conv.(value)
64
- when Array
65
- if (match = conv.first.match(value))
66
- conv.last.(match.captures)
67
- else
68
- errors << [:syntax_error, name, "#{value} does not match #{conv.first}"]
69
- nil
58
+ def _convert(value, name:)
59
+ conv = conversions.fetch(name, nil)
60
+ case conv
61
+ when Symbol
62
+ value.send conv
63
+ when Proc
64
+ conv.(value)
65
+ when Array
66
+ if (match = conv.first.match(value))
67
+ conv.last.(match.captures)
68
+ else
69
+ errors << [:syntax_error, name, "#{value} does not match #{conv.first}"]
70
+ nil
71
+ end
72
+ else
73
+ value
74
+ end
70
75
  end
71
- else
72
- value
73
- end
74
- end
75
76
 
76
- def _defined_rules(_arg)
77
- false
78
- end
77
+ def _defined_rules(_arg)
78
+ false
79
+ end
79
80
 
80
- def _parse_next argv
81
- first, *rest = argv
82
- if _defined_rules(first)
83
- return rest
84
- end
85
- _parse_symbolic first, rest
86
- end
81
+ def _parse_next argv
82
+ first, *rest = argv
83
+ if _defined_rules(first)
84
+ return rest
85
+ end
86
+ _parse_symbolic first, rest
87
+ end
87
88
 
88
- def _parse_symbolic first, rest
89
- case first
90
- when %r{\A:(.*)}
91
- options[$1.gsub('-','_').to_sym]=true
92
- rest
93
- when %r{(.*):\z}
94
- _parse_value $1.gsub('-', '_').to_sym, rest
95
- else
96
- _parse_syntax(first)
97
- rest
98
- end
99
- end
89
+ def _parse_symbolic first, rest
90
+ case first
91
+ when %r{\A:(.*)}
92
+ options[$1.gsub('-','_').to_sym]=true
93
+ rest
94
+ when %r{(.*):\z}
95
+ _parse_value $1.gsub('-', '_').to_sym, rest
96
+ else
97
+ _parse_syntax(first)
98
+ rest
99
+ end
100
+ end
100
101
 
101
- def _parse_syntax first
102
- args << syntaxes.find_value(first) do |(rgx, converter)|
103
- (match = rgx.match(first)) && converter.(match.captures)
104
- end
105
- end
102
+ def _parse_syntax first
103
+ args << syntaxes.find_value(first) do |(rgx, converter)|
104
+ (match = rgx.match(first)) && converter.(match.captures)
105
+ end
106
+ end
107
+
108
+ def _parse_value name, rest
109
+ value, *rest1 = rest
110
+ if value
111
+ options[name] = _convert(value, name: name)
112
+ return rest1
113
+ end
114
+ errors << [:missing_required_value, name]
115
+ []
116
+ end
106
117
 
107
- def _parse_value name, rest
108
- value, *rest1 = rest
109
- if value
110
- options[name] = _convert(value, name: name)
111
- return rest1
112
118
  end
113
- errors << [:missing_required_value, name]
114
- []
115
119
  end
116
-
117
- 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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober