rubycom 0.3.2 → 0.4.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 +8 -8
- data/README.md +162 -146
- data/Rakefile +12 -12
- data/lib/rubycom.rb +156 -226
- data/lib/rubycom/arg_parse.rb +252 -0
- data/lib/rubycom/command_interface.rb +97 -0
- data/lib/rubycom/completions.rb +62 -0
- data/lib/rubycom/error_handler.rb +15 -0
- data/lib/rubycom/executor.rb +23 -0
- data/lib/rubycom/helpers.rb +98 -0
- data/lib/rubycom/output_handler.rb +15 -0
- data/lib/rubycom/parameter_extract.rb +262 -0
- data/lib/rubycom/singleton_commands.rb +78 -0
- data/lib/rubycom/sources.rb +99 -0
- data/lib/rubycom/version.rb +1 -1
- data/lib/rubycom/yard_doc.rb +146 -0
- data/rubycom.gemspec +14 -16
- data/test/rubycom/arg_parse_test.rb +247 -0
- data/test/rubycom/command_interface_test.rb +293 -0
- data/test/rubycom/completions_test.rb +94 -0
- data/test/rubycom/error_handler_test.rb +72 -0
- data/test/rubycom/executor_test.rb +64 -0
- data/test/rubycom/helpers_test.rb +467 -0
- data/test/rubycom/output_handler_test.rb +76 -0
- data/test/rubycom/parameter_extract_test.rb +141 -0
- data/test/rubycom/rubycom_test.rb +290 -548
- data/test/rubycom/singleton_commands_test.rb +122 -0
- data/test/rubycom/sources_test.rb +59 -0
- data/test/rubycom/util_test_bin.rb +8 -0
- data/test/rubycom/util_test_composite.rb +23 -20
- data/test/rubycom/util_test_module.rb +142 -112
- data/test/rubycom/util_test_no_singleton.rb +2 -2
- data/test/rubycom/util_test_sub_module.rb +13 -0
- data/test/rubycom/yard_doc_test.rb +165 -0
- metadata +61 -24
- data/lib/rubycom/arguments.rb +0 -133
- data/lib/rubycom/commands.rb +0 -63
- data/lib/rubycom/documentation.rb +0 -212
- data/test/rubycom/arguments_test.rb +0 -289
- data/test/rubycom/commands_test.rb +0 -51
- data/test/rubycom/documentation_test.rb +0 -186
- data/test/rubycom/util_test_job.yaml +0 -21
- data/test/rubycom/utility_tester.rb +0 -17
data/lib/rubycom/commands.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
module Rubycom
|
2
|
-
module Commands
|
3
|
-
|
4
|
-
# Retrieves the singleton methods in the given base and included Modules
|
5
|
-
#
|
6
|
-
# @param [Module] base the module which invoked 'include Rubycom'
|
7
|
-
# @param [Boolean] all if true recursively search for included modules' commands, if false return only top level commands
|
8
|
-
# @return [Hash] a Hash of Symbols representing the command methods in the given base and it's included modules (if all=true)
|
9
|
-
def self.get_commands(base, all=true)
|
10
|
-
return {} if base.nil? || !base.respond_to?(:singleton_methods) || !base.respond_to?(:included_modules)
|
11
|
-
{
|
12
|
-
base.name.to_sym => {
|
13
|
-
commands: base.singleton_methods(true).select { |sym| ![:included, :extended].include?(sym) },
|
14
|
-
inclusions: base.included_modules.select { |mod|
|
15
|
-
![:Rubycom].include?(mod.name.to_sym)
|
16
|
-
}.map { |mod|
|
17
|
-
all ? self.get_commands(mod) : mod.name.to_sym
|
18
|
-
}
|
19
|
-
}
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
# Discovers the commands specified in the given base without considering the commands contained in sub-modules
|
24
|
-
#
|
25
|
-
# @param [Module] base the base Module to search
|
26
|
-
# @return [Array] a list of command name symbols which are defined in the given Module
|
27
|
-
def self.get_top_level_commands(base)
|
28
|
-
return {} if base.nil? || !base.respond_to?(:singleton_methods) || !base.respond_to?(:included_modules)
|
29
|
-
excluded_commands = [:included, :extended]
|
30
|
-
excluded_modules = [:Rubycom]
|
31
|
-
base.singleton_methods(true).select { |sym| !excluded_commands.include?(sym) } +
|
32
|
-
base.included_modules.select { |mod| !excluded_modules.include?(mod.name.to_sym) }.map { |mod| mod.name.to_sym }.flatten
|
33
|
-
end
|
34
|
-
|
35
|
-
# Discovers the commands specified in the given base and included Modules
|
36
|
-
#
|
37
|
-
# @param [Module] base the base Module to search
|
38
|
-
# @return [Hash] a set of command name symbols mapped to containing Modules
|
39
|
-
def self.index_commands(base)
|
40
|
-
excluded_commands = [:included, :extended]
|
41
|
-
excluded_modules = [:Rubycom]
|
42
|
-
Hash[base.singleton_methods(true).select { |sym| !excluded_commands.include?(sym) }.map { |sym|
|
43
|
-
[sym, base]
|
44
|
-
}].merge(
|
45
|
-
base.included_modules.select { |mod| !excluded_modules.include?(mod.name.to_sym) }.map { |mod|
|
46
|
-
self.index_commands(mod)
|
47
|
-
}.reduce(&:merge) || {}
|
48
|
-
)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Looks up the commands which will be available on the given base Module and returns the longest command name
|
52
|
-
# Used in arranging the command list format
|
53
|
-
#
|
54
|
-
# @param [Module] base the base Module to look up
|
55
|
-
# @return [String] the longest command name which will show in a list of commands for the given base Module
|
56
|
-
def self.get_longest_command_name(base)
|
57
|
-
return '' if base.nil?
|
58
|
-
self.get_commands(base, false).map { |_, mod_hash|
|
59
|
-
mod_hash[:commands] + mod_hash[:inclusions].flatten }.flatten.max_by(&:size) or ''
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
@@ -1,212 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/commands.rb"
|
2
|
-
|
3
|
-
module Rubycom
|
4
|
-
module Documentation
|
5
|
-
|
6
|
-
# Retrieves the summary for each command method in the given Module
|
7
|
-
#
|
8
|
-
# @param [Module] base the module which invoked 'include Rubycom'
|
9
|
-
# @return [String] the summary for each command method in the given Module
|
10
|
-
def self.get_summary(base)
|
11
|
-
Commands.get_top_level_commands(base).each_with_index.map { |sym, index|
|
12
|
-
"#{"Commands:\n" if index == 0}" << self.get_command_summary(base, sym, self.get_separator(sym, Commands.get_longest_command_name(base).length))
|
13
|
-
}.reduce(:+) or "No Commands found for #{base}."
|
14
|
-
end
|
15
|
-
|
16
|
-
# Creates a separator with the appropriate spacing to line up a command/description pair in a command list
|
17
|
-
#
|
18
|
-
# @param [Symbol] sym
|
19
|
-
# @param [Integer] spacer_length
|
20
|
-
# @return [String] a spaced separator String for use in a command/description list
|
21
|
-
def self.get_separator(sym, spacer_length=0)
|
22
|
-
[].unshift(" " * (spacer_length - sym.to_s.length)).join << " - "
|
23
|
-
end
|
24
|
-
|
25
|
-
# Retrieves the summary for the given command_name
|
26
|
-
#
|
27
|
-
# @param [Module] base the module which invoked 'include Rubycom'
|
28
|
-
# @param [String] command_name the command to retrieve usage for
|
29
|
-
# @return [String] a summary of the given command_name
|
30
|
-
def self.get_command_summary(base, command_name, separator = ' - ')
|
31
|
-
raise CLIError, "Can not get usage for #{command_name} with base: #{base||"nil"}" if base.nil? || !base.respond_to?(:included_modules)
|
32
|
-
return 'No command specified.' if command_name.nil? || command_name.length == 0
|
33
|
-
if base.included_modules.map { |mod| mod.name.to_sym }.include?(command_name.to_sym)
|
34
|
-
desc = self.get_module_doc(command_name)
|
35
|
-
else
|
36
|
-
raise CLIError, "Invalid command for #{base}, #{command_name}" unless base.public_methods.include?(command_name.to_sym)
|
37
|
-
desc = self.get_doc(base.public_method(command_name.to_sym))[:desc].join("\n") rescue ""
|
38
|
-
end
|
39
|
-
(desc.nil?||desc=='nil'||desc.length==0) ? "#{command_name}\n" : self.get_formatted_summary(command_name, desc, separator)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Arranges the given command_name and command_description with the separator in a standard format
|
43
|
-
#
|
44
|
-
# @param [String] command_name the command format
|
45
|
-
# @param [String] command_description the description for the given command
|
46
|
-
# @param [String] separator optional separator to use
|
47
|
-
def self.get_formatted_summary(command_name, command_description, separator = ' - ')
|
48
|
-
width = 95
|
49
|
-
prefix = command_name.to_s.split(//).map { " " }.join + separator.split(//).map { " " }.join
|
50
|
-
line_width = width - prefix.length
|
51
|
-
description_msg = command_description.gsub(/(.{1,#{line_width}})(?: +|$)\n?|(.{#{line_width}})/, "#{prefix}"+'\1\2'+"\n")
|
52
|
-
"#{command_name}#{separator}#{description_msg.lstrip}"
|
53
|
-
end
|
54
|
-
|
55
|
-
# Retrieves the usage description for the given Module with a list of command methods
|
56
|
-
#
|
57
|
-
# @param [Module] base the module which invoked 'include Rubycom'
|
58
|
-
# @return [String] the usage description for the module with a list of command methods
|
59
|
-
def self.get_usage(base)
|
60
|
-
return '' if base.nil? || !base.respond_to?(:included_modules)
|
61
|
-
return '' if Commands.get_top_level_commands(base).size == 0
|
62
|
-
"Usage:\n #{base} <command> [args]\n\n" << self.get_summary(base)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Retrieves the usage description for the given command_name
|
66
|
-
#
|
67
|
-
# @param [Module] base the module which invoked 'include Rubycom'
|
68
|
-
# @param [String] command_name the command to retrieve usage for
|
69
|
-
# @param [Array] args the remaining args other than the command_name, used of sub-command look-ups
|
70
|
-
# @return [String] the detailed usage description for the given command_name
|
71
|
-
def self.get_command_usage(base, command_name, args=[])
|
72
|
-
raise CLIError, "Can not get usage for #{command_name} with base: #{base||"nil"}" if base.nil? || !base.respond_to?(:included_modules)
|
73
|
-
return 'No command specified.' if command_name.nil? || command_name.length == 0
|
74
|
-
if base.included_modules.map { |mod| mod.name.to_sym }.include?(command_name.to_sym)
|
75
|
-
if args.empty?
|
76
|
-
self.get_usage(eval(command_name.to_s))
|
77
|
-
else
|
78
|
-
self.get_command_usage(eval(command_name.to_s), args[0], args[1..-1])
|
79
|
-
end
|
80
|
-
else
|
81
|
-
raise CLIError, "Invalid command for #{base}, #{command_name}" unless base.public_methods.include?(command_name.to_sym)
|
82
|
-
m = base.public_method(command_name.to_sym)
|
83
|
-
method_doc = self.get_doc(m) || {}
|
84
|
-
|
85
|
-
msg = "Usage: #{m.name}#{self.get_param_usage(m)}\n"
|
86
|
-
msg << "Parameters:\n " unless m.parameters.empty?
|
87
|
-
msg << "#{method_doc[:param].join("\n ")}\n" unless method_doc[:param].nil?
|
88
|
-
msg << "Returns:\n " unless method_doc[:return].nil?
|
89
|
-
msg << "#{method_doc[:return].join("\n ")}\n" unless method_doc[:return].nil?
|
90
|
-
msg
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Discovers the given Method's parameters and uses them to build a formatted usage string
|
95
|
-
#
|
96
|
-
# @param [Method] method the Method object to generate usage for
|
97
|
-
def self.get_param_usage(method)
|
98
|
-
return "" if method.parameters.nil? || method.parameters.empty?
|
99
|
-
Arguments.get_param_definitions(method).group_by { |_, hsh|
|
100
|
-
hsh[:type]
|
101
|
-
}.map { |key, val_arr|
|
102
|
-
vals = Hash[*val_arr.flatten]
|
103
|
-
{
|
104
|
-
key => if key == :opt
|
105
|
-
vals.map { |param, val_hsh| "-#{param.to_s}=#{val_hsh[:default]}" }
|
106
|
-
elsif key == :req
|
107
|
-
vals.keys.map { |param| " <#{param.to_s}>" }
|
108
|
-
else
|
109
|
-
vals.keys.map { |param| " [&#{param.to_s}]" }
|
110
|
-
end
|
111
|
-
}
|
112
|
-
}.reduce(&:merge).map { |type, param_arr|
|
113
|
-
if type == :opt
|
114
|
-
" [#{param_arr.join("|")}]"
|
115
|
-
else
|
116
|
-
param_arr.join
|
117
|
-
end
|
118
|
-
}.join
|
119
|
-
end
|
120
|
-
|
121
|
-
# Retrieves the given module's documentation from it's source code
|
122
|
-
#
|
123
|
-
# @param [String] base_name
|
124
|
-
# @return [String] the documentation text from the top of the specified module
|
125
|
-
def self.get_module_doc(base_name)
|
126
|
-
begin
|
127
|
-
mod_const = Kernel.const_get(base_name.to_sym)
|
128
|
-
File.read(mod_const.public_method(mod_const.singleton_methods().first).source_location.first).split(//).reduce("") { |str, c|
|
129
|
-
unless str.gsub("\n", '').gsub(/\s+/, '').include?("module#{mod_const}")
|
130
|
-
str << c
|
131
|
-
end
|
132
|
-
str
|
133
|
-
}.split("\n").select { |line| line.strip.match(/^#/) && !line.strip.match(/^#!/) }.map { |line| line.strip.gsub(/^#+/, '') }.join("\n")
|
134
|
-
rescue
|
135
|
-
""
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# Retrieves the given method's documentation from it's source code
|
140
|
-
#
|
141
|
-
# @param [Method] method the Method who's documentation should be retrieved
|
142
|
-
# @return [Hash] a Hash representing the given Method's documentation, documentation parsed as follows:
|
143
|
-
# :desc = the first general method comment lines,
|
144
|
-
# :word = each @word comment (i.e.- a line starting with @param will be saved as :param => ["line"])
|
145
|
-
def self.get_doc(method)
|
146
|
-
method.comment.split("\n").map { |line|
|
147
|
-
line.gsub(/#\s*/, '') }.group_by { |doc|
|
148
|
-
if doc.match(/^@\w+/).nil?
|
149
|
-
:desc
|
150
|
-
else
|
151
|
-
doc.match(/^@\w+/).to_s.gsub('@', '').to_sym
|
152
|
-
end
|
153
|
-
}.map { |key, val|
|
154
|
-
Hash[key, val.map { |val_line| val_line.gsub(/^@\w+/, '').lstrip }.select { |line| line != '' }]
|
155
|
-
}.reduce(&:merge)
|
156
|
-
end
|
157
|
-
|
158
|
-
# @return [String] the usage message for Rubycom's default commands
|
159
|
-
def self.get_default_commands_usage()
|
160
|
-
<<-END.gsub(/^ {6}/,'')
|
161
|
-
|
162
|
-
Default Commands:
|
163
|
-
help - prints this help page
|
164
|
-
job - run a job file
|
165
|
-
register_completions - setup bash tab completion
|
166
|
-
tab_complete - print a list of possible matches for a given word
|
167
|
-
END
|
168
|
-
end
|
169
|
-
|
170
|
-
# @return [String] the usage message for Rubycom's job runner
|
171
|
-
def self.get_job_usage(base)
|
172
|
-
<<-END.gsub(/^ {6}/,'')
|
173
|
-
Usage: #{base} job <job_path>
|
174
|
-
Parameters:
|
175
|
-
[String] job_path the path to the job yaml to be run
|
176
|
-
Details:
|
177
|
-
A job yaml is any yaml file which follows the format below.
|
178
|
-
* The env: key shown below is optional
|
179
|
-
* The steps: key must contain a set of numbered steps as shown
|
180
|
-
* The desc: key shown below is an optional context for the job's log output
|
181
|
-
* Other than cmd: there may be as many keys in a numbered command as you choose
|
182
|
-
---
|
183
|
-
env:
|
184
|
-
test_msg: Hello World
|
185
|
-
test_arg: 123
|
186
|
-
working_dir: ./test
|
187
|
-
steps:
|
188
|
-
1:
|
189
|
-
desc: Run test command with environment variable
|
190
|
-
test_context: Some more log context
|
191
|
-
cmd: ruby env[working_dir]/test.rb test_command env[test_msg]
|
192
|
-
2:
|
193
|
-
cmd: ls env[working_dir]
|
194
|
-
END
|
195
|
-
end
|
196
|
-
|
197
|
-
def self.get_register_completions_usage(base)
|
198
|
-
<<-END.gsub(/^ {6}/,'')
|
199
|
-
Usage: #{base} register_completions
|
200
|
-
END
|
201
|
-
end
|
202
|
-
|
203
|
-
def self.get_tab_complete_usage(base)
|
204
|
-
<<-END.gsub(/^ {6}/,'')
|
205
|
-
Usage: #{base} tab_complete <word>
|
206
|
-
Parameters:
|
207
|
-
[String] word the word or partial word to find matches for
|
208
|
-
END
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
212
|
-
end
|
@@ -1,289 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../../lib/rubycom/arguments.rb"
|
2
|
-
|
3
|
-
require "#{File.dirname(__FILE__)}/util_test_module.rb"
|
4
|
-
require "#{File.dirname(__FILE__)}/util_test_composite.rb"
|
5
|
-
require "#{File.dirname(__FILE__)}/util_test_no_singleton.rb"
|
6
|
-
|
7
|
-
require 'test/unit'
|
8
|
-
|
9
|
-
class ArgumentsTest < Test::Unit::TestCase
|
10
|
-
|
11
|
-
def test_parse_arg_string
|
12
|
-
test_arg = "test_arg"
|
13
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
14
|
-
expected = {rubycom_non_opt_arg: "test_arg"}
|
15
|
-
assert_equal(expected, result)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_parse_arg_fixnum
|
19
|
-
test_arg = "1234512415435"
|
20
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
21
|
-
expected = {rubycom_non_opt_arg: 1234512415435}
|
22
|
-
assert_equal(expected, result)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_parse_arg_float
|
26
|
-
test_arg = "12345.67890"
|
27
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
28
|
-
expected = {rubycom_non_opt_arg: 12345.67890}
|
29
|
-
assert_equal(expected, result)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_parse_arg_timestamp
|
33
|
-
time = Time.new
|
34
|
-
test_arg = time.to_s
|
35
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
36
|
-
expected = {rubycom_non_opt_arg: time}
|
37
|
-
assert_equal(expected[:rubycom_non_opt_arg].to_i, result[:rubycom_non_opt_arg].to_i)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_parse_arg_datetime
|
41
|
-
time = Time.new("2013-05-08 00:00:00 -0500")
|
42
|
-
date = Date.new(time.year, time.month, time.day)
|
43
|
-
test_arg = date.to_s
|
44
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
45
|
-
expected = {rubycom_non_opt_arg: date}
|
46
|
-
assert_equal(expected, result)
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_parse_arg_array
|
50
|
-
test_arg = ["1", 2, "a", 'b']
|
51
|
-
result = Rubycom::Arguments.parse_arg(test_arg.to_s)
|
52
|
-
expected = {rubycom_non_opt_arg: test_arg}
|
53
|
-
assert_equal(expected, result)
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_parse_arg_hash
|
57
|
-
time = Time.new.to_s
|
58
|
-
test_arg = ":a: \"#{time}\""
|
59
|
-
result = Rubycom::Arguments.parse_arg(test_arg.to_s)
|
60
|
-
expected = {rubycom_non_opt_arg: {a: time}}
|
61
|
-
assert_equal(expected, result)
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_parse_arg_hash_group
|
65
|
-
test_arg = ":a: [1,2]\n:b: 1\n:c: test\n:d: 1.0\n:e: \"2013-05-08 23:21:52 -0500\"\n"
|
66
|
-
result = Rubycom::Arguments.parse_arg(test_arg.to_s)
|
67
|
-
expected = {rubycom_non_opt_arg: {:a => [1, 2], :b => 1, :c => "test", :d => 1.0, :e => "2013-05-08 23:21:52 -0500"}}
|
68
|
-
assert_equal(expected, result)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_parse_arg_yaml
|
72
|
-
test_arg = {:a => ["1", 2, "a", 'b'], :b => 1, :c => "test", :d => "#{Time.now.to_s}"}
|
73
|
-
result = Rubycom::Arguments.parse_arg(test_arg.to_yaml)
|
74
|
-
expected = {rubycom_non_opt_arg: test_arg}
|
75
|
-
assert_equal(expected, result)
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_parse_arg_code
|
79
|
-
test_arg = 'def self.test_code_method; raise "Fail - test_parse_arg_code";end'
|
80
|
-
result = Rubycom::Arguments.parse_arg(test_arg.to_s)
|
81
|
-
expected = {rubycom_non_opt_arg: 'def self.test_code_method; raise "Fail - test_parse_arg_code";end'}
|
82
|
-
assert_equal(expected, result)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_parse_opt_string_eq
|
86
|
-
test_arg = "-test_arg=\"test\""
|
87
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
88
|
-
expected = {test_arg: "test"}
|
89
|
-
assert_equal(expected, result)
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_parse_opt_string_sp
|
93
|
-
test_arg = "-test_arg \"test\""
|
94
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
95
|
-
expected = {test_arg: "test"}
|
96
|
-
assert_equal(expected, result)
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_parse_opt_long_string_eq
|
100
|
-
test_arg = "--test_arg=\"test\""
|
101
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
102
|
-
expected = {test_arg: "test"}
|
103
|
-
assert_equal(expected, result)
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_parse_opt_long_string_sp
|
107
|
-
test_arg = "--test_arg \"test\""
|
108
|
-
result = Rubycom::Arguments.parse_arg(test_arg)
|
109
|
-
expected = {test_arg: "test"}
|
110
|
-
assert_equal(expected, result)
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_get_param_definitions
|
114
|
-
test_method = UtilTestModule.public_method('test_command_with_args')
|
115
|
-
expected = {:test_arg => {:def => "test_arg", :type => :req, :default => :nil_rubycom_required_param}, :another_test_arg => {:def => "another_test_arg", :type => :req, :default => :nil_rubycom_required_param}}
|
116
|
-
result = Rubycom::Arguments.get_param_definitions(test_method)
|
117
|
-
assert_equal(expected, result)
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_get_param_definitions_no_args
|
121
|
-
test_method = UtilTestModule.public_method('test_command')
|
122
|
-
expected = {}
|
123
|
-
result = Rubycom::Arguments.get_param_definitions(test_method)
|
124
|
-
assert_equal(expected, result)
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_get_param_definitions_arr_param
|
128
|
-
test_method = UtilTestModule.public_method('test_command_options_arr')
|
129
|
-
expected = {:test_option => {:def => "test_option=\"test_option_default\"", :type => :opt, :default => "test_option_default"}, :test_options => {:def => "*test_options", :type => :rest, :default => :nil_rubycom_required_param}}
|
130
|
-
result = Rubycom::Arguments.get_param_definitions(test_method)
|
131
|
-
assert_equal(expected, result)
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_get_param_definitions_all_options
|
135
|
-
test_method = UtilTestModule.public_method('test_command_all_options')
|
136
|
-
expected = {:test_arg => {:def => "test_arg='test_arg_default'", :type => :opt, :default => "test_arg_default"}, :test_option => {:def => "test_option='test_option_default'", :type => :opt, :default => "test_option_default"}}
|
137
|
-
result = Rubycom::Arguments.get_param_definitions(test_method)
|
138
|
-
assert_equal(expected, result)
|
139
|
-
end
|
140
|
-
|
141
|
-
def test_get_param_definitions_mixed
|
142
|
-
test_method = UtilTestModule.public_method('test_command_with_options')
|
143
|
-
expected = {:test_arg => {:def => "test_arg", :type => :req, :default => :nil_rubycom_required_param}, :test_option => {:def => "test_option='option_default'", :type => :opt, :default => "option_default"}}
|
144
|
-
result = Rubycom::Arguments.get_param_definitions(test_method)
|
145
|
-
assert_equal(expected, result)
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_parse_args_no_params
|
149
|
-
test_method = UtilTestModule.public_method(:test_command)
|
150
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
151
|
-
arguments = []
|
152
|
-
expected = nil
|
153
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
154
|
-
assert_equal(expected, result)
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_parse_args_one_param
|
158
|
-
test_method = UtilTestModule.public_method(:test_command_with_arg)
|
159
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
160
|
-
arguments = ["abc"]
|
161
|
-
expected = {:test_arg=>"abc"}
|
162
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
163
|
-
assert_equal(expected, result)
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_parse_args_one_param_array
|
167
|
-
test_method = UtilTestModule.public_method(:test_command_with_arg)
|
168
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
169
|
-
arguments = ["[a,b,c,1,2,3]"]
|
170
|
-
expected = {:test_arg=>['a','b','c',1,2,3]}
|
171
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
172
|
-
assert_equal(expected, result)
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_parse_args_one_param_hash
|
176
|
-
test_method = UtilTestModule.public_method(:test_command_with_arg)
|
177
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
178
|
-
arguments = ["{abc: 123}"]
|
179
|
-
expected = {:test_arg=>{"abc"=>123}}
|
180
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
181
|
-
assert_equal(expected, result)
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_parse_args_too_many_args
|
185
|
-
test_method = UtilTestModule.public_method(:test_command)
|
186
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
187
|
-
arguments = ["123"]
|
188
|
-
expected = nil
|
189
|
-
result = nil
|
190
|
-
assert_raise Rubycom::CLIError do
|
191
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
192
|
-
end
|
193
|
-
assert_equal(expected, result)
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_parse_args_too_few_args
|
197
|
-
test_method = UtilTestModule.public_method(:test_command_with_arg)
|
198
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
199
|
-
arguments = []
|
200
|
-
expected = nil
|
201
|
-
result = nil
|
202
|
-
assert_raise Rubycom::CLIError do
|
203
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
204
|
-
end
|
205
|
-
assert_equal(expected, result)
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_parse_args_with_options
|
209
|
-
test_method = UtilTestModule.public_method(:test_command_with_options)
|
210
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
211
|
-
arguments = [";asd"]
|
212
|
-
expected = {:test_arg=>";asd", :test_option=>"option_default"}
|
213
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
214
|
-
assert_equal(expected, result)
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_parse_args_with_options_filled
|
218
|
-
test_method = UtilTestModule.public_method(:test_command_with_options)
|
219
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
220
|
-
arguments = ["[1,2,3]","--test_option=abc"]
|
221
|
-
expected = {:test_arg=>[1, 2, 3], :test_option=>"abc"}
|
222
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
223
|
-
assert_equal(expected, result)
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_parse_args_all_options
|
227
|
-
test_method = UtilTestModule.public_method(:test_command_all_options)
|
228
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
229
|
-
arguments = []
|
230
|
-
expected = {:test_arg=>"test_arg_default", :test_option=>"test_option_default"}
|
231
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
232
|
-
assert_equal(expected, result)
|
233
|
-
end
|
234
|
-
|
235
|
-
def test_parse_args_all_opts_args_entered
|
236
|
-
test_method = UtilTestModule.public_method(:test_command_all_options)
|
237
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
238
|
-
arguments = ["[1,2,3]","abc"]
|
239
|
-
expected = {:test_arg=>[1, 2, 3], :test_option=>"abc"}
|
240
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
241
|
-
assert_equal(expected, result)
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_parse_args_all_opts_filled
|
245
|
-
test_method = UtilTestModule.public_method(:test_command_all_options)
|
246
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
247
|
-
arguments = ["-test_arg='123asd'","--test_option=[b,c,d]"]
|
248
|
-
expected = {:test_arg=>"123asd", :test_option=>["b","c","d"]}
|
249
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
250
|
-
assert_equal(expected, result)
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_parse_args_arr_option
|
254
|
-
test_method = UtilTestModule.public_method(:test_command_arg_arr)
|
255
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
256
|
-
arguments = ["--test_arr=['123','abc']"]
|
257
|
-
expected = {:test_arr=>["123","abc"]}
|
258
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
259
|
-
assert_equal(expected, result)
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_parse_args_options_arr
|
263
|
-
test_method = UtilTestModule.public_method(:test_command_options_arr)
|
264
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
265
|
-
arguments = [",a2","1","2","3","a","b","c"]
|
266
|
-
expected = {:test_option=>",a2", :test_options=>[1, 2, 3, "a", "b", "c"]}
|
267
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
268
|
-
assert_equal(expected, result)
|
269
|
-
end
|
270
|
-
|
271
|
-
def test_parse_args_options_arr_with_arr
|
272
|
-
test_method = UtilTestModule.public_method(:test_command_options_arr)
|
273
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
274
|
-
arguments = [",a2","[1,2,3,a,b,c]"]
|
275
|
-
expected = {:test_option=>",a2", :test_options=>[[1, 2, 3, "a", "b", "c"]]}
|
276
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
277
|
-
assert_equal(expected, result)
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_parse_args_hash
|
281
|
-
test_method = UtilTestModule.public_method(:test_command_arg_hash)
|
282
|
-
params = Rubycom::Arguments.get_param_definitions(test_method)
|
283
|
-
arguments = ["{testing: 'arg1', 123: 'abc', abc: 123}"]
|
284
|
-
expected = {:test_hash=>{"testing"=>"arg1", 123=>"abc", "abc"=>123}}
|
285
|
-
result = Rubycom::Arguments.resolve(params, arguments)
|
286
|
-
assert_equal(expected, result)
|
287
|
-
end
|
288
|
-
|
289
|
-
end
|