everyday_thor_util 2.0.3 → 2.0.4
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 +4 -4
- data/everyday_thor_util.gemspec +8 -8
- data/lib/everyday_thor_util/builder.rb +61 -83
- data/lib/everyday_thor_util/common.rb +80 -0
- data/lib/everyday_thor_util/plugin-helper.rb +125 -116
- data/lib/everyday_thor_util/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3066504bd2d9874ff985735a77ac7d19f31e444
|
4
|
+
data.tar.gz: 5da393b24d21afd04c3af167e3751a57a0b1d76c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f50c9ea76a92e6441f2fe943f7298fd2940cfd2a96eda0646c673c370d3acf7cbbbe0b703656ed43d86662673bea9a5d080c9586d362b7bbcf7a4577b2542640
|
7
|
+
data.tar.gz: 8542499b17170b80e999c76811161d028c65bb967b8494f176da215a15599f560b52eb9c3467b3a85a05911f9e256942972be9e10b951efb6b056d258d4962fc
|
data/everyday_thor_util.gemspec
CHANGED
@@ -4,14 +4,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'everyday_thor_util/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
11
|
-
spec.summary
|
12
|
-
spec.description
|
13
|
-
spec.homepage
|
14
|
-
spec.license
|
7
|
+
spec.name = 'everyday_thor_util'
|
8
|
+
spec.version = EverydayThorUtil::VERSION
|
9
|
+
spec.authors = ['Eric Henderson']
|
10
|
+
spec.email = ['henderea@gmail.com']
|
11
|
+
spec.summary = %q{Two parts: everyday_thor_util/thor-fix has a patch for Thor and everyday_thor_util/plugin-helper has some Thor handling everyday-plugin helpers}
|
12
|
+
spec.description = %q{Two parts: everyday_thor_util/thor-fix patches Thor with a fix for help messages with multi-level command nesting not showing the full command string. everyday_thor_util/plugin-helper provides everyday-plugins types for Thor commands and Thor flags}
|
13
|
+
spec.homepage = 'https://github.com/henderea/everyday_thor_util'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
@@ -1,23 +1,14 @@
|
|
1
1
|
require 'everyday_thor_util/thor-fix'
|
2
|
-
|
3
|
-
class Module
|
4
|
-
def create_method(name, &block)
|
5
|
-
self.send(:define_method, name, &block)
|
6
|
-
end
|
7
|
-
|
8
|
-
def dup_method(new_name, old_name)
|
9
|
-
self.send(:alias_method, new_name, old_name)
|
10
|
-
end
|
11
|
-
end
|
2
|
+
require 'everyday_thor_util/common'
|
12
3
|
|
13
4
|
module EverydayThorUtil
|
14
5
|
module BuilderBuildItems
|
15
6
|
class BuilderCommand
|
16
7
|
def initialize(parent = nil, options = {}, &block)
|
17
8
|
@aliases = options.delete(:aliases) if options.has_key?(:aliases) && !parent.nil?
|
18
|
-
@parent
|
9
|
+
@parent = parent
|
19
10
|
@options = options
|
20
|
-
@body
|
11
|
+
@body = block
|
21
12
|
end
|
22
13
|
|
23
14
|
def parent
|
@@ -182,6 +173,8 @@ module EverydayThorUtil
|
|
182
173
|
end
|
183
174
|
end
|
184
175
|
module Builder
|
176
|
+
include EverydayThorUtil::Common
|
177
|
+
|
185
178
|
def global
|
186
179
|
@global ||= EverydayThorUtil::BuilderBuildItems::BuilderGlobal.new
|
187
180
|
end
|
@@ -214,82 +207,67 @@ module EverydayThorUtil
|
|
214
207
|
end
|
215
208
|
|
216
209
|
def build_recurse(p, pc)
|
217
|
-
if p.parent.nil?
|
218
|
-
build_flags(p, pc, true)
|
219
|
-
build_helpers(p, pc)
|
220
|
-
end
|
210
|
+
setup_root(p, pc) if p.parent.nil?
|
221
211
|
p.commands.commands.each { |cn, c|
|
222
|
-
short_desc = c
|
223
|
-
desc
|
224
|
-
|
225
|
-
aliases = c.aliases
|
226
|
-
if !c.leaf?
|
227
|
-
cc = Class.new(Thor)
|
228
|
-
cc.namespace cn.to_s
|
229
|
-
build_helpers(c, cc)
|
230
|
-
build_flags(c, cc, true)
|
231
|
-
build_recurse(c, cc)
|
232
|
-
build_flags(c, pc, false)
|
233
|
-
pc.desc short_desc, desc if short_desc && desc
|
234
|
-
pc.long_desc long_desc if long_desc
|
235
|
-
pc.subcommand cn, cc
|
236
|
-
aliases.each { |an|
|
237
|
-
cc2 = Class.new(Thor)
|
238
|
-
cc2.namespace an
|
239
|
-
build_helpers(c, cc2)
|
240
|
-
build_flags(c, cc2, true)
|
241
|
-
build_recurse(c, cc2)
|
242
|
-
build_flags(c, pc, false)
|
243
|
-
pc.desc short_desc.gsub(/^\S+(?=\s|$)/, an.gsub(/_/, '-')), desc if short_desc && desc
|
244
|
-
pc.long_desc long_desc if long_desc
|
245
|
-
pc.subcommand an, cc2
|
246
|
-
} if aliases && !aliases.empty?
|
247
|
-
elsif c.body
|
248
|
-
build_flags(c, pc, false)
|
249
|
-
pc.desc short_desc, desc if short_desc && desc
|
250
|
-
pc.long_desc long_desc if long_desc
|
251
|
-
pc.create_method(cn.to_sym, &c.body)
|
252
|
-
aliases.each { |an|
|
253
|
-
build_flags(c, pc, false)
|
254
|
-
pc.desc short_desc.gsub(/^\S+(?=\s|$)/, an.gsub(/_/, '-')), desc if short_desc && desc
|
255
|
-
pc.long_desc long_desc if long_desc
|
256
|
-
pc.dup_method an.to_sym, cn.to_sym
|
257
|
-
} if aliases
|
258
|
-
end
|
212
|
+
aliases, desc, long_desc, short_desc = extract_command_info(c)
|
213
|
+
handle_command_class(c, pc, cn, aliases, desc, long_desc, short_desc) ||
|
214
|
+
handle_command_method(c, pc, cn, aliases, desc, long_desc, short_desc)
|
259
215
|
}
|
260
216
|
end
|
261
217
|
|
262
|
-
def
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
218
|
+
def setup_root(p, pc)
|
219
|
+
build_flags(p, pc, true)
|
220
|
+
build_helpers(p, pc)
|
221
|
+
end
|
222
|
+
|
223
|
+
def setup_command(c, pc, desc, long_desc, short_desc)
|
224
|
+
build_flags(c, pc, false)
|
225
|
+
pc.desc short_desc, desc if short_desc && desc
|
226
|
+
pc.long_desc long_desc if long_desc
|
227
|
+
end
|
228
|
+
|
229
|
+
def handle_command_class(c, pc, cn, aliases, desc, long_desc, short_desc)
|
230
|
+
!c.leaf? && create_cmd_class_and_aliases(c, pc, cn, aliases, desc, long_desc, short_desc)
|
231
|
+
end
|
232
|
+
|
233
|
+
def handle_command_method(c, pc, cn, aliases, desc, long_desc, short_desc)
|
234
|
+
c.body && create_cmd_method_and_aliases(c, pc, cn, aliases, desc, long_desc, short_desc)
|
235
|
+
end
|
236
|
+
|
237
|
+
def create_cmd_class_and_aliases(c, pc, cn, aliases, desc, long_desc, short_desc)
|
238
|
+
create_command_class(c, pc, cn, desc, long_desc, short_desc)
|
239
|
+
aliases.each { |an| create_command_class(c, pc, an, desc, long_desc, short_desc.gsub(/^\S+(?=\s|$)/, an.gsub(/_/, '-'))) } if aliases && !aliases.empty?
|
240
|
+
true
|
241
|
+
end
|
242
|
+
|
243
|
+
def create_cmd_method_and_aliases(c, pc, cn, aliases, desc, long_desc, short_desc)
|
244
|
+
setup_command(c, pc, desc, long_desc, short_desc)
|
245
|
+
pc.create_method(cn.to_sym, &c.body)
|
246
|
+
aliases.each { |an|
|
247
|
+
setup_command(c, pc, desc, long_desc, short_desc)
|
248
|
+
pc.dup_method an.to_sym, cn.to_sym
|
249
|
+
} if aliases
|
250
|
+
true
|
251
|
+
end
|
252
|
+
|
253
|
+
def create_command_class(c, pc, cn, desc, long_desc, short_desc)
|
254
|
+
cc = Class.new(Thor)
|
255
|
+
cc.namespace cn.to_s
|
256
|
+
build_helpers(c, cc)
|
257
|
+
build_flags(c, cc, true)
|
258
|
+
build_recurse(c, cc)
|
259
|
+
setup_command(c, pc, desc, long_desc, short_desc)
|
260
|
+
pc.subcommand cn, cc
|
261
|
+
end
|
262
|
+
|
263
|
+
def extract_command_info(c)
|
264
|
+
short_desc = c.options[:short_desc]
|
265
|
+
desc = c.options[:desc]
|
266
|
+
long_desc = c.options[:long_desc]
|
267
|
+
aliases = c.aliases
|
268
|
+
return aliases, desc, long_desc, short_desc
|
291
269
|
end
|
292
270
|
|
293
|
-
private :build_recurse
|
271
|
+
private :build_helpers, :build_flags, :build_recurse, :setup_root, :setup_command, :handle_command_class, :handle_command_method, :create_command_class, :extract_command_info
|
294
272
|
end
|
295
273
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
class Module
|
2
|
+
def create_method(name, &block)
|
3
|
+
self.send(:define_method, name, &block)
|
4
|
+
end
|
5
|
+
|
6
|
+
def dup_method(new_name, old_name)
|
7
|
+
self.send(:alias_method, new_name, old_name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Thor
|
12
|
+
class << self
|
13
|
+
def define_non_command(method_name, &block)
|
14
|
+
no_commands { define_method(method_name, &block) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module EverydayThorUtil
|
20
|
+
class CommonHelpers
|
21
|
+
class << self
|
22
|
+
def print_debug_if_should(option_sym, env_sym, obj, original_method, method, args)
|
23
|
+
print_all_debug(args, method, obj, original_method) if should_debug?(env_sym, obj, option_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
def print_all_debug(args, method, obj, original_method)
|
27
|
+
print_base_debug(method, obj)
|
28
|
+
original_method.parameters.each_with_index { |p, i| puts "#{p[1].to_s}: #{args[i]}" }
|
29
|
+
end
|
30
|
+
|
31
|
+
def print_base_debug(method, obj)
|
32
|
+
puts "command: #{obj.class.basename2} #{method.gsub(/_/, '-').to_s}"
|
33
|
+
puts "parent_options: #{obj.parent_options.inspect}"
|
34
|
+
puts "options: #{obj.options.inspect}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def should_debug?(env_sym, obj, option_sym)
|
38
|
+
should_use_option_sym?(obj, option_sym) ? obj.options[option_sym.to_sym] : (env_sym && env_val_true(ENV[env_sym.to_s]))
|
39
|
+
end
|
40
|
+
|
41
|
+
def env_val_true(d)
|
42
|
+
d == '1' || d == 1 || d == 'true' || d == 't'
|
43
|
+
end
|
44
|
+
|
45
|
+
def should_use_option_sym?(obj, option_sym)
|
46
|
+
option_sym && (obj.options.has_key?(option_sym.to_s) || obj.options.has_key?(option_sym.to_sym))
|
47
|
+
end
|
48
|
+
|
49
|
+
def call_original_method(args, base, block, method_name, original_method)
|
50
|
+
begin
|
51
|
+
original_method.bind(base).call(*args, &block)
|
52
|
+
rescue ArgumentError => e
|
53
|
+
base.handle_argument_error(base.commands[method_name], e, args, original_method.arity)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def define_debug_wrapper(base, env_sym, method_name, option_sym)
|
58
|
+
base.class_eval {
|
59
|
+
original_method = instance_method(method_name)
|
60
|
+
define_non_command(method_name) { |*args, &block|
|
61
|
+
EverydayThorUtil::CommonHelpers.debug_and_call_original(args, self, env_sym, method_name, option_sym, original_method, &block)
|
62
|
+
}
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def debug_and_call_original(args, base, env_sym, method_name, option_sym, original_method, &block)
|
67
|
+
print_debug_if_should(option_sym, env_sym, base, original_method, method_name, args)
|
68
|
+
call_original_method(args, base, block, method_name, original_method)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
module Common
|
74
|
+
def add_debugging(base, option_sym, env_sym)
|
75
|
+
methods = base.commands.keys - base.subcommands
|
76
|
+
methods.each { |method_name| EverydayThorUtil::CommonHelpers.define_debug_wrapper(base, env_sym, method_name, option_sym) }
|
77
|
+
base.subcommand_classes.values.each { |c| add_debugging(c, option_sym, env_sym) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,154 +1,163 @@
|
|
1
1
|
require 'everyday_thor_util/thor-fix'
|
2
|
+
require 'everyday_thor_util/common'
|
2
3
|
require 'everyday-plugins'
|
3
4
|
include EverydayPlugins
|
4
5
|
require 'thor'
|
5
6
|
|
6
|
-
class Module
|
7
|
-
def create_method(name, &block)
|
8
|
-
self.send(:define_method, name, &block)
|
9
|
-
end
|
10
|
-
|
11
|
-
def dup_method(new_name, old_name)
|
12
|
-
self.send(:alias_method, new_name, old_name)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
7
|
module EverydayThorUtil
|
17
8
|
class SubCommandTypes
|
18
9
|
extend PluginType
|
19
10
|
extend Plugin
|
20
11
|
extend TypeHelper
|
12
|
+
extend EverydayThorUtil::Common
|
21
13
|
|
22
14
|
class << self
|
23
15
|
def def_types(command_array_symbol, flag_symbol, command_symbol, helper_symbol = nil)
|
24
16
|
register_variable command_array_symbol, []
|
17
|
+
register_flag_type(flag_symbol)
|
18
|
+
register_command_type(command_array_symbol, command_symbol, flag_symbol, helper_symbol)
|
19
|
+
register_helper_type(helper_symbol) unless helper_symbol.nil?
|
20
|
+
end
|
25
21
|
|
22
|
+
def register_flag_type(flag_symbol)
|
26
23
|
register_type(flag_symbol) { |list, parent_class, parent, has_children|
|
27
|
-
|
28
|
-
|
29
|
-
opts = {}
|
30
|
-
name = v[:options][:name].to_sym
|
31
|
-
opts[:desc] = v[:options][:desc] if v[:options][:desc]
|
32
|
-
opts[:banner] = v[:options][:banner] if v[:options][:banner]
|
33
|
-
opts[:required] = v[:options][:required] if v[:options][:required] && !v[:options][:default]
|
34
|
-
opts[:default] = v[:options][:default] if v[:options][:default]
|
35
|
-
opts[:type] = v[:options][:type] if v[:options][:type]
|
36
|
-
opts[:aliases] = v[:options][:aliases] if v[:options][:aliases]
|
24
|
+
EverydayThorUtil::SubCommandHelpers.filter_list(list, parent).each { |v|
|
25
|
+
name, opts = EverydayThorUtil::SubCommandHelpers.map_flag_opts(v)
|
37
26
|
has_children ? parent_class.class_option(name, opts) : parent_class.option(name, opts)
|
38
27
|
}
|
39
28
|
}
|
29
|
+
end
|
40
30
|
|
31
|
+
def register_command_type(command_array_symbol, command_symbol, flag_symbol, helper_symbol)
|
41
32
|
register_type(command_symbol) { |list, parent_class, parent|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
filtered_list.each { |v|
|
46
|
-
id = v[:options][:id]
|
47
|
-
short_desc = v[:options][:short_desc]
|
48
|
-
desc = v[:options][:desc]
|
49
|
-
long_desc = v[:options][:long_desc]
|
50
|
-
name = v[:options][:name]
|
51
|
-
aliases = v[:options][:aliases]
|
52
|
-
if id && name
|
53
|
-
has_children = list.any? { |v2| v2[:options][:parent] == id }
|
54
|
-
if has_children
|
55
|
-
command_ids = Plugins.get_var command_array_symbol
|
56
|
-
unless command_ids.include?(id)
|
57
|
-
command_ids << id
|
58
|
-
Plugins.set_var command_array_symbol, command_ids
|
59
|
-
command_class = Class.new(Thor)
|
60
|
-
command_class.namespace name
|
61
|
-
Plugins.get helper_symbol, command_class, id unless helper_symbol.nil?
|
62
|
-
Plugins.get flag_symbol, command_class, id, true
|
63
|
-
Plugins.get command_symbol, command_class, id
|
64
|
-
Plugins.get flag_symbol, parent_class, id, false
|
65
|
-
parent_class.desc short_desc, desc if short_desc && desc
|
66
|
-
parent_class.long_desc long_desc if long_desc
|
67
|
-
parent_class.subcommand name, command_class
|
68
|
-
aliases.each { |a|
|
69
|
-
command_class2 = Class.new(Thor)
|
70
|
-
command_class2.namespace a
|
71
|
-
Plugins.get helper_symbol, command_class2, id unless helper_symbol.nil?
|
72
|
-
Plugins.get flag_symbol, command_class2, id, true
|
73
|
-
Plugins.get command_symbol, command_class2, id
|
74
|
-
Plugins.get flag_symbol, parent_class, id, false
|
75
|
-
parent_class.desc short_desc.gsub(/^\S+(?=\s|$)/, a.gsub(/_/, '-')), desc if short_desc && desc
|
76
|
-
parent_class.long_desc long_desc if long_desc
|
77
|
-
parent_class.subcommand a, command_class2
|
78
|
-
} if aliases
|
79
|
-
end
|
80
|
-
elsif v[:block]
|
81
|
-
Plugins.get flag_symbol, parent_class, id, false
|
82
|
-
parent_class.desc short_desc, desc if short_desc && desc
|
83
|
-
parent_class.long_desc long_desc if long_desc
|
84
|
-
parent_class.create_method(name.to_sym, &v[:block])
|
85
|
-
aliases.each { |a|
|
86
|
-
Plugins.get flag_symbol, parent_class, id, false
|
87
|
-
parent_class.desc short_desc.gsub(/^\S+(?=\s|$)/, a.gsub(/_/, '-')), desc if short_desc && desc
|
88
|
-
parent_class.long_desc long_desc if long_desc
|
89
|
-
parent_class.dup_method a.to_sym, name.to_sym
|
90
|
-
} if aliases
|
91
|
-
end
|
92
|
-
end
|
33
|
+
EverydayThorUtil::SubCommandHelpers.setup_root(flag_symbol, helper_symbol, parent, parent_class)
|
34
|
+
EverydayThorUtil::SubCommandHelpers.filter_list(list, parent).each { |v|
|
35
|
+
EverydayThorUtil::SubCommandHelpers.handle_command(command_array_symbol, command_symbol, flag_symbol, helper_symbol, parent_class, list, v)
|
93
36
|
}
|
94
37
|
}
|
38
|
+
end
|
95
39
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
name = v[:options][:name].to_sym
|
101
|
-
parent_class.no_commands { parent_class.create_method name, &v[:block] } if v[:block]
|
102
|
-
}
|
103
|
-
}
|
104
|
-
end
|
40
|
+
def register_helper_type(helper_symbol)
|
41
|
+
register_type(helper_symbol) { |list, parent_class, parent|
|
42
|
+
EverydayThorUtil::SubCommandHelpers.filter_list(list, parent) { |v| v[:options][:global] }.each { |v| EverydayThorUtil::SubCommandHelpers.add_helper(parent_class, v) }
|
43
|
+
}
|
105
44
|
end
|
106
45
|
|
107
46
|
def def_helper(helper_symbol, which_helper, method_name = nil, global = true, parent = nil)
|
108
47
|
case (which_helper)
|
109
48
|
when :print_info
|
110
|
-
|
111
|
-
meth_obj = self.method(meth)
|
112
|
-
puts "command: #{self.class.basename2} #{meth.to_s}"
|
113
|
-
puts "parent_options: #{parent_options.inspect}"
|
114
|
-
puts "options: #{options.inspect}"
|
115
|
-
meth_obj.parameters.each { |p| puts "#{p[1].to_s}: #{eval_block.call(p[1].to_s)}" } if eval_block
|
116
|
-
}
|
49
|
+
EverydayThorUtil::SubCommandHelpers.register_print_info_helper(global, helper_symbol, method_name, parent)
|
117
50
|
else
|
118
51
|
puts "Unknown helper #{which_helper}"
|
119
52
|
end
|
120
53
|
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
module SubCommandCommonHelpers
|
57
|
+
def filter_list(list, parent, &extra)
|
58
|
+
list.select { |v| v[:options][:parent] == parent || (extra && extra.call(v)) }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
module SubCommandFlagHelpers
|
62
|
+
def map_flag_opts(v)
|
63
|
+
opts = {}
|
64
|
+
name = v[:options][:name].to_sym
|
65
|
+
copy_opts(opts, v, :desc, :banner, :default, :type, :aliases)
|
66
|
+
copy_opt(opts, v, :required, !v[:options][:default])
|
67
|
+
return name, opts
|
68
|
+
end
|
121
69
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
puts "options: #{options.inspect}"
|
139
|
-
original_method.parameters.each_with_index { |p, i| puts "#{p[1].to_s}: #{args[i]}" }
|
140
|
-
end
|
141
|
-
begin
|
142
|
-
original_method.bind(self).call(*args, &block)
|
143
|
-
rescue ArgumentError => e
|
144
|
-
base.handle_argument_error(base.commands[method_name], e, args, original_method.arity)
|
145
|
-
end
|
146
|
-
}
|
147
|
-
}
|
148
|
-
}
|
149
|
-
}
|
150
|
-
base.subcommand_classes.values.each { |c| add_debugging(c, option_sym, env_sym) }
|
70
|
+
def copy_opts(opts, v, *opt_name)
|
71
|
+
opt_name.each { |n| copy_opt(opts, v, n) }
|
72
|
+
end
|
73
|
+
|
74
|
+
def copy_opt(opts, v, opt_name, extra_condition = true)
|
75
|
+
opts[opt_name] = v[:options][opt_name] if v[:options][opt_name] && extra_condition
|
76
|
+
end
|
77
|
+
end
|
78
|
+
module SubCommandCommandHelpers
|
79
|
+
def create_cmd_class_and_aliases(aliases, command_array_symbol, command_symbol, desc, flag_symbol, helper_symbol, id, long_desc, name, parent_class, short_desc)
|
80
|
+
command_ids = Plugins.get_var command_array_symbol
|
81
|
+
unless command_ids.include?(id)
|
82
|
+
command_ids << id
|
83
|
+
Plugins.set_var command_array_symbol, command_ids
|
84
|
+
create_command_class(command_symbol, desc, flag_symbol, helper_symbol, id, long_desc, name, parent_class, short_desc)
|
85
|
+
aliases.each { |a| create_command_class(command_symbol, desc, flag_symbol, helper_symbol, id, long_desc, a, parent_class, short_desc.gsub(/^\S+(?=\s|$)/, a.gsub(/_/, '-'))) } if aliases
|
151
86
|
end
|
87
|
+
true
|
88
|
+
end
|
89
|
+
|
90
|
+
def create_cmd_method_and_aliases(aliases, desc, flag_symbol, id, long_desc, name, parent_class, short_desc, &block)
|
91
|
+
setup_command(desc, flag_symbol, id, long_desc, parent_class, short_desc)
|
92
|
+
parent_class.create_method(name.to_sym, &block)
|
93
|
+
aliases.each { |a|
|
94
|
+
setup_command(desc, flag_symbol, id, long_desc, parent_class, short_desc)
|
95
|
+
parent_class.dup_method a.to_sym, name.to_sym
|
96
|
+
} if aliases
|
97
|
+
true
|
98
|
+
end
|
99
|
+
|
100
|
+
def extract_command_info(v)
|
101
|
+
return v[:options][:aliases], v[:options][:desc], v[:options][:id], v[:options][:long_desc], v[:options][:name], v[:options][:short_desc]
|
102
|
+
end
|
103
|
+
|
104
|
+
def setup_root(flag_symbol, helper_symbol, parent, parent_class)
|
105
|
+
Plugins.get helper_symbol, parent_class, nil unless parent || helper_symbol.nil?
|
106
|
+
Plugins.get flag_symbol, parent_class, nil, true unless parent
|
107
|
+
end
|
108
|
+
|
109
|
+
def create_command_class(command_symbol, desc, flag_symbol, helper_symbol, id, long_desc, name, parent_class, short_desc)
|
110
|
+
command_class = Class.new(Thor)
|
111
|
+
command_class.namespace name
|
112
|
+
Plugins.get helper_symbol, command_class, id unless helper_symbol.nil?
|
113
|
+
Plugins.get flag_symbol, command_class, id, true
|
114
|
+
Plugins.get command_symbol, command_class, id
|
115
|
+
setup_command(desc, flag_symbol, id, long_desc, parent_class, short_desc)
|
116
|
+
parent_class.subcommand name, command_class
|
117
|
+
end
|
118
|
+
|
119
|
+
def setup_command(desc, flag_symbol, id, long_desc, parent_class, short_desc)
|
120
|
+
Plugins.get flag_symbol, parent_class, id, false
|
121
|
+
parent_class.desc short_desc, desc if short_desc && desc
|
122
|
+
parent_class.long_desc long_desc if long_desc
|
152
123
|
end
|
124
|
+
|
125
|
+
def handle_command(command_array_symbol, command_symbol, flag_symbol, helper_symbol, parent_class, list, v)
|
126
|
+
aliases, desc, id, long_desc, name, short_desc = extract_command_info(v)
|
127
|
+
id && name && (handle_command_class(command_array_symbol, command_symbol, flag_symbol, helper_symbol, list, parent_class, aliases, desc, id, long_desc, name, short_desc) ||
|
128
|
+
handle_command_method(aliases, desc, flag_symbol, id, long_desc, name, parent_class, short_desc, &v[:block]))
|
129
|
+
end
|
130
|
+
|
131
|
+
def handle_command_class(command_array_symbol, command_symbol, flag_symbol, helper_symbol, list, parent_class, aliases, desc, id, long_desc, name, short_desc)
|
132
|
+
(list.any? { |v2| v2[:options][:parent] == id } && create_cmd_class_and_aliases(aliases, command_array_symbol, command_symbol, desc, flag_symbol, helper_symbol, id, long_desc, name, parent_class, short_desc))
|
133
|
+
end
|
134
|
+
|
135
|
+
def handle_command_method(aliases, desc, flag_symbol, id, long_desc, name, parent_class, short_desc, &block)
|
136
|
+
(block && create_cmd_method_and_aliases(aliases, desc, flag_symbol, id, long_desc, name, parent_class, short_desc, &block))
|
137
|
+
end
|
138
|
+
end
|
139
|
+
module SubCommandHelperHelpers
|
140
|
+
def add_helper(parent_class, v)
|
141
|
+
parent_class.no_commands { parent_class.create_method v[:options][:name].to_sym, &v[:block] } if v[:block]
|
142
|
+
end
|
143
|
+
|
144
|
+
def register_print_info_helper(global, helper_symbol, method_name, parent)
|
145
|
+
register(helper_symbol, name: (method_name || 'print_info'), global: global, parent: parent) { |meth, &eval_block|
|
146
|
+
EverydayThorUtil::SubCommandHelpers.print_info(self, meth, &eval_block)
|
147
|
+
}
|
148
|
+
end
|
149
|
+
|
150
|
+
def print_info(obj, meth, &eval_block)
|
151
|
+
EverydayThorUtil::CommonHelpers.print_base_debug(meth, obj)
|
152
|
+
meth_obj = obj.method(meth)
|
153
|
+
meth_obj.parameters.each { |p| puts "#{p[1].to_s}: #{eval_block.call(p[1].to_s)}" } if eval_block
|
154
|
+
end
|
155
|
+
end
|
156
|
+
class SubCommandHelpers
|
157
|
+
extend Plugin
|
158
|
+
extend EverydayThorUtil::SubCommandCommonHelpers
|
159
|
+
extend EverydayThorUtil::SubCommandFlagHelpers
|
160
|
+
extend EverydayThorUtil::SubCommandCommandHelpers
|
161
|
+
extend EverydayThorUtil::SubCommandHelperHelpers
|
153
162
|
end
|
154
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: everyday_thor_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Henderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- everyday_thor_util.gemspec
|
84
84
|
- lib/everyday_thor_util.rb
|
85
85
|
- lib/everyday_thor_util/builder.rb
|
86
|
+
- lib/everyday_thor_util/common.rb
|
86
87
|
- lib/everyday_thor_util/plugin-helper.rb
|
87
88
|
- lib/everyday_thor_util/thor-fix.rb
|
88
89
|
- lib/everyday_thor_util/version.rb
|