argument_parser 0.1.0 → 0.1.2

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: feb0e8be78d5fc392980f1ac65520b131c34641207cc31b11d05badb7edf7fcc
4
- data.tar.gz: a74b6300dec4d61257f941e57ff93cd7106190da441d1f09da621e6025f35320
3
+ metadata.gz: eecd312b1eb1999115cf96c25726e8e10f7b7e565fb0f21788dee9b4678604ab
4
+ data.tar.gz: a40f633e72a831c0b61e4a9cd0d86044b712563f161ccce9b427a85b07fc60e5
5
5
  SHA512:
6
- metadata.gz: 9ad1572e3a661121609cfeffed61b1654bdbb94862e317944a5a1c1da9317b6315c5a6219258743275b670bb9c002ddee4188059526e1b2b55a333c34c2b1d0d
7
- data.tar.gz: 9656697885fe68d0de72bcf459796f2cf16cb85c94aff6d258ac9ad595a2ccd6f92615f0eb419f6f7068c4e47d8a080013143bf63e994e0cb8813776b85fd76f
6
+ metadata.gz: 28f476cd2f2d61fc2f96ed1b25cf99b397a076bfab0b13b758404b427f922ec418c278515f06e993d019f1edfe15ea6c0389eef63b2fdb0b61374912a09ec947
7
+ data.tar.gz: 577cf49763a1fbaff672078ac2764b37af678a35226f4d7b1401dd48dc6dc5cae0e4ec85a664c05223842558640acb533efe70dc955399a6e250b6e421e55072
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArgumentParser
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
@@ -19,18 +19,19 @@ module ArgumentParser
19
19
  in :required
20
20
  arg = argv[i]
21
21
  raise MissingArgument, "missing required argument: #{rule.name}" if arg.nil?
22
- arg = validate!(arg, rule.options)
22
+ arg = validate_pattern!(arg, rule.options)
23
23
 
24
24
  result[rule.name] = arg
25
25
  i += 1
26
26
  in :optional
27
- arg = validate!(argv[i], rule.options)
27
+ arg = validate_pattern!(argv[i], rule.options)
28
28
 
29
29
  result[rule.name] = arg || rule.options[:default]
30
30
  i += 1 if arg
31
31
  in :rest
32
32
  rest_args = argv.dup[i..] || []
33
- rest_args.map! { |it| validate!(it, rule.options) }
33
+ validate_size(rest_args, rule.options)
34
+ rest_args.map! { |it| validate_pattern!(it, rule.options) }
34
35
 
35
36
  result[rule.name] = rest_args
36
37
  i = argv.size
@@ -44,27 +45,40 @@ module ArgumentParser
44
45
 
45
46
  private
46
47
 
47
- def validate!(arg, options)
48
- coerced_arg = coerce!(arg, options)
49
- return coerced_arg unless options[:pattern]
48
+ def validate_pattern!(arg, options)
49
+ coerced_arg = coerce!(arg, options[:type])
50
+ pattern = options[:pattern]
51
+ return coerced_arg unless pattern
50
52
  return coerced_arg unless arg
51
- return coerced_arg if options[:pattern] === coerced_arg
53
+ return coerced_arg if pattern === coerced_arg
54
+ return pattern[coerced_arg] if pattern.respond_to?(:key?) && pattern.key?(coerced_arg)
55
+ return coerced_arg if pattern.respond_to?(:include?) && pattern.include?(coerced_arg)
52
56
 
53
57
  raise InvalidArgument, "invalid argument: #{arg}"
54
58
  end
55
59
 
56
- def coerce!(arg, options)
60
+ def validate_size(args, options)
61
+ if (min = options[:min])
62
+ raise InvalidArgument, "expected at least #{min} argument(s)" if args.size < min
63
+ end
64
+
65
+ if (max = options[:max])
66
+ raise InvalidArgument, "expected at most #{max} argument(s)" if args.size > max
67
+ end
68
+ end
69
+
70
+ def coerce!(arg, type)
57
71
  return arg unless arg
58
- return arg unless options[:type]
72
+ return arg unless type
59
73
 
60
- if options[:type] == Integer
74
+ if type == Integer
61
75
  Integer(arg)
62
- elsif options[:type] == Float
76
+ elsif type == Float
63
77
  Float(arg)
64
- elsif options[:type] == String
78
+ elsif type == String
65
79
  arg
66
80
  else
67
- raise SchemaError, "type not supported: #{options[:type]}"
81
+ raise SchemaError, "type not supported: #{type}"
68
82
  end
69
83
  rescue ArgumentError
70
84
  raise InvalidArgument, "invalid argument: #{arg}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argument_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matheus Richard