simple_command_line_parser 0.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/simple_command_line_parser.rb +78 -38
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fdb8a4c6de0e6a5c6789dd66f4e81bd72c9cd31
|
4
|
+
data.tar.gz: 69fa6a11bbc7471f54ae4b12186c1edea19b7fd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2e70774b3b6b3a7ab88d77dd0fdf4b8e5db8ac69a8e8fe81713d2026d7c68b1f984dde4ca29203f8957536a581749d4d1313c5e08aceb8c31f3afd54e46a2bb
|
7
|
+
data.tar.gz: 4c24163caee8a128b6cb403254a87578ca8c347cb836ebc9f3dc3f2112f63bf48b456557c6030ccc4a35db70c17025cfd5363df5a1a7176de1cef241e637e28f
|
@@ -2,14 +2,17 @@
|
|
2
2
|
module BlackStack
|
3
3
|
|
4
4
|
class SimpleCommandLineParser
|
5
|
+
YES = 'yes'
|
6
|
+
NO = 'no'
|
7
|
+
|
5
8
|
STRING = 0
|
6
9
|
INT = 1
|
7
10
|
BOOL = 2
|
8
|
-
BOOL_VALUES = [
|
11
|
+
BOOL_VALUES = [BlackStack::SimpleCommandLineParser::YES, BlackStack::SimpleCommandLineParser::NO]
|
9
12
|
|
10
13
|
attr_accessor :args, :conf, :desc
|
11
14
|
|
12
|
-
#
|
15
|
+
# List tha possible values for the :type param in the h configuration.
|
13
16
|
# Example: h = [{:name=>'w', :mandatory=>true, :description=>"Worker Name", :type=>BlackStack::CommandLineParser::STRING}]
|
14
17
|
def self.types()
|
15
18
|
[
|
@@ -18,20 +21,28 @@ module BlackStack
|
|
18
21
|
BlackStack::SimpleCommandLineParser::BOOL
|
19
22
|
]
|
20
23
|
end
|
24
|
+
|
25
|
+
# List tha possible values for the :type param in the h configuration.
|
26
|
+
# Example: h = [{:name=>'w', :mandatory=>true, :description=>"Worker Name", :type=>BlackStack::CommandLineParser::STRING}]
|
27
|
+
def self.type_name(n)
|
28
|
+
return 'string' if n == BlackStack::SimpleCommandLineParser::STRING
|
29
|
+
return 'integer' if n == BlackStack::SimpleCommandLineParser::INT
|
30
|
+
return 'boolean' if n == BlackStack::SimpleCommandLineParser::BOOL
|
31
|
+
end
|
21
32
|
|
22
33
|
# possible values for the bool parameters in the command line
|
23
34
|
def self.bool_values()
|
24
35
|
BlackStack::SimpleCommandLineParser::BOOL_VALUES
|
25
36
|
end
|
26
37
|
|
27
|
-
#
|
38
|
+
# Will raise an exception if argv parameters does not meet with the configuration specification.
|
28
39
|
def self.validate_arguments(argv)
|
29
40
|
# validate configuration format
|
30
41
|
raise "Array of strings expected in the argv parameter." if !argv.kind_of?(Array)
|
31
42
|
argv.each { |x| raise "Array of strings expected in the argv parameter." if !x.kind_of?(String) }
|
32
43
|
end
|
33
44
|
|
34
|
-
#
|
45
|
+
# Will raise an exception if the h configuration does not meet with the configuration specification.
|
35
46
|
def self.validate_configuration(h)
|
36
47
|
raise "Array of strings expected in the h parameter." if !h.kind_of?(Array)
|
37
48
|
h.each { |x| raise "Array of hashes expected in the h parameter." if !x.kind_of?(Hash) }
|
@@ -40,32 +51,49 @@ module BlackStack
|
|
40
51
|
raise "A :mandatory key expected in all the params specification." if !x.key?(:mandatory)
|
41
52
|
raise "A :description key expected in all the params specification." if !x.key?(:description)
|
42
53
|
raise "A :type key expected in all the params specification." if !x.key?(:type)
|
54
|
+
raise "A :default key expected if the param is not mandatory." if ( x[:mandatory]==false && !x.key?(:default) )
|
55
|
+
|
43
56
|
raise "String expected in the value of the :name parameter." if !x[:name].kind_of?(String)
|
44
57
|
raise "String expected in the value of the :mandatory parameter." if (x[:mandatory]!=true && x[:mandatory]!=false)
|
45
58
|
raise "String expected in the value of the :description parameter." if !x[:description].kind_of?(String)
|
46
59
|
raise "Invalid code in the :type parameter." if !self.types.include?(x[:type])
|
47
|
-
|
60
|
+
|
61
|
+
# if the :default key exists, it must match with the type
|
62
|
+
if x.key?(:default)
|
63
|
+
raise "Type mismatch for the default value of #{x[:name]}." if x[:type]==SimpleCommandLineParser::STRING && x[:default].to_s.size==0
|
64
|
+
raise "Type mismatch for the default value of #{x[:name]}." if x[:type]==SimpleCommandLineParser::INT && x[:default].to_s!=x[:default].to_i.to_s
|
65
|
+
raise "Type mismatch for the default value of #{x[:name]}." if x[:type]==SimpleCommandLineParser::BOOL && x[:default]!=true && x[:default]!=false
|
66
|
+
end
|
67
|
+
}
|
48
68
|
end # validate_configuration
|
49
69
|
|
50
|
-
#
|
70
|
+
# Returns an array of hashes (args) frm the array of string (argv).
|
51
71
|
# Example of the argv array: ['w=worker01', 'd=euler']
|
52
72
|
# Example of the args array: [{'w'=>'worker01'}, {'d'=>'euler'}]
|
53
73
|
def self.parse_argumnts(argv)
|
54
74
|
Hash[ argv.flat_map{|s| s.scan(/([^=\s]+)(?:=(\S+))?/) } ]
|
55
75
|
end
|
56
76
|
|
57
|
-
#
|
77
|
+
# Will raise an exception if the argv array does not match with the h configuration
|
58
78
|
def self.validate_values(argv, h)
|
59
79
|
argc = SimpleCommandLineParser.parse_argumnts(argv)
|
60
80
|
h.each { |x|
|
61
|
-
|
62
|
-
|
81
|
+
if ( x[:mandatory] == true || argc[x[:name]].to_s.size>0 )
|
82
|
+
# if the parameter is mandatory, it must exist in the argc array
|
83
|
+
raise "Command line parameter #{x[:name]} expected." if ( x[:mandatory]==true && !argc.key?(x[:name]) )
|
84
|
+
|
85
|
+
# if the parmaeter exists, it must match with the type
|
86
|
+
raise "Type mismatch for the command line parameter #{x[:name]}." if x[:type]==SimpleCommandLineParser::STRING && argc[x[:name]].to_s.size==0
|
87
|
+
raise "Type mismatch for the command line parameter #{x[:name]}." if x[:type]==SimpleCommandLineParser::INT && argc[x[:name]].to_s!=argc[x[:name]].to_i.to_s
|
88
|
+
raise "Type mismatch for the command line parameter #{x[:name]}." if x[:type]==SimpleCommandLineParser::BOOL && !SimpleCommandLineParser::bool_values.include?(argc[x[:name]].to_s)
|
89
|
+
end # if
|
90
|
+
} # h.reach
|
91
|
+
end
|
63
92
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
}
|
93
|
+
# Return true if the name of anyone of the parameters is 'h', 'help' or '?'.
|
94
|
+
# Otherwise return false.
|
95
|
+
def asking_help?()
|
96
|
+
( key?('h')==true || key?('help')==true || key?('?')==true )
|
69
97
|
end
|
70
98
|
|
71
99
|
# argv: Array of strings. It is usually the command line parameters.
|
@@ -91,45 +119,57 @@ module BlackStack
|
|
91
119
|
self.desc = x[:description]
|
92
120
|
|
93
121
|
end # def set_conf
|
94
|
-
|
122
|
+
|
123
|
+
# write a full documentation of the command in the standard output
|
124
|
+
def print_help()
|
125
|
+
puts self.desc
|
126
|
+
puts "Parameters:"
|
127
|
+
self.conf.each { |y|
|
128
|
+
print "#{y[:name]}"
|
129
|
+
print " (#{BlackStack::SimpleCommandLineParser.type_name(y[:type])}. optional)" if !y[:mandatory]
|
130
|
+
print " (#{BlackStack::SimpleCommandLineParser.type_name(y[:type])})" if !y[:mandatory]
|
131
|
+
print ": "
|
132
|
+
print y[:description]
|
133
|
+
puts ""
|
134
|
+
puts ""
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
95
138
|
# Unlike the set_conf method, this constructor will use the ARGV constant as the array of command line arguments.
|
96
139
|
# This constructor will simply call the set_conf method.
|
97
140
|
# h: Array of hashes. Parser configuration.
|
98
141
|
# Example: h = [{:name=>'w', :mandatory=>true, :description=>"Worker Name", :type=>BlackStack::CommandLineParser::STRING}]
|
99
142
|
def initialize(x)
|
100
143
|
self.set_conf(ARGV, x)
|
144
|
+
self.print_help if self.asking_help?
|
101
145
|
end # initialize
|
102
146
|
|
147
|
+
# Return true if the name of anyone of the parameters is equel to the k parameter.
|
148
|
+
# Otherwise return false.
|
103
149
|
def key?(k)
|
104
150
|
self.args.key?(k)
|
105
151
|
end
|
106
152
|
|
153
|
+
# Returns a string, and int, or a bool type value; depending in the type configuration of the param.
|
154
|
+
# If the type value is unknown, it will returns nil.
|
107
155
|
def value(k)
|
108
|
-
self.args[k]
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
156
|
+
h = self.args[k]
|
157
|
+
i = self.conf.select {|j| j[:name]==k}.first
|
158
|
+
raise "Unknown name of paraeter." if i.nil?
|
159
|
+
if !h.nil?
|
160
|
+
return h.to_s if i[:type] == BlackStack::SimpleCommandLineParser::STRING
|
161
|
+
return h.to_i if i[:type] == BlackStack::SimpleCommandLineParser::INT
|
162
|
+
return true if ( h == BlackStack::SimpleCommandLineParser::YES && i[:type] == BlackStack::SimpleCommandLineParser::BOOL )
|
163
|
+
return false if ( h == BlackStack::SimpleCommandLineParser::NO && i[:type] == BlackStack::SimpleCommandLineParser::BOOL )
|
164
|
+
else
|
165
|
+
return i[:default].to_s if i[:type] == BlackStack::SimpleCommandLineParser::STRING
|
166
|
+
return i[:default].to_i if i[:type] == BlackStack::SimpleCommandLineParser::INT
|
167
|
+
return true if ( i[:default] == true && i[:type] == BlackStack::SimpleCommandLineParser::BOOL )
|
168
|
+
return false if ( i[:default] == false && i[:type] == BlackStack::SimpleCommandLineParser::BOOL )
|
121
169
|
end
|
122
|
-
|
123
|
-
# TODO: si se pasa el comando w, entonces no se debepasar el comando d
|
124
|
-
|
125
|
-
# TODO: si se pasa el comando w, entonces r debe ser "parent"
|
126
|
-
|
127
|
-
# TODO: si se pasa el comando d, entonces no se debepasar el comando w
|
128
|
-
|
129
|
-
# TODO: si se pasa el comando d, entonces r debe ser "child"
|
130
|
-
|
170
|
+
return nil
|
131
171
|
end
|
132
|
-
|
172
|
+
|
133
173
|
def appUrl()
|
134
174
|
division_name = self.value("d")
|
135
175
|
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_command_line_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Daniel Sardi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
13
|
+
description: 'Find documentation here: https://github.com/leandrosardi/simple_command_line_parser.'
|
14
14
|
email: leandro.sardi@expandedventure.com
|
15
15
|
executables: []
|
16
16
|
extensions: []
|