lab42_rgxargs 0.0.1.pre → 0.1.0.pre

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