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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8e40069cd0f641fbe3813892a34648656d0d5316f1100ad46f5a8edf7712efe
4
- data.tar.gz: 4b2cd38e43a2329c163f7ace5d0aa1ab4e40f6375408637ee650fc6d862756a8
3
+ metadata.gz: 00f0a79cda8803391dd5e2f9e21cdc06c7032be12741542b1d715bd044623182
4
+ data.tar.gz: 47ad2d322cdd22197b63378d76097523544f7f141077d44d5e1127884b73e042
5
5
  SHA512:
6
- metadata.gz: a087544804de877921e4080f965edc1c78af408401f29f2b3465e7e3ceeaa3b0b470d3cc2b5bc25489a7010f6dbf5ce1f849c333797c7559ff9a03c9a672ec1e
7
- data.tar.gz: ac73504757f56373a57e2e3bb2218e7060b797bf2b39421f3f41e22a2af8585d7a4e9ee373d5bf58b990916cd1c9a1d0aeda7d758ecd49a8760c6643fa16b1c7
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
- PREDEFINED = {
5
- list: [%r{(\w+)(?:,(\w+))*}, ->(groups){ groups }],
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
- conversions[param] = conversion
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 PREDEFINED[rgx]
20
- syntaxes << PREDEFINED[rgx]
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#{PREDEFINED.keys.join("\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.1.pre
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