everyday-cli-utils 1.5.2 → 1.6.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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0681993f800f4e74b8c294475c3ab23daeaed47b
|
4
|
+
data.tar.gz: 88e392ad10471b71a496797a2dc07feb887e4a52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 333e611ce51e61d7299da6f573d1a8f9ff83a30c9da2a98b3bb0e9f91c73e389687522a0e1b74d602dcab6f4b43dd262c04663612426b72e13c49e013beb8d4e
|
7
|
+
data.tar.gz: 64bc0c10b336847de4ea2b87377dd62c48d611a435e693aa563d5cd1c53380a7e792f5ca789b56a4359b4c1901259cbf200b435c0a594582e0c91947dcf9f477
|
@@ -96,10 +96,11 @@ module EverydayCliUtils
|
|
96
96
|
end
|
97
97
|
|
98
98
|
class OptionDef
|
99
|
-
attr_reader :value
|
99
|
+
attr_reader :value, :names
|
100
100
|
|
101
|
-
def initialize(type, settings = {}, &block)
|
101
|
+
def initialize(type, names, settings = {}, &block)
|
102
102
|
@type = type
|
103
|
+
@names = names
|
103
104
|
@settings = settings
|
104
105
|
@block = block
|
105
106
|
@value = OptionTypes.default_value(type, settings)
|
@@ -129,7 +130,7 @@ module EverydayCliUtils
|
|
129
130
|
def self.register(opts, options, type, opt_name, names, settings = {}, default_settings = {}, &block)
|
130
131
|
settings = settings.clone
|
131
132
|
default_settings.each { |v| settings[v[0]] = v[1] unless settings.has_key?(v[0]) }
|
132
|
-
opt = OptionDef.new(type, settings, &block)
|
133
|
+
opt = OptionDef.new(type, names.clone, settings, &block)
|
133
134
|
options[opt_name] = opt
|
134
135
|
names = OptionTypes.mod_names(type, names, settings)
|
135
136
|
opts.on(*names) { |*args|
|
@@ -187,6 +188,52 @@ module EverydayCliUtils
|
|
187
188
|
def parse!(argv = ARGV)
|
188
189
|
@opts.parse!(argv)
|
189
190
|
end
|
191
|
+
|
192
|
+
def show_defaults
|
193
|
+
script_defaults = composite
|
194
|
+
global_defaults = composite(:global)
|
195
|
+
local_defaults = composite(:global, :local)
|
196
|
+
global_diff = hash_diff(global_defaults, script_defaults)
|
197
|
+
local_diff = hash_diff(local_defaults, global_defaults)
|
198
|
+
str = "Script Defaults:\n#{options_to_str(script_defaults)}\n"
|
199
|
+
str << "Script + Global Defaults:\n#{options_to_str(global_diff)}\n" unless global_diff.empty?
|
200
|
+
str << "Script + Global + Local Defaults:\n#{options_to_str(local_diff)}\n" unless local_diff.empty?
|
201
|
+
str
|
202
|
+
end
|
203
|
+
|
204
|
+
def hash_diff(hash1, hash2)
|
205
|
+
new_hash = {}
|
206
|
+
hash1.keys.each { |k| new_hash[k] = hash1[k] unless hash2.has_key?(k) && hash1[k] == hash2[k] }
|
207
|
+
new_hash
|
208
|
+
end
|
209
|
+
|
210
|
+
def options_to_str(options)
|
211
|
+
str = ''
|
212
|
+
max_name_len = @options.values.map { |v| v.names.join(', ').length }.max
|
213
|
+
options.each { |v|
|
214
|
+
opt = @options[v[0]]
|
215
|
+
val = v[1]
|
216
|
+
names_str = opt.names.join(', ')
|
217
|
+
str << "#{' ' * 4}#{names_str}#{' ' * ((max_name_len + 4) - names_str.length)}#{val_to_str(val)}\n"
|
218
|
+
}
|
219
|
+
str
|
220
|
+
end
|
221
|
+
|
222
|
+
def val_to_str(val)
|
223
|
+
if val.nil?
|
224
|
+
'nil'
|
225
|
+
elsif val.is_a?(TrueClass)
|
226
|
+
'true'
|
227
|
+
elsif val.is_a?(FalseClass)
|
228
|
+
'false'
|
229
|
+
elsif val.is_a?(Enumerable)
|
230
|
+
"[#{val.map { |v| val_to_str(v) }.join(', ')}]"
|
231
|
+
elsif val.is_a?(Numeric)
|
232
|
+
val.to_s
|
233
|
+
else
|
234
|
+
"'#{val.to_s}'"
|
235
|
+
end
|
236
|
+
end
|
190
237
|
end
|
191
238
|
|
192
239
|
module OptionUtil
|
@@ -218,8 +265,12 @@ module EverydayCliUtils
|
|
218
265
|
@options.opts.on(*names) { @set_global_defaults = true }
|
219
266
|
end
|
220
267
|
|
221
|
-
def show_defaults_option(
|
222
|
-
|
268
|
+
def show_defaults_option(names, settings = {})
|
269
|
+
@options ||= OptionList.new
|
270
|
+
@show_defaults = false
|
271
|
+
@exit_on_show_defaults = !settings.has_key?(:exit_on_show) || settings[:exit_on_show]
|
272
|
+
names << settings[:desc] if settings.has_key?(:desc)
|
273
|
+
@options.opts.on(*names) { @show_defaults = true }
|
223
274
|
end
|
224
275
|
|
225
276
|
def help_option(names, settings = {})
|
@@ -285,6 +336,10 @@ module EverydayCliUtils
|
|
285
336
|
puts help
|
286
337
|
exit 0 if @exit_on_print
|
287
338
|
end
|
339
|
+
if @show_defaults
|
340
|
+
puts @options.show_defaults
|
341
|
+
exit 0 if @exit_on_show_defaults
|
342
|
+
end
|
288
343
|
if @set_global_defaults
|
289
344
|
IO.write(@global_defaults_file, @options.composite(:global, :arg).to_yaml)
|
290
345
|
if @exit_on_global_save
|
@@ -185,24 +185,83 @@ describe EverydayCliUtils::OptionUtil do
|
|
185
185
|
end
|
186
186
|
|
187
187
|
it 'supports layers' do
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
188
|
+
global = { opt1: false, opt2: [], opt3: 'hi', opt4: [5] }
|
189
|
+
global_arg = { opt1: true, opt2: [], opt3: 'hi', opt4: [5] }
|
190
|
+
arg = { opt1: false, opt2: [], opt3: nil, opt4: [] }
|
191
|
+
total = { opt1: true, opt2: %w(hi bye), opt3: 'bye', opt4: [5, 4] }
|
192
|
+
global_local = { opt1: false, opt2: %w(hi bye), opt3: 'bye', opt4: [5, 4] }
|
193
|
+
local = { opt1: true, opt2: %w(hi bye), opt3: 'bye', opt4: [4] }
|
194
|
+
local_arg = { opt1: false, opt2: %w(hi bye), opt3: 'bye', opt4: [4] }
|
195
|
+
clean = { opt1: false, opt2: [], opt3: nil, opt4: [] }
|
196
|
+
clean2 = { opt1: true, opt2: [], opt3: nil, opt4: [] }
|
197
|
+
opt = Option1.new
|
198
|
+
opt.default_settings toggle: true, append: true
|
193
199
|
opt.option :opt1, %w(-1 --opt-1)
|
200
|
+
opt.option_with_param :opt2, %w(-2 --big-opt-2)
|
201
|
+
opt.option_with_param :opt3, %w(-3 --bigger-opt-3), append: false
|
202
|
+
opt.option_with_param :opt4, %w(-4 --even-bigger-opt-4), type: Integer
|
194
203
|
opt.options.should eq clean
|
195
|
-
opt.
|
196
|
-
|
197
|
-
opt
|
198
|
-
|
199
|
-
|
204
|
+
opt.option_list.show_defaults.should eq <<SHOW
|
205
|
+
Script Defaults:
|
206
|
+
-1, --opt-1 false
|
207
|
+
-2 PARAM, --big-opt-2 []
|
208
|
+
-3 PARAM, --bigger-opt-3 nil
|
209
|
+
-4 PARAM, --even-bigger-opt-4 []
|
210
|
+
|
211
|
+
SHOW
|
212
|
+
opt.default_options opt1: true
|
213
|
+
opt.options.should eq clean2
|
214
|
+
opt.option_list.show_defaults.should eq <<SHOW
|
215
|
+
Script Defaults:
|
216
|
+
-1, --opt-1 true
|
217
|
+
-2 PARAM, --big-opt-2 []
|
218
|
+
-3 PARAM, --bigger-opt-3 nil
|
219
|
+
-4 PARAM, --even-bigger-opt-4 []
|
220
|
+
|
221
|
+
SHOW
|
222
|
+
opt.apply_options :global, opt1: true, opt3: 'hi', opt4: [5]
|
223
|
+
opt.options.should eq global
|
224
|
+
opt.option_list.show_defaults.should eq <<SHOW
|
225
|
+
Script Defaults:
|
226
|
+
-1, --opt-1 true
|
227
|
+
-2 PARAM, --big-opt-2 []
|
228
|
+
-3 PARAM, --bigger-opt-3 nil
|
229
|
+
-4 PARAM, --even-bigger-opt-4 []
|
230
|
+
|
231
|
+
Script + Global Defaults:
|
232
|
+
-1, --opt-1 false
|
233
|
+
-3 PARAM, --bigger-opt-3 'hi'
|
234
|
+
-4 PARAM, --even-bigger-opt-4 [5]
|
235
|
+
|
236
|
+
SHOW
|
237
|
+
opt.apply_options :local, opt1: false, opt2: %w(hi bye), opt3: 'bye', opt4: [4]
|
238
|
+
opt.options.should eq global_local
|
239
|
+
opt.option_list.show_defaults.should eq <<SHOW
|
240
|
+
Script Defaults:
|
241
|
+
-1, --opt-1 true
|
242
|
+
-2 PARAM, --big-opt-2 []
|
243
|
+
-3 PARAM, --bigger-opt-3 nil
|
244
|
+
-4 PARAM, --even-bigger-opt-4 []
|
245
|
+
|
246
|
+
Script + Global Defaults:
|
247
|
+
-1, --opt-1 false
|
248
|
+
-3 PARAM, --bigger-opt-3 'hi'
|
249
|
+
-4 PARAM, --even-bigger-opt-4 [5]
|
250
|
+
|
251
|
+
Script + Global + Local Defaults:
|
252
|
+
-2 PARAM, --big-opt-2 ['hi', 'bye']
|
253
|
+
-3 PARAM, --bigger-opt-3 'bye'
|
254
|
+
-4 PARAM, --even-bigger-opt-4 [5, 4]
|
255
|
+
|
256
|
+
SHOW
|
200
257
|
opt.apply_options :arg, opt1: true
|
201
|
-
opt.options.should eq
|
202
|
-
opt.option_list.composite(:global, :arg).should eq
|
203
|
-
opt.option_list.composite(:global).should eq
|
204
|
-
opt.option_list.composite(:
|
205
|
-
opt.option_list.composite(:
|
206
|
-
opt.option_list.composite(:
|
258
|
+
opt.options.should eq total
|
259
|
+
opt.option_list.composite(:global, :arg).should eq global_arg
|
260
|
+
opt.option_list.composite(:global, :local).should eq global_local
|
261
|
+
opt.option_list.composite(:global).should eq global
|
262
|
+
opt.option_list.composite(:local).should eq local
|
263
|
+
opt.option_list.composite(:local, :arg).should eq local_arg
|
264
|
+
opt.option_list.composite(:arg).should eq arg
|
265
|
+
opt.option_list.composite(:global, :local, :arg).should eq total
|
207
266
|
end
|
208
267
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: everyday-cli-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Henderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|