lab42_rgxargs 0.0.1.pre → 0.1.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lab42/rgxargs/predefined_matchers.rb +14 -0
- data/lib/lab42/rgxargs.rb +18 -8
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00f0a79cda8803391dd5e2f9e21cdc06c7032be12741542b1d715bd044623182
|
4
|
+
data.tar.gz: 47ad2d322cdd22197b63378d76097523544f7f141077d44d5e1127884b73e042
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acf4d6f1e22bae17cfe89070e4a5a3e58650838d24e99545b75ab9c06c7b04fffeb3eecdcdbc131337a2324c0ac297ae16ac56c8d46adf85224ab92a42977fe5
|
7
|
+
data.tar.gz: bea5ef2c6b7d4d48645b6affd40716b5e14f57afc98ecc4d5fca045e530ae0ca52bfbf1148f763a0af97b069acd4c968f7dae83ac7f4e97bfe0e8b8637b4d251
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Lab42::Rgxargs::PredefinedMatchers extend self
|
2
|
+
PREDEFINED = {
|
3
|
+
list: [%r{(\w+)(?:,(\w+))*}, ->(groups){ groups }],
|
4
|
+
range: [%r{\A(\d+)\.\.(\d+)\z}, ->(groups){ Range.new(*groups.map(&:to_i)) }]
|
5
|
+
}
|
6
|
+
|
7
|
+
def defined_names
|
8
|
+
@__defined_names__ ||= PREDEFINED.keys.join("\n\t")
|
9
|
+
end
|
10
|
+
def fetch(key, default=nil, &blk)
|
11
|
+
return PREDEFINED[key] if PREDEFINED.has_key?(key)
|
12
|
+
blk ? blk.(key) : default
|
13
|
+
end
|
14
|
+
end
|
data/lib/lab42/rgxargs.rb
CHANGED
@@ -1,25 +1,28 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'lab42/enumerable'
|
3
3
|
class Lab42::Rgxargs
|
4
|
-
|
5
|
-
|
6
|
-
range: [%r{\A(\d+)\.\.(\d+)\z}, ->(groups){ Range.new(*groups.map(&:to_i)) }]
|
7
|
-
}
|
4
|
+
require_relative 'rgxargs/predefined_matchers'
|
5
|
+
Predefined = PredefinedMatchers
|
8
6
|
|
9
7
|
attr_reader :args, :conversions, :defined_rules, :errors, :options, :syntaxes
|
10
8
|
|
11
9
|
def add_conversion(param, conversion)
|
12
|
-
|
10
|
+
case conversion
|
11
|
+
when Symbol
|
12
|
+
conversions[param] = Predefined.fetch(conversion, conversion)
|
13
|
+
else
|
14
|
+
conversions[param] = conversion
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
def add_syntax(rgx, parser=nil)
|
16
19
|
if parser
|
17
20
|
syntaxes << [rgx, parser]
|
18
21
|
else
|
19
|
-
if
|
20
|
-
syntaxes <<
|
22
|
+
if predef = Predefined.fetch(rgx)
|
23
|
+
syntaxes << predef
|
21
24
|
else
|
22
|
-
raise ArgumentError, "#{rgx} is not a predefined syntax, use one of the following:\n\t#{
|
25
|
+
raise ArgumentError, "#{rgx} is not a predefined syntax, use one of the following:\n\t#{Predefined.defined_names}"
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
@@ -53,6 +56,13 @@ class Lab42::Rgxargs
|
|
53
56
|
value.send conv
|
54
57
|
when Proc
|
55
58
|
conv.(value)
|
59
|
+
when Array
|
60
|
+
if (match = conv.first.match(value))
|
61
|
+
conv.last.(match.captures)
|
62
|
+
else
|
63
|
+
errors << [:syntax_error, name, "#{value} does not match #{conv.first}"]
|
64
|
+
nil
|
65
|
+
end
|
56
66
|
else
|
57
67
|
value
|
58
68
|
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.0.
|
4
|
+
version: 0.1.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
@@ -46,6 +46,7 @@ extra_rdoc_files: []
|
|
46
46
|
files:
|
47
47
|
- lib/lab42/enumerable.rb
|
48
48
|
- lib/lab42/rgxargs.rb
|
49
|
+
- lib/lab42/rgxargs/predefined_matchers.rb
|
49
50
|
homepage: https://github.com/robertdober/lab42_rgxargs
|
50
51
|
licenses:
|
51
52
|
- Apache-2.0
|