simple_args_dispatch 0.3.0 → 0.3.1

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: dbcad084e9c183ea9115eb614b3f91e077948980
4
- data.tar.gz: 19c1f415640cf74522411b9dd8725e9f91b5da64
3
+ metadata.gz: 239191fdca3ca4a6da66788cbab985fb6daf28df
4
+ data.tar.gz: fd25320532cb3205e426f9a47f5e31d135edcfa7
5
5
  SHA512:
6
- metadata.gz: ae7f3b763ba04a3722453993474c06413231ca7b7d8caf6fd910006b30f2eeaeb213a46f7481810dee39dde1675755cb73443ecd4fb86765f01e2f8dc62fa98a
7
- data.tar.gz: b2327fdba31d354ce9178644d33cca35bd86287a02f6686a2dad8166ba2df0b58757861aa290a033d37ea430b8923fe97f48467554ceec2e6c65528067c0ab53
6
+ metadata.gz: 1e48df4c18c84d9622ce0318edc04ce0cda9c66396088f037f199583808462fcc312155933231505cdcbe2dc6c5dedd6eea3936c7971054565f36856742c3bca
7
+ data.tar.gz: cc6c5f20d644ee83f42708b91df0fc0bb1da5e1a1faf43d375a0a818e54db233b9a687a8490610a1864d81f60f64ada2369493a6e6b726f85a1a013ab230a1c3
@@ -3,95 +3,97 @@ require 'simple_speaker'
3
3
  require 'yaml'
4
4
 
5
5
  module SimpleArgsDispatch
6
+ class Agent
6
7
 
7
- # Actions will be in the following format:
8
- # {
9
- # :help => ['Dispatcher', 'show_available'],
10
- # :reconfigure => ['App', 'reconfigure'],
11
- # :some_name => {
12
- # :some_function => ['SomeName', 'SomeFunction'],
13
- # .....
14
- # }
15
- # end
8
+ # Actions will be in the following format:
9
+ # {
10
+ # :help => ['Dispatcher', 'show_available'],
11
+ # :reconfigure => ['App', 'reconfigure'],
12
+ # :some_name => {
13
+ # :some_function => ['SomeName', 'SomeFunction'],
14
+ # .....
15
+ # }
16
+ # end
16
17
 
17
- def initialize(speaker = nil)
18
- @speaker = speaker
19
- end
18
+ def initialize(speaker = nil)
19
+ @speaker = speaker
20
+ end
20
21
 
21
- def dispatch(app_name, args, actions, parent = nil, template_dir = '')
22
- arg = args.shift
23
- actions.each do |k, v|
24
- if arg == k.to_s
25
- if v.is_a?(Hash)
26
- self.dispatch(app_name, args, v, "#{parent} #{arg}", template_dir)
27
- else
28
- self.launch(app_name, v, args, "#{parent} #{arg}", template_dir)
22
+ def dispatch(app_name, args, actions, parent = nil, template_dir = '')
23
+ arg = args.shift
24
+ actions.each do |k, v|
25
+ if arg == k.to_s
26
+ if v.is_a?(Hash)
27
+ self.dispatch(app_name, args, v, "#{parent} #{arg}", template_dir)
28
+ else
29
+ self.launch(app_name, v, args, "#{parent} #{arg}", template_dir)
30
+ end
31
+ return
29
32
  end
30
- return
31
33
  end
32
- end
33
- @speaker.speak_up('Unknown command/option
34
+ @speaker.speak_up('Unknown command/option
34
35
 
35
36
  ')
36
- self.show_available(app_name, actions, parent)
37
- end
38
-
39
- def launch(app_name, action, args, parent, template_dir)
40
- args = Hash[args.flat_map { |s| s.scan(/--?([^=\s]+)(?:=(.+))?/) }]
41
- template_args = parse_template_args(load_template(args['template_name'], template_dir), template_dir)
42
- model = Object.const_get(action[0])
43
- req_params = model.method(action[1].to_sym).parameters.map { |a| a.reverse! }
44
- req_params.each do |param|
45
- return self.show_available(app_name, Hash[req_params.map { |k| ["--#{k[0]}=<#{k[0]}>", k[1]] }], parent, ' ') if param[1] == :keyreq && args[param[0].to_s].nil? && template_args[param[0].to_s].nil?
37
+ self.show_available(app_name, actions, parent)
46
38
  end
47
- $env_flags.each do |k,_|
48
- Thread.current[k.to_sym] = (args[k] || template_args[k]).to_i
39
+
40
+ def launch(app_name, action, args, parent, template_dir)
41
+ args = Hash[args.flat_map { |s| s.scan(/--?([^=\s]+)(?:=(.+))?/) }]
42
+ template_args = parse_template_args(load_template(args['template_name'], template_dir), template_dir)
43
+ model = Object.const_get(action[0])
44
+ req_params = model.method(action[1].to_sym).parameters.map { |a| a.reverse! }
45
+ req_params.each do |param|
46
+ return self.show_available(app_name, Hash[req_params.map { |k| ["--#{k[0]}=<#{k[0]}>", k[1]] }], parent, ' ') if param[1] == :keyreq && args[param[0].to_s].nil? && template_args[param[0].to_s].nil?
47
+ end
48
+ $env_flags.each do |k, _|
49
+ Thread.current[k.to_sym] = (args[k] || template_args[k]).to_i
50
+ end
51
+ dameth = model.method(action[1])
52
+ params = Hash[req_params.map do |k, _|
53
+ val = args[k.to_s] || template_args[k.to_s]
54
+ val = eval(val) if val.is_a?(String) && val.match(/^[{\[].*[}\]]$/)
55
+ [k, val]
56
+ end].select { |_, v| !v.nil? }
57
+ @speaker.speak_up("Running with arguments: " + params.map { |a, v| "#{a.to_s}='#{v.to_s}'" }.join(' ')) if $env_flags['debug'] > 0
58
+ params.empty? ? dameth.call : dameth.call(params)
59
+ rescue => e
60
+ @speaker.tell_error(e, "SimpleAgrsDispatch.launch")
49
61
  end
50
- dameth = model.method(action[1])
51
- params = Hash[req_params.map do |k, _|
52
- val = args[k.to_s] || template_args[k.to_s]
53
- val = eval(val) if val.is_a?(String) && val.match(/^[{\[].*[}\]]$/)
54
- [k, val]
55
- end].select { |_, v| !v.nil? }
56
- @speaker.speak_up("Running with arguments: " + params.map{|a, v| "#{a.to_s}='#{v.to_s}'"}.join(' ')) if $env_flags['debug'] > 0
57
- params.empty? ? dameth.call : dameth.call(params)
58
- rescue => e
59
- @speaker.tell_error(e, "SimpleAgrsDispatch.launch")
60
- end
61
62
 
62
- def load_template(template_name, template_dir)
63
- if template_name.to_s != '' && File.exist?(template_dir + '/' + "#{template_name}.yml")
64
- return YAML.load_file(template_dir + '/' + "#{template_name}.yml")
63
+ def load_template(template_name, template_dir)
64
+ if template_name.to_s != '' && File.exist?(template_dir + '/' + "#{template_name}.yml")
65
+ return YAML.load_file(template_dir + '/' + "#{template_name}.yml")
66
+ end
67
+ {}
68
+ rescue
69
+ {}
65
70
  end
66
- {}
67
- rescue
68
- {}
69
- end
70
71
 
71
- def new_line
72
- '---------------------------------------------------------'
73
- end
72
+ def new_line
73
+ '---------------------------------------------------------'
74
+ end
74
75
 
75
- def parse_template_args(template, template_dir)
76
- template.keys.each do |k|
77
- if k.to_s == 'load_template'
78
- template[k] = [template[k]] if template[k].is_a?(String)
79
- template[k].each do |t|
80
- template.merge!(parse_template_args(load_template(t.to_s, template_dir), template_dir))
76
+ def parse_template_args(template, template_dir)
77
+ template.keys.each do |k|
78
+ if k.to_s == 'load_template'
79
+ template[k] = [template[k]] if template[k].is_a?(String)
80
+ template[k].each do |t|
81
+ template.merge!(parse_template_args(load_template(t.to_s, template_dir), template_dir))
82
+ end
83
+ template.delete(k)
84
+ elsif template[k].is_a?(Hash)
85
+ template[k] = parse_template_args(template[k], template_dir)
81
86
  end
82
- template.delete(k)
83
- elsif template[k].is_a?(Hash)
84
- template[k] = parse_template_args(template[k], template_dir)
85
87
  end
88
+ template
86
89
  end
87
- template
88
- end
89
90
 
90
- def show_available(app_name, available, prepend = nil, join='|', separator = new_line, extra_info = '')
91
- @speaker.speak_up("Usage: #{app_name} #{prepend + ' ' if prepend}#{available.map { |k, v| "#{k.to_s}#{'(optional)' if v == :opt}" }.join(join)}")
92
- if extra_info.to_s != ''
93
- @speaker.speak_up(separator)
94
- @speaker.speak_up(extra_info)
91
+ def show_available(app_name, available, prepend = nil, join='|', separator = new_line, extra_info = '')
92
+ @speaker.speak_up("Usage: #{app_name} #{prepend + ' ' if prepend}#{available.map { |k, v| "#{k.to_s}#{'(optional)' if v == :opt}" }.join(join)}")
93
+ if extra_info.to_s != ''
94
+ @speaker.speak_up(separator)
95
+ @speaker.speak_up(extra_info)
96
+ end
95
97
  end
96
98
  end
97
99
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleArgsDispatch
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_args_dispatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - R