everyday-cli-utils 1.5.2 → 1.6.0
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
|
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
|