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 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