argser 1.3 → 1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -40,7 +40,8 @@ Argser::Parser.new({
40
40
  - <code>:required</code>, a boolean value indicating if this parameter is required or not
41
41
  - <code>:sanitize</code>, a function to sanitize the value given (return the identifier of a message to show it or the sanitized value the parser should save)
42
42
  - <code>:callback</code>, a function to call to do something with the parameter
43
- - <code>:messages</code> A hash with all available messages to show where the key is used as an identifier (:help, :type and :required are created by default)
43
+ - <code>:help</code>, a string with the message to print as the help for this parameter
44
+ - <code>:messages</code> A hash with all available messages to show where the key is used as an identifier (:type and :required are created by default)
44
45
 
45
46
  ## REMAINING ARRAY OPTIONS
46
47
 
@@ -50,7 +51,8 @@ Argser::Parser.new({
50
51
  - <code>:maximum</code>, maximum number of strings allowed
51
52
  - <code>:sanitize</code>, a function to sanitize the value given (return the identifier of a message to show it or the sanitized value the parser should save)
52
53
  - <code>:callback</code>, a function to call to do something with the parameter
53
- - <code>:messages</code>, hash with all available messages to show where the key is used as an identifier (:help, :type and :required are created by default)
54
+ - <code>:help</code>, a string with the message to print as the help for the remaining strings
55
+ - <code>:messages</code>, hash with all available messages to show where the key is used as an identifier (:type and :required are created by default)
54
56
 
55
57
  ## AVAILABLE TYPES
56
58
 
@@ -1,4 +1,4 @@
1
- require 'argser'
1
+ require '../lib/argser/parser.rb'
2
2
 
3
3
  parser = Argser::Parser.new({
4
4
  options: {
@@ -16,8 +16,8 @@ parser = Argser::Parser.new({
16
16
  default: 18,
17
17
  type: :integer,
18
18
  sanitize: lambda {|value, default| (value >= 18) ? value : :young},
19
+ help: "Specify your age",
19
20
  messages: {
20
- help: "Specify your age",
21
21
  type: "I can't believe you're '$v' years old",
22
22
  young: "You can't use this application unless you're older than 18!"
23
23
  }
@@ -28,8 +28,8 @@ parser = Argser::Parser.new({
28
28
  minimum: 1,
29
29
  maximum: 1,
30
30
  callback: lambda {|values, default| puts "Alright, I got your name!"},
31
+ help: "Specify your name and surname",
31
32
  messages: {
32
- help: "Specify your name and surname",
33
33
  type: "What!? Your name is '$v'!?"
34
34
  }
35
35
  }
@@ -42,7 +42,8 @@ if (parser.param? :age)
42
42
  comment = case parser.param(:age)
43
43
  when 18..20 then "you're a teenager!"
44
44
  when 21..30 then "you're a young man!"
45
- when 30..99 then "you're a little adult!"
45
+ when 30..99 then "you're an adult!"
46
+ when 100..1.0/0.0 then "you're awesome!"
46
47
  end
47
48
  else
48
49
  comment = 'how old are you?'
data/lib/argser/parser.rb CHANGED
@@ -37,7 +37,7 @@ module Argser
37
37
  if (arg =~ /^--?\w+$/)
38
38
  arg = arg.downcase
39
39
 
40
- raise_message(@options[:unknown], arg) unless @tokens.has_key? arg
40
+ raise_error(@options[:unknown], arg) unless @tokens.has_key? arg
41
41
  param = @params[@tokens[arg]]
42
42
  param[:given] = arg
43
43
  if (@params[@tokens[arg]][:type] != :boolean)
@@ -60,13 +60,13 @@ module Argser
60
60
 
61
61
  #Iterate over all parameters and process their values
62
62
  @params.each do |token, param|
63
- raise_message(param[:messages][:required], "--#{param[:token].to_s}") unless param?(token) or !param[:required]
63
+ raise_error(param[:messages][:required], "--#{param[:token].to_s}") unless param?(token) or !param[:required]
64
64
  validate_param(param)
65
65
  sanitize(param)
66
66
  end
67
67
 
68
68
  #Process the value of the remaining array
69
- raise_message(@remaining[:messages][:required]) unless (@remaining[:minimum] <= remaining?) and (remaining? <= @remaining[:maximum])
69
+ raise_error(@remaining[:messages][:required]) unless (@remaining[:minimum] <= remaining?) and (remaining? <= @remaining[:maximum])
70
70
  validate_remaining()
71
71
  sanitize(@remaining)
72
72
 
@@ -116,16 +116,16 @@ module Argser
116
116
  @params.each do |token, param|
117
117
  token = "--#{token.to_s}"
118
118
  shortcut = (param[:shortcut].is_a? Symbol) ? "-#{param[:shortcut]}" : ''
119
- help = param[:messages][:help]
119
+ help = param[:help]
120
120
  puts " #{shortcut.ljust(5, ' ')}#{token.ljust(20, ' ')}#{help}"
121
121
  end
122
- puts "\n#{25.times {puts ' '}}#{@remaining[:help]}" unless @remaining[:help].empty?
122
+ puts "\n #{''.ljust(25, ' ')}#{@remaining[:help]}" unless @remaining[:help].empty?
123
123
  puts "\n#{@options[:details]}" unless @options[:details].empty?
124
124
  exit
125
125
  end
126
126
 
127
127
  #Raise an error message
128
- def raise_message(message, token='', value='')
128
+ def raise_error(message, token='', value='')
129
129
  raise ParserError.new(message || @options[:fatal], token, value)
130
130
  end
131
131
 
@@ -160,6 +160,7 @@ module Argser
160
160
  # :required A boolean value indicating if this parameter is required or not
161
161
  # :sanitize A function to sanitize the value given (return the identifier of a message to show it or the sanitized value the parser should save)
162
162
  # :callback A function to call to do something with the parameter
163
+ # :help A string with the message to print as the help for this parameter
163
164
  # :messages A hash with all available messages to show where the key is used as an identifier (:help, :type and :required are created by default)
164
165
 
165
166
  #Save all parameters the parser should recognize
@@ -170,9 +171,8 @@ module Argser
170
171
  shortcut: :h,
171
172
  type: :boolean,
172
173
  default: false,
173
- messages: {
174
- help: 'Display this help and exit'
175
- }
174
+ help: 'Display this help and exit',
175
+ messages: {}
176
176
  }
177
177
  end
178
178
 
@@ -185,6 +185,7 @@ module Argser
185
185
  required: false,
186
186
  sanitize: lambda {|value, default| value},
187
187
  callback: lambda {|value, default|},
188
+ help: "",
188
189
  messages: {}
189
190
  }.merge param
190
191
 
@@ -192,9 +193,8 @@ module Argser
192
193
  @params[token][:value] = @params[token][:default]
193
194
  @params[token][:given] = false
194
195
 
195
- #Save messages, make sure :help, :type and :required is available
196
+ #Save messages, make sure :type and :required is available
196
197
  @params[token][:messages] = {
197
- help: "",
198
198
  type: "ERROR: Invalid value '$v' for parameter '$p'",
199
199
  required: "ERROR: Parameter '$p' is required"
200
200
  }.merge @params[token][:messages]
@@ -216,26 +216,27 @@ module Argser
216
216
  # :maximum Maximum number of strings allowed (default: Infinity)
217
217
  # :sanitize A function to sanitize the value given (return the identifier of a message to show it or the sanitized value the parser should save)
218
218
  # :callback A function to call to do something with the parameter
219
- # :messages A hash with all available messages to show where the key is used as an identifier (:help, :type and :required are created by default)
219
+ # :help A string with the message to print as the help for the remaining strings
220
+ # :messages A hash with all available messages to show where the key is used as an identifier (:type and :required are created by default)
220
221
 
221
222
  #Save options for remaining strings
222
223
  def init_remaining(remaining={})
223
224
  @remaining = {
224
225
  type: :string,
225
226
  default: [],
226
- minimum: 0,
227
- maximum: Float::INFINITY,
227
+ minimum: 0,
228
+ maximum: Float::INFINITY,
228
229
  sanitize: lambda {|value, default| value},
229
230
  callback: lambda {|value, default|},
231
+ help: "",
230
232
  messages: {}
231
233
  }.merge remaining
232
234
 
233
235
  @remaining[:value] = @remaining[:default]
234
236
  @remaining[:given] = 0
235
237
 
236
- #Save messages, make sure :help, :type and :required is available
238
+ #Save messages, make sure, :type and :required is available
237
239
  @remaining[:messages] = {
238
- help: "",
239
240
  type: "ERROR: Invalid value '$v'",
240
241
  required: "ERROR: Incorrect number of remaining arguments"
241
242
  }.merge @remaining[:messages]
@@ -246,11 +247,11 @@ module Argser
246
247
  #If the type is a symbol, it must be a valid type
247
248
  if (param[:type].is_a? Symbol)
248
249
  type = TYPES[param[:type]]
249
- raise_message(param[:messages][:type], param[:token], param[:value]) if (param[:given]) and (param[:value].is_a? String) and !(match = type[0].match param[:value])
250
+ raise_error(param[:messages][:type], param[:token], param[:value]) if (param[:given]) and (param[:value].is_a? String) and !(match = type[0].match param[:value])
250
251
  #Convert value to the correct type
251
252
  param[:value] = type[1].call(param[:value], match, !param[:given])
252
253
  else #Otherwise it must be a regexp and the value must match
253
- raise_message(param[:messages][:type], param[:token], param[:value]) unless param[:value] =~ param[:type]
254
+ raise_error(param[:messages][:type], param[:token], param[:value]) unless param[:value] =~ param[:type]
254
255
  end
255
256
  end
256
257
 
@@ -260,13 +261,13 @@ module Argser
260
261
  if (@remaining[:type].is_a? Symbol)
261
262
  type = TYPES[@remaining[:type]]
262
263
  @remaining[:value].each_with_index do |value, i|
263
- raise_message(@remaining[:messages][:type], @remaining[:token], value) unless (@remaining[:given] == 0) or (match = type[0].match value)
264
+ raise_error(@remaining[:messages][:type], @remaining[:token], value) unless (@remaining[:given] == 0) or (match = type[0].match value)
264
265
  #Convert value to the correct type
265
266
  @remaining[:value][i] = type[1].call(value, match, @remaining[:given] == 0)
266
267
  end
267
268
  else #Otherwise it must be a regexp and the values must match
268
269
  @remaining[:value].each do |value|
269
- raise_message(@remaining[:messages][:type], @remaining[:token], value) unless value =~ @remaining[:type]
270
+ raise_error(@remaining[:messages][:type], @remaining[:token], value) unless value =~ @remaining[:type]
270
271
  end
271
272
  end
272
273
  end
@@ -274,7 +275,7 @@ module Argser
274
275
  #Sanitize the value of the parameter, if a symbol is returned the associated message is shown
275
276
  def sanitize(param)
276
277
  value = param[:sanitize].call(param[:value], !param[:given])
277
- raise_message(param[:messages][value], param[:token], param[:value]) if value.is_a? Symbol
278
+ raise_error(param[:messages][value], param[:token], param[:value]) if value.is_a? Symbol
278
279
  #Update the value
279
280
  param[:value] = value
280
281
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argser
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.3'
4
+ version: '1.4'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: