clasp-ruby 0.19.1.1 → 0.20.0

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: 69caf746b37b7e16ba320e99323da8dd939d902d5f94c2e7d7911e872cfcbe01
4
- data.tar.gz: 5618e602950f633aa11c1ecad79edcce0fcd2edc7f8686c04a42b060b6569db9
3
+ metadata.gz: 2e7715986763c851922433b19a5b08fd761f700bf9b65dfaf74c338e105d3188
4
+ data.tar.gz: 998e0fe0365c4ca7b11d2ae29269ea5d84fbf3cb65bab70cbe590072a339250c
5
5
  SHA512:
6
- metadata.gz: 28a4e8557e601beee4f2730fe1535c8c8f6eae5911d587df17286799284ae717e2062c4f48030f6544b0a05124d8ddd82bee497a991b775e5d1d6917df845f6e
7
- data.tar.gz: 569c62d78ff95828e4af59066b6b65cf13746a58cd432f0f51ba54f4f1e082ac5e71e6dc59aeb02110b73599c08da57f0cec9c24f7eaa337cccd015bc9e11e5a
6
+ metadata.gz: ea17e88ca07b892f2e20083e63c2973eb8c3d11a66a0d02f338b57dde312e807189178cc603fd1d4965fc53189656734ea024ade3d6229c7f4c438cfa1168de9
7
+ data.tar.gz: 5ca6e41aa2757ae84a8824737aae0d0baac6654c0c7b026f7c4159d0ad2edc8766643216d1e9448f53f6a2c10f5b9759988d289d803911889c8534e4ac34a0b0
@@ -23,14 +23,14 @@ InfoLines = [
23
23
 
24
24
  'CLASP.Ruby examples',
25
25
  :version,
26
- "Illustrates use of CLASP.Ruby's use of flags, options, and specifications",
26
+ "Illustrates use of CLASP.Ruby's use of flags, options, and aliases",
27
27
  '',
28
28
  ]
29
29
 
30
30
  # Specify specifications, parse, and checking standard flags
31
31
 
32
32
  Flag_Debug = CLASP.Flag('--debug', alias: '-d', help: 'runs in Debug mode')
33
- Option_Verbosity = CLASP.Option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ])
33
+ Option_Verbosity = CLASP.Option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ], default_value: 'terse')
34
34
  Flag_Chatty = CLASP.Flag('--verbosity=chatty', alias: '-c')
35
35
 
36
36
  Specifications = [
@@ -47,7 +47,7 @@ args = CLASP::Arguments.new ARGV, Specifications
47
47
 
48
48
  if args.flags.include?(CLASP::FlagSpecification.Help)
49
49
 
50
- CLASP.show_usage(Specifications, exit_code: 0, version: ProgramVersion, stream: $stdout, info_lines: InfoLines)
50
+ CLASP.show_usage(Specifications, exit_code: 0, version: ProgramVersion, stream: $stdout, info_lines: InfoLines, default_indicator: '*default*')
51
51
  end
52
52
 
53
53
  if args.flags.include?('--version')
@@ -76,7 +76,7 @@ if (unused = args.find_first_unknown())
76
76
 
77
77
  $stderr.puts "#{args.program_name}: unrecognised flag/option: #{unused}"
78
78
 
79
- sys.exit(1)
79
+ exit 1
80
80
  end
81
81
  ```
82
82
 
@@ -129,7 +129,7 @@ flags/options:
129
129
  --verbosity=<value>
130
130
  specifies the verbosity
131
131
  where <value> one of:
132
- terse
132
+ terse *default*
133
133
  quiet
134
134
  silent
135
135
  chatty
@@ -201,3 +201,4 @@ verbosity is specified as: chatty
201
201
  Debug mode is specified
202
202
  ```
203
203
 
204
+
@@ -21,7 +21,7 @@ InfoLines = [
21
21
  # Specify specifications, parse, and checking standard flags
22
22
 
23
23
  Flag_Debug = CLASP.Flag('--debug', alias: '-d', help: 'runs in Debug mode')
24
- Option_Verbosity = CLASP.Option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ])
24
+ Option_Verbosity = CLASP.Option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ], default_value: 'terse')
25
25
  Flag_Chatty = CLASP.Flag('--verbosity=chatty', alias: '-c')
26
26
 
27
27
  Specifications = [
@@ -38,7 +38,7 @@ args = CLASP::Arguments.new ARGV, Specifications
38
38
 
39
39
  if args.flags.include?(CLASP::FlagSpecification.Help)
40
40
 
41
- CLASP.show_usage(Specifications, exit_code: 0, version: ProgramVersion, stream: $stdout, info_lines: InfoLines)
41
+ CLASP.show_usage(Specifications, exit_code: 0, version: ProgramVersion, stream: $stdout, info_lines: InfoLines, default_indicator: '*default*')
42
42
  end
43
43
 
44
44
  if args.flags.include?('--version')
@@ -140,13 +140,20 @@ class Arguments
140
140
  # should not be called directly from application code
141
141
  def initialize(arg, given_index, given_name, resolved_name, argument_spec, given_hyphens, given_label, value, extras) # :nodoc:
142
142
 
143
+ actual_value = value
144
+
145
+ if value.nil? && argument_spec
146
+
147
+ actual_value = argument_spec.default_value
148
+ end
149
+
143
150
  @arg = arg
144
151
  @given_index = given_index
145
152
  @given_name = given_name
146
153
  @argument_specification = argument_spec
147
154
  @given_hyphens = given_hyphens
148
155
  @given_label = given_label
149
- @value = value
156
+ @value = actual_value
150
157
  @name = resolved_name || given_name
151
158
  @extras = extras.nil? ? {} : extras
152
159
  end
@@ -125,6 +125,7 @@ end # module CLI_helpers_
125
125
  # - +:values+ appends this string to USAGE line if specified.
126
126
  # - +:flags_and_options+ inserts a custom string instead of the default string <tt>'[ ... flags and options ... ]'</tt>.
127
127
  # - +:info_lines+ inserts 0+ information lines prior to the usage.
128
+ # - +:default_indicator+ (String) a string placed after the matching value in the listing of an option's range of values. Defaults to "(default)". If +nil+ default is used. If empty string no indication given
128
129
  def self.show_usage specifications, options={}
129
130
 
130
131
  options ||= {}
@@ -133,10 +134,10 @@ def self.show_usage specifications, options={}
133
134
  raise TypeError, "specifications must be an array or must respond to each, reject and select" unless ::Array === specifications || (specifications.respond_to?(:each) && specifications.respond_to?(:reject) && specifications.respond_to?(:select))
134
135
 
135
136
  constants = CLI_helpers_::Constants
136
- specifications.each { |a| raise ::TypeError, "each element in specifications array must be one of the types #{constants::VALID_ALIAS_TYPES_STRING}" unless constants::VALID_ALIAS_TYPES.any? { |c| c === a } }
137
+ specifications.each { |s| raise ::TypeError, "each element in specifications array must be one of the types #{constants::VALID_ALIAS_TYPES_STRING}" unless constants::VALID_ALIAS_TYPES.any? { |c| c === s } }
137
138
 
138
139
  alias_dups = {}
139
- specifications.each { |a| a.aliases.each { |aa| warn "WARNING: alias '#{aa}' is already used for alias '#{a}'" if alias_dups.has_key? aa; alias_dups[aa] = a; } }
140
+ specifications.each { |s| s.aliases.each { |aa| warn "WARNING: alias '#{aa}' is already used for specification '#{s}'" if alias_dups.has_key? aa; alias_dups[aa] = s; } }
140
141
 
141
142
  suppress_blanks = options[:suppress_blank_lines_between_options] || ENV['SUPPRESS_BLANK_LINES_BETWEEN_OPTIONS']
142
143
 
@@ -173,28 +174,31 @@ def self.show_usage specifications, options={}
173
174
  flags_and_options = options[:flags_and_options] || ' [ ... flags and options ... ]'
174
175
  flags_and_options = " #{flags_and_options}" if !flags_and_options.empty? && ' ' != flags_and_options[0]
175
176
 
177
+ default_indicator = options[:default_indicator] || '(default)'
178
+ default_indicator = nil if default_indicator.empty?
179
+
176
180
  # sift the specifications to sort out which are value-option
177
181
  # specifications (VOAs)
178
182
 
179
183
  voas = {}
180
184
 
181
- specifications.select { |a| a.name =~ /^-+[a-zA-Z0-3_-]+[=:].+/ }.each do |a|
185
+ specifications.select { |s| s.name =~ /^-+[a-zA-Z0-3_-]+[=:].+/ }.each do |s|
182
186
 
183
- a.name =~ /^(-+[a-zA-Z0-3_-]+)[=:](.+)$/
187
+ s.name =~ /^(-+[a-zA-Z0-3_-]+)[=:](.+)$/
184
188
 
185
189
  voas[$1] = [] unless voas.has_key? $1
186
- voas[$1] << [ a, $2 ]
190
+ voas[$1] << [ s, $2 ]
187
191
  end
188
192
 
189
193
  fas = {}
190
194
 
191
- specifications.select { |a| AliasSpecification === a }.each do |a|
195
+ specifications.select { |s| AliasSpecification === s }.each do |s|
192
196
 
193
- fas[a.name] = [] unless fas.has_key? $1
194
- fas[a.name] << a
197
+ fas[s.name] = [] unless fas.has_key? $1
198
+ fas[s.name] << s
195
199
  end
196
200
 
197
- specifications = specifications.reject { |a| a.name =~ /^-+[a-zA-Z0-3_-]+[=:].+/ }
201
+ specifications = specifications.reject { |s| s.name =~ /^-+[a-zA-Z0-3_-]+[=:].+/ }
198
202
 
199
203
  info_lines.each { |info_line| stream.puts info_line } unless info_lines.empty?
200
204
 
@@ -205,40 +209,51 @@ def self.show_usage specifications, options={}
205
209
 
206
210
  stream.puts "flags/options:"
207
211
  stream.puts
208
- specifications.each do |a|
212
+ specifications.each do |s|
209
213
 
210
- case a
214
+ case s
211
215
  when AliasSpecification
212
216
 
213
217
  next
214
218
  when FlagSpecification
215
219
 
216
- if fas.has_key? a.name
220
+ if fas.has_key? s.name
217
221
 
218
- fas[a.name].each do |fa|
222
+ fas[s.name].each do |fa|
219
223
 
220
224
  fa.aliases.each { |al| stream.puts "\t#{al}" }
221
225
  end
222
226
  end
223
- a.aliases.each { |al| stream.puts "\t#{al}" }
224
- stream.puts "\t#{a.name}"
225
- stream.puts "\t\t#{a.help}"
227
+ s.aliases.each { |al| stream.puts "\t#{al}" }
228
+ stream.puts "\t#{s.name}"
229
+ stream.puts "\t\t#{s.help}"
226
230
  when OptionSpecification
227
231
 
228
- if voas.has_key? a.name
232
+ if voas.has_key? s.name
229
233
 
230
- voas[a.name].each do |ar|
234
+ voas[s.name].each do |ar|
231
235
 
232
236
  ar[0].aliases.each { |al| stream.puts "\t#{al} #{ar[0].name}" }
233
237
  end
234
238
  end
235
- a.aliases.each { |al| stream.puts "\t#{al} <value>" }
236
- stream.puts "\t#{a.name}=<value>"
237
- stream.puts "\t\t#{a.help}"
238
- unless a.values_range.empty?
239
+ s.aliases.each { |al| stream.puts "\t#{al} <value>" }
240
+ stream.puts "\t#{s.name}=<value>"
241
+ stream.puts "\t\t#{s.help}"
242
+ unless s.values_range.empty?
243
+
244
+ d = s.default_value
239
245
 
240
246
  stream.puts "\t\twhere <value> one of:"
241
- a.values_range.each { |v| stream.puts "\t\t\t#{v}" }
247
+ s.values_range.each do |v|
248
+
249
+ if default_indicator && v == d
250
+
251
+ stream.puts "\t\t\t#{v}\t#{default_indicator}"
252
+ else
253
+
254
+ stream.puts "\t\t\t#{v}"
255
+ end
256
+ end
242
257
  end
243
258
  end
244
259
  stream.puts unless suppress_blanks
@@ -276,7 +291,7 @@ def self.show_version specifications, options = {}
276
291
  raise TypeError, "specifications must be an array or must respond to each, reject and select" unless ::Array === specifications || (specifications.respond_to?(:each) && specifications.respond_to?(:reject) && specifications.respond_to?(:select))
277
292
 
278
293
  constants = CLI_helpers_::Constants
279
- specifications.each { |a| raise ::TypeError, "each element in specifications array must be one of the types #{constants::VALID_ALIAS_TYPES_STRING}" unless constants::VALID_ALIAS_TYPES.any? { |c| c === a } }
294
+ specifications.each { |s| raise ::TypeError, "each element in specifications array must be one of the types #{constants::VALID_ALIAS_TYPES_STRING}" unless constants::VALID_ALIAS_TYPES.any? { |c| c === s } }
280
295
 
281
296
  stream = options[:stream] || $stdout
282
297
 
@@ -165,7 +165,7 @@ class OptionSpecification
165
165
  # - +aliases+ (+Array+) 0 or more strings specifying short-form or option-value aliases
166
166
  # - +help+ (+String+) The help string, which may be +nil+
167
167
  # - +values_range+ (+Array+) 0 or more strings specifying values supported by the option
168
- # - +default_value+ (+String+) The default value of the option. May be +nil+
168
+ # - +default_value+ (+String+) The default value of the option, which will be used in the case where an option is specified without a value. May be +nil+
169
169
  # - +required+ (boolean) Whether the option is required. May be +nil+
170
170
  # - +required_message+ (::String) Message to be used when reporting that a required option is missing. May be +nil+ in which case a message of the form "<option-name> not specified; use --help for usage". If begins with the nul character ("\0"), then is used in the place of the <option-name> and placed into the rest of the standard form message
171
171
  # - +extras+ An application-defined additional parameter. If +nil+, it is assigned an empty +Hash+
@@ -51,7 +51,7 @@
51
51
  module CLASP
52
52
 
53
53
  # Current version of the CLASP.Ruby library
54
- VERSION = '0.19.1.1'
54
+ VERSION = '0.20.0'
55
55
 
56
56
  private
57
57
  VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
@@ -0,0 +1,133 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
4
+
5
+ require 'clasp'
6
+
7
+ require 'test/unit'
8
+
9
+ require 'xqsr3/extensions/test/unit'
10
+
11
+ class Test_DefaultValue < Test::Unit::TestCase
12
+
13
+ def test_long_form_without_default
14
+
15
+ specifications = [
16
+
17
+ CLASP.Option('--verbosity', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
18
+ ]
19
+
20
+ argv = [ '--verbosity' ]
21
+ args = CLASP::Arguments.new(argv, specifications)
22
+
23
+ assert_equal 0, args.flags.size
24
+ assert_equal 1, args.options.size
25
+ assert_equal 0, args.values.size
26
+
27
+ option0 = args.options[0]
28
+
29
+ assert_equal '--verbosity', option0.name
30
+ assert_nil option0.value
31
+ end
32
+
33
+ def test_long_form_with_default
34
+
35
+ specifications = [
36
+
37
+ CLASP.Option('--verbosity', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
38
+ ]
39
+
40
+ argv = [ '--verbosity' ]
41
+ args = CLASP::Arguments.new(argv, specifications)
42
+
43
+ assert_equal 0, args.flags.size
44
+ assert_equal 1, args.options.size
45
+ assert_equal 0, args.values.size
46
+
47
+ option0 = args.options[0]
48
+
49
+ assert_equal '--verbosity', option0.name
50
+ assert_equal 'normal', option0.value
51
+ end
52
+
53
+ def test_short_form_without_default
54
+
55
+ specifications = [
56
+
57
+ CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
58
+ ]
59
+
60
+ argv = [ '-v' ]
61
+ args = CLASP::Arguments.new(argv, specifications)
62
+
63
+ assert_equal 0, args.flags.size
64
+ assert_equal 1, args.options.size
65
+ assert_equal 0, args.values.size
66
+
67
+ option0 = args.options[0]
68
+
69
+ assert_equal '--verbosity', option0.name
70
+ assert_nil option0.value
71
+ end
72
+
73
+ def test_short_form_with_default
74
+
75
+ specifications = [
76
+
77
+ CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
78
+ ]
79
+
80
+ argv = [ '-v' ]
81
+ args = CLASP::Arguments.new(argv, specifications)
82
+
83
+ assert_equal 0, args.flags.size
84
+ assert_equal 1, args.options.size
85
+ assert_equal 0, args.values.size
86
+
87
+ option0 = args.options[0]
88
+
89
+ assert_equal '--verbosity', option0.name
90
+ assert_equal 'normal', option0.value
91
+ end
92
+
93
+ def test_short_form_without_default_and_separator
94
+
95
+ specifications = [
96
+
97
+ CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
98
+ ]
99
+
100
+ argv = [ '-v', '--', 'some-value' ]
101
+ args = CLASP::Arguments.new(argv, specifications)
102
+
103
+ assert_equal 0, args.flags.size
104
+ assert_equal 1, args.options.size
105
+ assert_equal 1, args.values.size
106
+
107
+ option0 = args.options[0]
108
+
109
+ assert_equal '--verbosity', option0.name
110
+ assert_nil option0.value
111
+ end
112
+
113
+ def test_short_form_with_default_and_separator
114
+
115
+ specifications = [
116
+
117
+ CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
118
+ ]
119
+
120
+ argv = [ '-v', '--', 'some-value' ]
121
+ args = CLASP::Arguments.new(argv, specifications)
122
+
123
+ assert_equal 0, args.flags.size
124
+ assert_equal 1, args.options.size
125
+ assert_equal 1, args.values.size
126
+
127
+ option0 = args.options[0]
128
+
129
+ assert_equal '--verbosity', option0.name
130
+ assert_equal 'normal', option0.value
131
+ end
132
+ end
133
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clasp-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.1.1
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Wilson
@@ -60,6 +60,7 @@ files:
60
60
  - test/unit/tc_arguments_3.rb
61
61
  - test/unit/tc_arguments_inspect.rb
62
62
  - test/unit/tc_cli.rb
63
+ - test/unit/tc_default_value.rb
63
64
  - test/unit/tc_defaults_1.rb
64
65
  - test/unit/tc_examples_Arguments.rb
65
66
  - test/unit/tc_extras.rb