convoy 1.1.0 → 1.2.0
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/convoy.gemspec +14 -11
- data/examples/basic_depends_on +2 -2
- data/lib/convoy/action_command/base.rb +9 -9
- data/lib/convoy/app.rb +13 -13
- data/lib/convoy/error/error.rb +2 -2
- data/lib/convoy/formatter/command.rb +2 -2
- data/lib/convoy/formatter/commands.rb +1 -1
- data/lib/convoy/formatter/default_help_formatter.rb +14 -21
- data/lib/convoy/formatter/option.rb +2 -2
- data/lib/convoy/formatter/options.rb +2 -2
- data/lib/convoy/formatter/shell_command_executor.rb +1 -1
- data/lib/convoy/formatter/stream_output_formatter.rb +10 -10
- data/lib/convoy/formatter/string_grid.rb +3 -3
- data/lib/convoy/formatter/string_splitter.rb +1 -1
- data/lib/convoy/global_pre_parser.rb +2 -2
- data/lib/convoy/logger.rb +3 -3
- data/lib/convoy/option_parser.rb +13 -13
- data/lib/convoy/setup/configuration/generator.rb +7 -7
- data/lib/convoy/setup/configuration/loader.rb +1 -1
- data/lib/convoy/setup/configuration/locator/executing_script_directory.rb +1 -1
- data/lib/convoy/setup/dsl/command.rb +10 -10
- data/lib/convoy/setup/dsl/global.rb +1 -1
- data/lib/convoy/setup/dsl/options.rb +7 -7
- data/lib/convoy/setup_accessor.rb +5 -5
- data/lib/convoy/trollop.rb +42 -33
- data/lib/convoy/utils.rb +2 -2
- data/spec/integration/basic_config_file_spec.rb +3 -3
- data/spec/integration/basic_depends_on_spec.rb +2 -2
- data/spec/lib/convoy/action_command/base_spec.rb +32 -32
- data/spec/lib/convoy/formatter/option_spec.rb +1 -1
- data/spec/lib/convoy/formatter/stream_output_formatter_spec.rb +1 -1
- data/spec/lib/convoy/setup/configuration/merge_tool_spec.rb +10 -10
- data/spec/lib/convoy/setup/configuration/reader_spec.rb +3 -3
- data/spec/lib/convoy/setup/configuration/writer_spec.rb +12 -12
- data/spec/lib/convoy/utils_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/shared_contexts/integration_setup.rb +5 -5
- data/version.rb +1 -0
- metadata +24 -5
- data/.ruby-version +0 -1
- data/.travis.yml +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59707815dce44c3eeb7596a097d6e363b25dd3bd
|
4
|
+
data.tar.gz: a53418545a1796617d42b6f554f920a9f4a16302
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 171f9831e51cb817a983833b55fbf6a865495067f35d5b56f06847ec4f7abb616cf8df8d6ab883c3c47fe3d40c486a85205436c6c19673ca4573f0f7af17504b
|
7
|
+
data.tar.gz: f723e0993a9b3710a94b1256152307de5cd8bda51db5c8563697e164389de50e65752b56603af439c3f256e21ec6bd299dbe4553537fdc1253d982296e91e51a
|
data/convoy.gemspec
CHANGED
@@ -2,20 +2,23 @@ $LOAD_PATH << File.expand_path(File.join('..', 'lib'), __FILE__)
|
|
2
2
|
|
3
3
|
require 'date'
|
4
4
|
|
5
|
+
require_relative 'version'
|
6
|
+
|
5
7
|
Gem::Specification.new do |s|
|
6
|
-
s.name
|
7
|
-
s.version
|
8
|
-
s.date
|
9
|
-
s.summary
|
10
|
-
s.description
|
11
|
-
s.authors
|
12
|
-
s.email
|
13
|
-
s.homepage
|
14
|
-
s.license
|
8
|
+
s.name = 'convoy'
|
9
|
+
s.version = CONVOY_VERSION
|
10
|
+
s.date = Date.today.to_s
|
11
|
+
s.summary = %q{A library that makes building command line apps in ruby so easy, you'll feel like an expert is guiding you through it}
|
12
|
+
s.description = %q{Writing even complex command-line apps should be quick, easy and fun. Convoy takes the excellent Trollop option parser and adds a whole bunch of awesome features to produce a library you will always want to turn to when a 'quick script' is in order.}
|
13
|
+
s.authors = ['Albert Rannetsperger']
|
14
|
+
s.email = 'alb3rtuk@hotmail.com'
|
15
|
+
s.homepage = 'http://github.com/alb3rtuk/convoy'
|
16
|
+
s.license = 'MIT'
|
15
17
|
s.require_paths = ['lib']
|
16
|
-
s.files
|
17
|
-
s.test_files
|
18
|
+
s.files = `git ls-files`.split($/)
|
19
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
18
20
|
s.add_runtime_dependency 'nesty', '~> 1.0', '>= 1.0.2'
|
21
|
+
s.add_runtime_dependency 'blufin-lib', '1.5.0', '>= 1.5.0'
|
19
22
|
s.add_development_dependency 'rspec', '~> 3.1', '>= 3.1.0'
|
20
23
|
s.add_development_dependency 'fakefs', '~> 0.5', '>= 0.5.3'
|
21
24
|
s.add_development_dependency 'rake', '~> 10.3', '>= 10.3.2'
|
data/examples/basic_depends_on
CHANGED
@@ -14,9 +14,9 @@ Convoy::App.create do |app|
|
|
14
14
|
|
15
15
|
opts.dependency :option1, :on => :flag1
|
16
16
|
opts.dependency :option2, :on => [:flag1, :option1]
|
17
|
-
opts.dependency :option3, :on => {:option1 => 'foo'}
|
17
|
+
opts.dependency :option3, :on => { :option1 => 'foo' }
|
18
18
|
#opts.dependency :option4, :on => [{:flag1 => false}, :option1] #This will get you into big trouble as it can never be fulfilled
|
19
|
-
opts.dependency :option4, :on => [{:flag2 => false}, :option1]
|
19
|
+
opts.dependency :option4, :on => [{ :flag2 => false }, :option1]
|
20
20
|
end
|
21
21
|
|
22
22
|
app.action do |options, arguments|
|
@@ -4,22 +4,22 @@ module Convoy
|
|
4
4
|
attr_reader :options, :arguments, :config
|
5
5
|
|
6
6
|
def initialize(options, arguments, config={})
|
7
|
-
@options
|
8
|
-
@arguments
|
9
|
-
@config
|
10
|
-
@command_context
|
11
|
-
@command_options
|
12
|
-
@parent_options
|
7
|
+
@options = options
|
8
|
+
@arguments = arguments
|
9
|
+
@config = config
|
10
|
+
@command_context = nil
|
11
|
+
@command_options = nil
|
12
|
+
@parent_options = nil
|
13
13
|
@grandparent_options = nil
|
14
|
-
@global_options
|
14
|
+
@global_options = nil
|
15
15
|
end
|
16
16
|
|
17
17
|
protected
|
18
18
|
|
19
19
|
def command_context
|
20
20
|
return @command_context if @command_context
|
21
|
-
@command_context
|
22
|
-
options[:global]
|
21
|
+
@command_context = []
|
22
|
+
options[:global] ||= {}
|
23
23
|
current_command_hash = options[:global][:commands] || {}
|
24
24
|
until current_command_hash.keys.empty?
|
25
25
|
key = current_command_hash.keys.first
|
data/lib/convoy/app.rb
CHANGED
@@ -12,16 +12,16 @@ module Convoy
|
|
12
12
|
|
13
13
|
def initialize(option_string, &block)
|
14
14
|
@option_string = option_string
|
15
|
-
@setup
|
16
|
-
@block
|
15
|
+
@setup = nil
|
16
|
+
@block = block
|
17
17
|
end
|
18
18
|
|
19
19
|
def setup_application
|
20
20
|
old_error_sev_threshold = error_logger.sev_threshold
|
21
21
|
begin
|
22
22
|
error_logger.sev_threshold = ::Logger::DEBUG
|
23
|
-
cli_app_configuration
|
24
|
-
@setup
|
23
|
+
cli_app_configuration = Convoy::Setup::Dsl::Global.new(&@block)
|
24
|
+
@setup = Convoy::SetupAccessor.new(cli_app_configuration)
|
25
25
|
self
|
26
26
|
rescue => e
|
27
27
|
handle_convoy_error(e)
|
@@ -44,9 +44,9 @@ module Convoy
|
|
44
44
|
configuration = Convoy::Setup::Configuration::Loader.new(setup, auto_options).configuration
|
45
45
|
|
46
46
|
invoked_options, arguments = Convoy::OptionParser.new(configuration, setup).parse(cli_options)
|
47
|
-
context
|
48
|
-
action
|
49
|
-
current_command
|
47
|
+
context = context_from_options(invoked_options[:global])
|
48
|
+
action = setup.action_for(context)
|
49
|
+
current_command = context.empty? ? :global : context.last
|
50
50
|
raise Convoy::ClientError.new("No action defined for command '#{current_command}'") unless action
|
51
51
|
actual_arguments = Convoy::Arguments.read(arguments, setup.arguments_required_for(context))
|
52
52
|
rescue => e
|
@@ -89,15 +89,15 @@ module Convoy
|
|
89
89
|
def handle_convoy_error(e)
|
90
90
|
if e.kind_of?(Convoy::UserError)
|
91
91
|
print_stacktrace(e)
|
92
|
-
error_logger.debug {'Convoy app failed to execute successfully, due to user error'}
|
92
|
+
error_logger.debug { 'Convoy app failed to execute successfully, due to user error' }
|
93
93
|
exit(Convoy::USER_ERROR_EXIT_CODE)
|
94
94
|
elsif e.kind_of?(Convoy::ClientError)
|
95
95
|
print_stacktrace(e)
|
96
|
-
error_logger.debug {'Convoy app failed to execute successfully, due to client setup error'}
|
96
|
+
error_logger.debug { 'Convoy app failed to execute successfully, due to client setup error' }
|
97
97
|
exit(Convoy::CLIENT_ERROR_EXIT_CODE)
|
98
98
|
else
|
99
99
|
print_convoy_error_message(e)
|
100
|
-
error_logger.debug {'Convoy app failed to execute successfully, due to internal error'}
|
100
|
+
error_logger.debug { 'Convoy app failed to execute successfully, due to internal error' }
|
101
101
|
exit(Convoy::INTERNAL_ERROR_EXIT_CODE)
|
102
102
|
end
|
103
103
|
end
|
@@ -105,11 +105,11 @@ module Convoy
|
|
105
105
|
def handle_action_error(e)
|
106
106
|
if e.kind_of?(Convoy::Error)
|
107
107
|
print_convoy_error_message(e)
|
108
|
-
error_logger.debug {'Convoy app failed to execute successfully, due to internal error'}
|
108
|
+
error_logger.debug { 'Convoy app failed to execute successfully, due to internal error' }
|
109
109
|
exit(Convoy::INTERNAL_ERROR_EXIT_CODE)
|
110
110
|
else
|
111
111
|
print_stacktrace(e)
|
112
|
-
error_logger.debug {'Convoy app failed to execute successfully, due to unknown error'}
|
112
|
+
error_logger.debug { 'Convoy app failed to execute successfully, due to unknown error' }
|
113
113
|
exit(Convoy::EXTERNAL_ERROR_EXIT_CODE)
|
114
114
|
end
|
115
115
|
end
|
@@ -121,7 +121,7 @@ module Convoy
|
|
121
121
|
|
122
122
|
def print_convoy_error_message(e)
|
123
123
|
print_stacktrace(e)
|
124
|
-
error_logger.warn {"\n
|
124
|
+
error_logger.warn { "\n \x1B[48;5;196m Error \x1B[0m \xe2\x86\x92 An internal Convoy error occurred.\n\n You should probably report it to \x1B[38;5;222mAlbert Rannetsperger\x1B[0m or create an issue on his \x1B[38;5;222mGitHub\x1B[0m page (https://github.com/alb3rtuk).\n Make sure to include the stacktrace above (although the way Ruby works, it probably won't be very helpful).\n" }
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
data/lib/convoy/error/error.rb
CHANGED
@@ -4,13 +4,13 @@ module Convoy
|
|
4
4
|
attr_reader :setup, :context
|
5
5
|
|
6
6
|
def initialize(setup, context)
|
7
|
-
@setup
|
7
|
+
@setup = setup
|
8
8
|
@context = context
|
9
9
|
end
|
10
10
|
|
11
11
|
def print(parser)
|
12
|
-
options
|
13
|
-
commands
|
12
|
+
options = Options.new(parser, setup, context)
|
13
|
+
commands = Commands.new(setup, context)
|
14
14
|
current_command = Commands.command_for(setup, context)
|
15
15
|
# Uncomment the following line if you want the screen
|
16
16
|
# to be cleared before the --help messages show.
|
@@ -27,8 +27,8 @@ module Convoy
|
|
27
27
|
# end
|
28
28
|
# end
|
29
29
|
name_help(current_command, f)
|
30
|
-
usage_help(current_command, f)
|
31
30
|
version_help(current_command, f)
|
31
|
+
usage_help(current_command, f)
|
32
32
|
commands_help(commands, f)
|
33
33
|
options_help(options, f)
|
34
34
|
end
|
@@ -37,37 +37,30 @@ module Convoy
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def name_help(current_command, f)
|
40
|
-
# f.puts "\x1B[38;5;84mNAME\x1B[0m"
|
41
40
|
if setup.description_for(context) != ''
|
42
41
|
f.indent(4) do |f|
|
43
|
-
|
44
|
-
# t.row current_command.script_name, '-', setup.summary_for(context)
|
45
|
-
# end
|
46
|
-
# f.newline
|
47
|
-
f.puts(setup.description_for(context), :newlines => 2)
|
42
|
+
f.puts("\x1B[38;5;250m#{setup.description_for(context)}\x1B[0m", :newlines => 2)
|
48
43
|
end
|
49
44
|
end
|
50
45
|
end
|
51
46
|
|
52
|
-
def usage_help(current_command, f)
|
53
|
-
f.puts "\x1B[38;5;84mUSAGE\x1B[0m"
|
54
|
-
f.indent(4) do |f|
|
55
|
-
f.puts current_command.usage, :newlines => 2
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
47
|
def version_help(current_command, f)
|
60
48
|
if setup.version
|
61
|
-
f.puts "\x1B[38;5;84mVERSION\x1B[0m"
|
62
49
|
f.indent(4) do |f|
|
63
|
-
f.puts setup.version, :newlines =>
|
50
|
+
f.puts "\x1B[38;5;250mVersion: \x1B[38;5;46m#{setup.version}\x1B[0m", :newlines => 1
|
64
51
|
end
|
65
52
|
end
|
66
53
|
end
|
67
54
|
|
55
|
+
def usage_help(current_command, f)
|
56
|
+
f.indent(4) do |f|
|
57
|
+
f.puts "\x1B[38;5;250m Usage: \x1B[38;5;46m#{current_command.usage}\x1B[0m", :newlines => 2
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
68
61
|
def options_help(options, f)
|
69
62
|
if options.count > 0
|
70
|
-
f.puts "\x1B[38;5;
|
63
|
+
f.puts " \x1B[38;5;255mFLAGS\x1B[0m"
|
71
64
|
f.indent(4) do |f|
|
72
65
|
f.grid(:columns => 3) do |t|
|
73
66
|
options.each do |option|
|
@@ -106,7 +99,7 @@ module Convoy
|
|
106
99
|
|
107
100
|
def commands_help(commands, f)
|
108
101
|
if commands.count > 0
|
109
|
-
f.puts "\x1B[38;5;
|
102
|
+
f.puts " \x1B[38;5;255mCOMMANDS\x1B[0m"
|
110
103
|
f.indent(4) do |f|
|
111
104
|
f.grid(:columns => 3) do |t|
|
112
105
|
commands.each do |command|
|
@@ -11,7 +11,7 @@ module Convoy
|
|
11
11
|
|
12
12
|
def execute_in_current_shell(success_callback = nil, error_callback = nil)
|
13
13
|
begin
|
14
|
-
result
|
14
|
+
result = `#{command}`
|
15
15
|
process_status = $?
|
16
16
|
raise Convoy::InternalError.new("Shell command exited with a non-zero (#{process_status.exitstatus}) exit code") if process_status.exitstatus != 0
|
17
17
|
success_callback.call(command, result) if success_callback
|
@@ -1,25 +1,25 @@
|
|
1
1
|
module Convoy
|
2
2
|
module Formatter
|
3
3
|
class StreamOutputFormatter
|
4
|
-
DEFAULT_OUTPUT_WIDTH
|
4
|
+
DEFAULT_OUTPUT_WIDTH = 80
|
5
5
|
DEFAULT_INDENT_STRING = ' '
|
6
|
-
DEFAULT_INDENT
|
6
|
+
DEFAULT_INDENT = 0
|
7
7
|
|
8
8
|
attr_reader :stream, :indent_string, :current_indent, :max_output_width, :cursor_position
|
9
9
|
|
10
10
|
def initialize(stream = $stdout, options = {}, &block)
|
11
|
-
@stream
|
11
|
+
@stream = stream
|
12
12
|
@max_output_width = options[:max_output_width] || DEFAULT_OUTPUT_WIDTH
|
13
|
-
@indent_string
|
14
|
-
@current_indent
|
15
|
-
@cursor_position
|
13
|
+
@indent_string = options[:indent_string] || DEFAULT_INDENT_STRING
|
14
|
+
@current_indent = options[:current_indent] || DEFAULT_INDENT
|
15
|
+
@cursor_position = CursorPosition.new(@max_output_width)
|
16
16
|
block.call(self) if block_given?
|
17
17
|
end
|
18
18
|
|
19
19
|
def print(string)
|
20
20
|
splitter_input = pad_string_to_account_for_cursor_position(string.to_s)
|
21
|
-
segments
|
22
|
-
segments
|
21
|
+
segments = StringSplitter.new(max_output_width).split(splitter_input)
|
22
|
+
segments = remove_padding_that_account_for_cursor_position(segments)
|
23
23
|
segments.each do |segment|
|
24
24
|
output_string = "#{current_indent_string}#{segment}"
|
25
25
|
output_string = segment unless cursor_position.newline?
|
@@ -29,7 +29,7 @@ module Convoy
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def puts(string, options = {:newlines => 1})
|
32
|
+
def puts(string, options = { :newlines => 1 })
|
33
33
|
print(string)
|
34
34
|
newline(options[:newlines])
|
35
35
|
end
|
@@ -48,7 +48,7 @@ module Convoy
|
|
48
48
|
def grid(options = {}, &block)
|
49
49
|
if block_given?
|
50
50
|
options[:width] ||= max_output_width
|
51
|
-
grid
|
51
|
+
grid = StringGrid.new(options, &block)
|
52
52
|
puts grid.to_s
|
53
53
|
end
|
54
54
|
end
|
@@ -7,9 +7,9 @@ module Convoy
|
|
7
7
|
attr_accessor :rows
|
8
8
|
|
9
9
|
def initialize(options = {}, &block)
|
10
|
-
@width
|
10
|
+
@width = options[:width] || DEFAULT_WIDTH
|
11
11
|
@column_count = options[:columns] || 3
|
12
|
-
@rows
|
12
|
+
@rows = []
|
13
13
|
block.call(self) if block_given?
|
14
14
|
end
|
15
15
|
|
@@ -80,7 +80,7 @@ module Convoy
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def last_column_width
|
83
|
-
full_fair_column_width
|
83
|
+
full_fair_column_width = max_column_width * column_count + max_column_width_remainder
|
84
84
|
all_but_last_fair_column_width = 0
|
85
85
|
(column_count - 1).times do |index|
|
86
86
|
all_but_last_fair_column_width += fair_column_width(index)
|
@@ -36,7 +36,7 @@ module Convoy
|
|
36
36
|
def split_string(string)
|
37
37
|
result = []
|
38
38
|
if string.length > max_segment_width
|
39
|
-
first_part
|
39
|
+
first_part = string.slice(0, max_segment_width)
|
40
40
|
second_part = string.slice(max_segment_width..-1)
|
41
41
|
result << first_part
|
42
42
|
result << split_string(second_part)
|
@@ -14,8 +14,8 @@ module Convoy
|
|
14
14
|
|
15
15
|
def parse_global_options(cli_options, context = [])
|
16
16
|
stop_words = setup.command_names_for(context).map(&:to_s)
|
17
|
-
parser
|
18
|
-
parser
|
17
|
+
parser = init_parser(stop_words)
|
18
|
+
parser = add_setup_options_to(parser, context)
|
19
19
|
parser.version(setup.version) #set the version if it was provided
|
20
20
|
parser.help_formatter(Convoy::Formatter::DefaultHelpFormatter.new(setup, context))
|
21
21
|
parsed_options = parse_options_string(parser, cli_options)
|
data/lib/convoy/logger.rb
CHANGED
@@ -11,14 +11,14 @@ module Convoy
|
|
11
11
|
def error
|
12
12
|
@error_logger ||= ::Logger.new($stderr).tap do |l|
|
13
13
|
#l.formatter = advanced_error_formatter
|
14
|
-
l.formatter
|
14
|
+
l.formatter = basic_error_formatter
|
15
15
|
l.sev_threshold = ::Logger::WARN
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def output
|
20
20
|
@output_logger ||= ::Logger.new($stdout).tap do |l|
|
21
|
-
l.formatter
|
21
|
+
l.formatter = output_formatter
|
22
22
|
l.sev_threshold = ::Logger::DEBUG
|
23
23
|
l.instance_eval do
|
24
24
|
def puts(message = nil, &block)
|
@@ -33,7 +33,7 @@ module Convoy
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def setup_error_logger(auto_options)
|
36
|
-
error.formatter
|
36
|
+
error.formatter = send(:"#{auto_options.error_formatter}_error_formatter")
|
37
37
|
error.sev_threshold = ::Logger.const_get(auto_options.verbosity)
|
38
38
|
end
|
39
39
|
|
data/lib/convoy/option_parser.rb
CHANGED
@@ -4,7 +4,7 @@ module Convoy
|
|
4
4
|
|
5
5
|
def initialize(configuration, setup)
|
6
6
|
@configuration = configuration
|
7
|
-
@setup
|
7
|
+
@setup = setup
|
8
8
|
end
|
9
9
|
|
10
10
|
def parse(cli_options)
|
@@ -20,7 +20,7 @@ module Convoy
|
|
20
20
|
def init_invoked_options_hash
|
21
21
|
{
|
22
22
|
:global => {
|
23
|
-
:options
|
23
|
+
:options => {},
|
24
24
|
:commands => {}
|
25
25
|
}
|
26
26
|
}
|
@@ -37,9 +37,9 @@ module Convoy
|
|
37
37
|
else
|
38
38
|
command = command_name_from(cli_options)
|
39
39
|
context << command
|
40
|
-
current_options
|
41
|
-
options[command]
|
42
|
-
options[command][:options]
|
40
|
+
current_options = parse_options(cli_options, context)
|
41
|
+
options[command] = {}
|
42
|
+
options[command][:options] = current_options
|
43
43
|
options[command][:commands] = {}
|
44
44
|
parse_command_options(cli_options, context, options[command][:commands])
|
45
45
|
end
|
@@ -47,10 +47,10 @@ module Convoy
|
|
47
47
|
|
48
48
|
def parse_options(cli_options, context = [])
|
49
49
|
stop_words = setup.command_names_for(context).map(&:to_s)
|
50
|
-
parser
|
51
|
-
parser
|
52
|
-
parser
|
53
|
-
parser
|
50
|
+
parser = init_parser(stop_words)
|
51
|
+
parser = add_setup_options_to(parser, context)
|
52
|
+
parser = add_option_conflicts_to(parser, context)
|
53
|
+
parser = default_option_values_from_config_for(parser, context)
|
54
54
|
parser.version(setup.version) #set the version if it was provided
|
55
55
|
parser.help_formatter(Convoy::Formatter::DefaultHelpFormatter.new(setup, context))
|
56
56
|
parsed_options = parse_options_string(parser, cli_options)
|
@@ -86,7 +86,7 @@ module Convoy
|
|
86
86
|
unless configuration.empty?
|
87
87
|
parser.specs.each do |sym, opts|
|
88
88
|
if config_has_value_for_context?(sym, context)
|
89
|
-
default
|
89
|
+
default = config_value_for_context(sym, context)
|
90
90
|
opts[:default] = default
|
91
91
|
if opts[:multi] && default.nil?
|
92
92
|
opts[:default] = [] # multi arguments default to [], not nil
|
@@ -114,7 +114,7 @@ module Convoy
|
|
114
114
|
def config_hash_for_context(context)
|
115
115
|
relevant_config_hash = configuration.global
|
116
116
|
context.each do |command_name|
|
117
|
-
command_name
|
117
|
+
command_name = command_name.to_sym
|
118
118
|
relevant_config_hash = relevant_config_hash[:commands][command_name]
|
119
119
|
relevant_config_hash = ensure_config_hash_has_options_and_commands(relevant_config_hash)
|
120
120
|
end
|
@@ -122,9 +122,9 @@ module Convoy
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def ensure_config_hash_has_options_and_commands(relevant_config_hash)
|
125
|
-
relevant_config_hash
|
125
|
+
relevant_config_hash ||= {}
|
126
126
|
relevant_config_hash[:commands] ||= {}
|
127
|
-
relevant_config_hash[:options]
|
127
|
+
relevant_config_hash[:options] ||= {}
|
128
128
|
relevant_config_hash
|
129
129
|
end
|
130
130
|
|