cli-topic 0.9.9 → 0.9.10

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: 8986b30d5ff457c34632c6090c833f0228a273e5
4
- data.tar.gz: 68ac8e7964bcc6c24026d614afe078e42124a458
3
+ metadata.gz: 9dd7bf15db7efd2aaa6f731dc05a2da91ad99531
4
+ data.tar.gz: 30f0feebf43a90dd6c6a5e1d479b31c67d428e41
5
5
  SHA512:
6
- metadata.gz: 9d3b6cc8cc6565da5f9f31ce70ea2bba33753e3df607178146e1fa4e6c8f94c843c2feba589266bdaea1132699b3ab99efe214a737d4779fba769496616bc9b0
7
- data.tar.gz: fb092adc4defb68231ea68cebabafac9cb0206e3010d55b921ef2fe8a4a408f223c474c78150fa9fda656d2e817dd7c3872b4f0c6b93681cd75ff7be3a30ecfd
6
+ metadata.gz: 3cfdfdbe05f0f6ae712cb49fe21067d0575400c35b376aadc634ff66b2e32d5bfeefbcf1481e4cbf61ca3f1a1394b44bc56f5b57a11fb6e450653e38c44227f5
7
+ data.tar.gz: 5df8e9e83e3607f051caa62fc08defcdf5b8e0b2ad890b47c60a7a283327c33f4b3309fef33fe40e41290312755b87e84db93fd6f63e64c9b4a26a991f3aca6c
@@ -9,7 +9,7 @@ module Clitopic
9
9
  class << self
10
10
  include Clitopic::Parser::OptParser
11
11
  attr_accessor :name, :banner, :description, :hidden, :short_description
12
- attr_accessor :arguments, :options
12
+ attr_accessor :arguments, :options, :inherited_options
13
13
 
14
14
  def cmd_options
15
15
  @cmd_options ||= []
@@ -19,6 +19,10 @@ module Clitopic
19
19
  @banner ||= "Usage: #{Clitopic.name} #{self.fullname} [options]"
20
20
  end
21
21
 
22
+ def inherited_options(*cmds)
23
+ @inherited_options ||= cmds
24
+ end
25
+
22
26
  def short_description
23
27
  if @short_description.nil?
24
28
  if description
@@ -98,22 +102,25 @@ module Clitopic
98
102
  cmd_defaults = defaults["commands"][self.name]
99
103
  end
100
104
  else
105
+
101
106
  if defaults.has_key?("topics") && defaults["topics"].has_key?(self.topic.name)
102
107
  cmd_defaults = defaults['topics'][self.topic.name][self.name]
103
108
  topic_opts = defaults['topics'][self.topic.name]['topic_options']
109
+ load_options(topic_opts)
110
+ if !cmd_defaults.nil?
111
+ load_options(cmd_defaults["options"])
112
+ if cmd_defaults["args"] && !arguments
113
+ @arguments += Array(cmd_defaults["args"])
114
+ end
115
+ end
116
+ self.inherited_options.each do |cmd|
117
+ if defaults["topics"].has_key?(self.topic.name)
118
+ cmd_opts = defaults['topics'][self.topic.name][cmd.to_s]
119
+ load_options(cmd_opts["options"]) if !cmd_opts.nil?
120
+ end
121
+ end
104
122
  end
105
123
  end
106
-
107
- load_options(topic_opts)
108
-
109
- if cmd_defaults.nil?
110
- return
111
- end
112
-
113
- load_options(cmd_defaults["options"])
114
- if cmd_defaults["args"] && !arguments
115
- @arguments += Array(cmd_defaults["args"])
116
- end
117
124
  end
118
125
 
119
126
  def topic(arg=nil)
@@ -35,6 +35,9 @@ module Clitopic
35
35
  class << self
36
36
  def cmd_opts(cmd, opts)
37
37
  if cmd.cmd_options.size > 0 && (!cmd.hidden || options[:hidden])
38
+ cmd_comment = "#{cmd.name}$comment"
39
+ opts[cmd_comment] = {}
40
+ opts = opts[cmd_comment]
38
41
  opts[cmd.name] = {"options" => {}, "args" => []}
39
42
  cmd.cmd_options.each do |opt|
40
43
  opts[cmd.name]["options"][opt[:name].to_s] = opt[:default]
@@ -60,14 +63,16 @@ module Clitopic
60
63
  opts['topics'] = {}
61
64
  Clitopic::Topics.topics.each do |topic_name, topic|
62
65
  if (!topic.hidden || options[:hidden])
