everyday_thor_util 2.0.3 → 2.0.4

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: a98acaf1e9ab0aa917b49bd28b6f84f65003ccca
4
- data.tar.gz: ab9475835ec4f7a83bd12fc6fe784bb21c5e00e2
3
+ metadata.gz: a3066504bd2d9874ff985735a77ac7d19f31e444
4
+ data.tar.gz: 5da393b24d21afd04c3af167e3751a57a0b1d76c
5
5
  SHA512:
6
- metadata.gz: 99f8a9bb8f38205af73fcdf013d038226816cf6525f186340f058e0854ec20b22eba0cd4934dae3cb5a0e22ad028c8c302717064418791b5ad6188b1043e891e
7
- data.tar.gz: df27db166a01983fd756f5e3067be264f26cfa7f37ee01fc4d5e442111ce03f60c039bc7a275ff4c2053930585d190545d9d652057ce50335d0c895af59c1ba7
6
+ metadata.gz: f50c9ea76a92e6441f2fe943f7298fd2940cfd2a96eda0646c673c370d3acf7cbbbe0b703656ed43d86662673bea9a5d080c9586d362b7bbcf7a4577b2542640
7
+ data.tar.gz: 8542499b17170b80e999c76811161d028c65bb967b8494f176da215a15599f560b52eb9c3467b3a85a05911f9e256942972be9e10b951efb6b056d258d4962fc
@@ -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 = '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'
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 = parent
9
+ @parent = parent
19
10
  @options = options
20
- @body = block
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.options[:short_desc]
223
- desc = c.options[:desc]
224
- long_desc = c.options[:long_desc]
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 add_debugging(base, option_sym, env_sym)
263
- methods = base.commands.keys - base.subcommands
264
- base.class_eval {
265
- methods.each { |method_name|
266
- original_method = instance_method(method_name)
267
- no_commands {
268
- define_method(method_name) { |*args, &block|
269
- debug = if option_sym && (options.has_key?(option_sym.to_s) || options.has_key?(option_sym.to_sym))
270
- options[option_sym.to_sym]
271
- elsif env_sym
272
- d = ENV[env_sym.to_s]
273
- d == '1' || d == 1 || d == 'true' || d == 't'
274
- end
275
- if debug
276
- puts "command: #{self.class.basename2} #{__method__.gsub(/_/, '-').to_s}"
277
- puts "parent_options: #{parent_options.inspect}"
278
- puts "options: #{options.inspect}"
279
- original_method.parameters.each_with_index { |p, i| puts "#{p[1].to_s}: #{args[i]}" }
280
- end
281
- begin
282
- original_method.bind(self).call(*args, &block)
283
- rescue ArgumentError => e
284
- base.handle_argument_error(base.commands[method_name], e, args, original_method.arity)
285
- end
286
- }
287
- }
288
- }
289
- }
290
- base.subcommand_classes.values.each { |c| add_debugging(c, option_sym, env_sym) }
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
- filtered_list = list.select { |v| v[:options][:parent] == parent }
28
- filtered_list.each { |v|
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
- Plugins.get helper_symbol, parent_class, nil unless parent || helper_symbol.nil?
43
- Plugins.get flag_symbol, parent_class, nil, true unless parent
44
- filtered_list = list.select { |v| v[:options][:parent] == parent || nil }
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
- unless helper_symbol.nil?
97
- register_type(helper_symbol) { |list, parent_class, parent|
98
- filtered_list = list.select { |v| v[:options][:parent] == parent || v[:options][:global] }
99
- filtered_list.each { |v|
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
- register(helper_symbol, name: (method_name || 'print_info'), global: global, parent: parent) { |meth, &eval_block|
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
- def add_debugging(base, option_sym, env_sym)
123
- methods = base.commands.keys - base.subcommands
124
- base.class_eval {
125
- methods.each { |method_name|
126
- original_method = instance_method(method_name)
127
- no_commands {
128
- define_method(method_name) { |*args, &block|
129
- debug = if option_sym && (options.has_key?(option_sym.to_s) || options.has_key?(option_sym.to_sym))
130
- options[option_sym.to_sym]
131
- elsif env_sym
132
- d = ENV[env_sym.to_s]
133
- d == '1' || d == 1 || d == 'true' || d == 't'
134
- end
135
- if debug
136
- puts "command: #{self.class.basename2} #{__method__.gsub(/_/, '-').to_s}"
137
- puts "parent_options: #{parent_options.inspect}"
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
@@ -1,3 +1,3 @@
1
1
  module EverydayThorUtil
2
- VERSION = '2.0.3'
2
+ VERSION = '2.0.4'
3
3
  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.3
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-01-27 00:00:00.000000000 Z
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