63
- opts['topics'][topic_name] = {}
64
- opts['topics'][topic_name]["topic_options"] = {} if topic.topic_options.size > 0
66
+ topic_comment = "#{topic_name}$comment"
67
+ opts['topics'][topic_comment] = {}
68
+ opts['topics'][topic_comment][topic_name] = {}
69
+ opts['topics'][topic_comment][topic_name]["topic_options"] = {} if topic.topic_options.size > 0
65
70
  topic.topic_options.each do |opt|
66
- opts['topics'][topic_name]["topic_options"][opt[:name].to_s] = opt[:default]
71
+ opts['topics'][topic_comment][topic_name]["topic_options"][opt[:name].to_s] = opt[:default]
67
72
  end
68
73
  if topic.commands.size > 0
69
74
  topic.commands.each do |c, cmd|
70
- cmd_opts(cmd, opts['topics'][topic_name])
75
+ cmd_opts(cmd, opts['topics'][topic_comment][topic_name])
71
76
  end
72
77
  end
73
78
  end
@@ -82,12 +87,37 @@ module Clitopic
82
87
  end
83
88
  end
84
89
  puts "write: #{file}"
90
+ yaml = opts.to_yaml
91
+
92
+ Clitopic::Topics.topics.each do |topic_name, topic|
93
+ yaml = yaml.gsub("#{topic_name}$comment:", topic_comment(topic))
94
+ if topic.commands.size > 0
95
+ topic.commands.each do |c, cmd|
96
+ yaml = yaml.gsub("#{c}$comment:", cmd_comment(cmd))
97
+ end
98
+ end
99
+
100
+ end
101
+
85
102
  File.open(file, 'wb') do |file|
86
- file.write(opts.to_yaml)
103
+ file.write(yaml)
87
104
  end
88
105
  return opts
89
106
  end
90
107
 
108
+ def topic_comment(topic)
109
+ "\n # Topic: #{topic.name}\n" +
110
+ " # #{topic.description.gsub("\n", "\n # ")}"
111
+ end
112
+
113
+ def cmd_comment(cmd)
114
+ "\n # #{cmd.fullname}\n" +
115
+ " # #{cmd.short_description}"
116
+ end
117
+
118
+ def opt_comment(opt)
119
+ "# "
120
+ end
91
121
  def call
92
122
  puts @options
93
123
  if @arguments.size == 0
@@ -8,18 +8,6 @@ module Clitopic
8
8
  end
9
9
 
10
10
  module Command
11
- class Help2 < Clitopic::Command::Base
12
- register name: 'help2',
13
- description: "Display helps",
14
- banner: "Display helps",
15
- topic: "help"
16
-
17
- option :all, "--all", "Display all topics with all commands"
18
- option :topics, "--topics", "Display all availables topics"
19
- option :topic, "--topic=TOPIC", "Display availables commands for the TOPIC"
20
- option :with_hidden, "--with-hidden", "Include hidden commands/topics"
21
- end
22
-
23
11
  class Help < Clitopic::Command::Base
24
12
  register name: 'index',
25
13
  banner: "Usage: #{Clitopic.name} help [COMMAND]",
@@ -438,6 +438,7 @@ module Clitopic
438
438
  end
439
439
 
440
440
  def find_default_file
441
+ file = nil
441
442
  Clitopic.default_files.each do |f|
442
443
  if File.exist?(f)
443
444
  file = f
@@ -30,14 +30,23 @@ module Clitopic
30
30
  parser.base.long.delete('version')
31
31
  process_options(parser, self.cmd_options)
32
32
 
33
- if !self.topic.nil? && self.topic.topic_options.size > 0
34
- parser.separator ""
35
- parser.separator "Topic options:"
36
- process_options(parser, self.topic.topic_options)
33
+ if !self.topic.nil?
34
+ self.inherited_options.each do |cmd|
35
+ cmd = self.topic.commands[cmd.to_s]
36
+ parser.separator ""
37
+ parser.separator "'#{cmd.fullname}' inherited options"
38
+ process_options(parser, cmd.cmd_options)
39
+ end
40
+
41
+ if self.topic.topic_options.size > 0
42
+ parser.separator ""
43
+ parser.separator "Topic options"
44
+ process_options(parser, self.topic.topic_options)
45
+ end
37
46
  end
38
47
 
39
48
  parser.separator ""
40
- parser.separator "Common options:"
49
+ parser.separator "Common options"
41
50
  process_options(parser, Clitopic::Commands.global_options)
42
51
 
43
52
  # No argument, shows at tail. This will print an options summary.
@@ -1,3 +1,3 @@
1
1
  module Clitopic
2
- VERSION = '0.9.9'
2
+ VERSION = '0.9.10'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cli-topic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antoine Legrand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-07 00:00:00.000000000 Z
11
+ date: 2016-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec