rubycom 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/rubycom.rb +19 -7
- data/lib/rubycom/version.rb +1 -1
- data/test/rubycom/test_rubycom.rb +55 -5
- data/test/rubycom/util_test_module.rb +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDhjYTIwMGM1YWNmMjc3NWI0ZWY2NTM5NDY1NGM3MjliYTA4MTA2MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmU3YjBkMjYwYTg5ZTY5MjQ1NjBiNDE3ZDNkMWNhY2QyMDYyNDJlZA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmRmOThjZDFjYjRlZTNkMGFjYzViYzQ0M2M2ZGM5Y2U1NDlhNzEzOTFjYTcy
|
10
|
+
NDk0OTRmZDQ3ZjQ5M2JjY2E0ZGU2MzA4NjIyOWIyODIyMDg3ZGM1MTVhOGUy
|
11
|
+
ZTk3MzhhYTQzY2FjMDk1NGNlY2NiN2FjOWE4NTY2NDA5OWQ1YTA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGZmOTU5MDUyMjFmOGI2OTEzODdjY2Q5MTlmYTA1MDE1ZGI0OTE1ZTFmM2Vm
|
14
|
+
MDU3Mjg3NTYwOWVlOWNkOTk1MmFkZDU1ZTE3N2Q0OTkyNGUwNTg5Mzc0NmVj
|
15
|
+
NjJiNjc4ZDU4ODZhMjMzNzM3MjMzY2JkZjJkZTk1ZDZiYjIzYjU=
|
data/lib/rubycom.rb
CHANGED
@@ -108,7 +108,13 @@ module Rubycom
|
|
108
108
|
raise CLIError, "No public method found for symbol: #{command.to_sym}" if method.nil?
|
109
109
|
param_defs = self.get_param_definitions(method)
|
110
110
|
args = self.parse_arguments(param_defs, arguments)
|
111
|
-
|
111
|
+
flatten = false
|
112
|
+
params = method.parameters.map { |arr| flatten = true if arr[0]==:rest; args[arr[1]]}
|
113
|
+
if flatten
|
114
|
+
rest_arr = params.delete_at(-1)
|
115
|
+
rest_arr.each{|arg| params << arg}
|
116
|
+
end
|
117
|
+
(arguments.nil? || arguments.empty?) ? method.call : method.call(*params)
|
112
118
|
end
|
113
119
|
rescue CLIError => e
|
114
120
|
$stderr.puts e
|
@@ -128,18 +134,19 @@ module Rubycom
|
|
128
134
|
def self.parse_arguments(parameters={}, arguments=[])
|
129
135
|
raise CLIError, 'parameters may not be nil' if parameters.nil?
|
130
136
|
raise CLIError, 'arguments may not be nil' if arguments.nil?
|
131
|
-
types = parameters.values.group_by { |hsh| hsh[:type] }.map { |type, defs_arr| Hash[type, defs_arr.length] }.reduce(&:merge) || {}
|
132
|
-
raise CLIError, "Wrong number of arguments. Expected at least #{types[:req]}, received #{arguments.length}" if arguments.length < (types[:req]||0)
|
133
|
-
raise CLIError, "Wrong number of arguments. Expected at most #{(types[:req]||0) + (types[:opt]||0)}, received #{arguments.length}" if types[:rest].nil? && (arguments.length > ((types[:req]||0) + (types[:opt]||0)))
|
134
|
-
|
135
137
|
sorted_args = arguments.map { |arg|
|
136
138
|
Rubycom.parse_arg(arg)
|
137
139
|
}.group_by { |hsh|
|
138
140
|
hsh.keys.first
|
139
141
|
}.map { |key, arr|
|
140
|
-
(key == :rubycom_non_opt_arg) ? Hash[key, arr.map { |hsh| hsh.values }.flatten] : Hash[key, arr.map { |hsh| hsh.values.first }.reduce(&:merge)]
|
142
|
+
(key == :rubycom_non_opt_arg) ? Hash[key, arr.map { |hsh| hsh.values }.flatten(1)] : Hash[key, arr.map { |hsh| hsh.values.first }.reduce(&:merge)]
|
141
143
|
}.reduce(&:merge) || {}
|
142
144
|
|
145
|
+
sorted_arg_count = sorted_args.map{|key,val| val}.flatten(1).length
|
146
|
+
types = parameters.values.group_by { |hsh| hsh[:type] }.map { |type, defs_arr| Hash[type, defs_arr.length] }.reduce(&:merge) || {}
|
147
|
+
raise CLIError, "Wrong number of arguments. Expected at least #{types[:req]}, received #{sorted_arg_count}" if sorted_arg_count < (types[:req]||0)
|
148
|
+
raise CLIError, "Wrong number of arguments. Expected at most #{(types[:req]||0) + (types[:opt]||0)}, received #{sorted_arg_count}" if types[:rest].nil? && (sorted_arg_count > ((types[:req]||0) + (types[:opt]||0)))
|
149
|
+
|
143
150
|
parameters.map { |param_sym, def_hash|
|
144
151
|
if def_hash[:type] == :req
|
145
152
|
raise CLIError, "No argument available for #{param_sym}" if sorted_args[:rubycom_non_opt_arg].nil? || sorted_args[:rubycom_non_opt_arg].length == 0
|
@@ -170,7 +177,12 @@ module Rubycom
|
|
170
177
|
}
|
171
178
|
Hash[k, v]
|
172
179
|
else
|
173
|
-
|
180
|
+
begin
|
181
|
+
parsed_arg = YAML.load("#{arg}")
|
182
|
+
rescue Exception
|
183
|
+
parsed_arg = "#{arg}"
|
184
|
+
end
|
185
|
+
Hash[:rubycom_non_opt_arg, parsed_arg]
|
174
186
|
end
|
175
187
|
end
|
176
188
|
|
data/lib/rubycom/version.rb
CHANGED
@@ -69,8 +69,9 @@ class TestRubycom < Test::Unit::TestCase
|
|
69
69
|
def test_get_command_summary
|
70
70
|
base = UtilTestModule
|
71
71
|
command_name = 'test_command_with_options'
|
72
|
+
expected = "test_command_with_options - A test_command with an optional argument\n"
|
72
73
|
result = Rubycom.get_command_summary(base, command_name)
|
73
|
-
assert_equal(
|
74
|
+
assert_equal(expected.gsub(/\n|\r|\s/, ''), result.gsub(/\n|\r|\s/, ''))
|
74
75
|
end
|
75
76
|
|
76
77
|
def test_get_command_summary_no_command
|
@@ -128,6 +129,7 @@ class TestRubycom < Test::Unit::TestCase
|
|
128
129
|
test_command_arg_false - A test_command with a Boolean argument
|
129
130
|
test_command_arg_arr - A test_command with an array argument
|
130
131
|
test_command_arg_hash - A test_command with an Hash argument
|
132
|
+
test_command_mixed_options - A test_command with several mixed options
|
131
133
|
|
132
134
|
END
|
133
135
|
assert_equal(expected.gsub(/\n|\r|\s/, ''), result.gsub(/\n|\r|\s/, ''))
|
@@ -165,6 +167,7 @@ class TestRubycom < Test::Unit::TestCase
|
|
165
167
|
test_command_arg_false - A test_command with a Boolean argument
|
166
168
|
test_command_arg_arr - A test_command with an array argument
|
167
169
|
test_command_arg_hash - A test_command with an Hash argument
|
170
|
+
test_command_mixed_options - A test_command with several mixed options
|
168
171
|
END
|
169
172
|
assert_equal(expected.gsub(/\n|\r|\s/, ''), result.gsub(/\n|\r|\s/, ''))
|
170
173
|
end
|
@@ -182,10 +185,11 @@ class TestRubycom < Test::Unit::TestCase
|
|
182
185
|
end
|
183
186
|
|
184
187
|
def test_get_top_level_commands
|
185
|
-
test_command_list = [:test_command, :test_command_no_docs, :test_command_with_arg, :test_command_arg_named_arg,
|
186
|
-
:
|
187
|
-
:
|
188
|
-
:test_command_arg_hash
|
188
|
+
test_command_list = [:test_command, :test_command_no_docs, :test_command_with_arg, :test_command_arg_named_arg,
|
189
|
+
:test_command_with_args, :test_command_with_options, :test_command_all_options,
|
190
|
+
:test_command_options_arr, :test_command_with_return, :test_command_arg_timestamp,
|
191
|
+
:test_command_arg_false, :test_command_arg_arr, :test_command_arg_hash,
|
192
|
+
:test_command_mixed_options]
|
189
193
|
result_command_list = Rubycom.get_top_level_commands(UtilTestModule)
|
190
194
|
assert_equal(test_command_list.length, result_command_list.length)
|
191
195
|
test_command_list.each { |sym|
|
@@ -414,6 +418,7 @@ class TestRubycom < Test::Unit::TestCase
|
|
414
418
|
test_command_arg_false - A test_command with a Boolean argument
|
415
419
|
test_command_arg_arr - A test_command with an array argument
|
416
420
|
test_command_arg_hash - A test_command with an Hash argument
|
421
|
+
test_command_mixed_options - A test_command with several mixed options
|
417
422
|
END
|
418
423
|
expected_out = expected
|
419
424
|
assert_equal(expected.gsub(/\n|\r|\s/, ''), result.gsub(/\n|\r|\s/, ''))
|
@@ -700,4 +705,49 @@ class TestRubycom < Test::Unit::TestCase
|
|
700
705
|
$stderr = o_stderr
|
701
706
|
end
|
702
707
|
|
708
|
+
def test_full_run_mixed_args
|
709
|
+
mod = "util_test_module.rb"
|
710
|
+
command = "test_command_mixed_options"
|
711
|
+
args = "testing_arg \"[test1, test2]\" -test_opt='testing_option' \"{a: 'test_hsh_arg'}\" some other args"
|
712
|
+
expected = 'test_arg=testing_arg test_arr=["test1", "test2"] test_opt=testing_option test_hsh={"a"=>"test_hsh_arg"} test_rest=["some", "other", "args"]'+"\n"
|
713
|
+
result = %x(ruby #{File.expand_path(File.dirname(__FILE__))}/#{mod} #{command} #{args})
|
714
|
+
assert_equal(expected, result)
|
715
|
+
end
|
716
|
+
|
717
|
+
def test_full_run_mixed_args_solid_arr
|
718
|
+
mod = "util_test_module.rb"
|
719
|
+
command = "test_command_mixed_options"
|
720
|
+
args = "testing_arg [test1,test2] -test_opt='testing_option' \"{a: 'test_hsh_arg'}\" some other args"
|
721
|
+
expected = 'test_arg=testing_arg test_arr=["test1", "test2"] test_opt=testing_option test_hsh={"a"=>"test_hsh_arg"} test_rest=["some", "other", "args"]'+"\n"
|
722
|
+
result = %x(ruby #{File.expand_path(File.dirname(__FILE__))}/#{mod} #{command} #{args})
|
723
|
+
assert_equal(expected, result)
|
724
|
+
end
|
725
|
+
|
726
|
+
def test_full_run_mixed_args_quoted_solid_arr
|
727
|
+
mod = "util_test_module.rb"
|
728
|
+
command = "test_command_mixed_options"
|
729
|
+
args = 'testing_arg "[test1,test2]" -test_opt="testing_option" "{a: "test_hsh_arg"}" some other args'
|
730
|
+
expected = 'test_arg=testing_arg test_arr=["test1", "test2"] test_opt=testing_option test_hsh={"a"=>"test_hsh_arg"} test_rest=["some", "other", "args"]'+"\n"
|
731
|
+
result = %x(ruby #{File.expand_path(File.dirname(__FILE__))}/#{mod} #{command} #{args})
|
732
|
+
assert_equal(expected, result)
|
733
|
+
end
|
734
|
+
|
735
|
+
def test_full_run_mixed_args_odd_sp
|
736
|
+
mod = "util_test_module.rb"
|
737
|
+
command = "test_command_mixed_options"
|
738
|
+
args = 'testing_arg "[ test1 , test2 ]" -test_opt="testing_option" "{ a: "test_hsh_arg" }" some other args'
|
739
|
+
expected = 'test_arg=testing_arg test_arr=["test1", "test2"] test_opt=testing_option test_hsh={"a"=>"test_hsh_arg"} test_rest=["some", "other", "args"]'+"\n"
|
740
|
+
result = %x(ruby #{File.expand_path(File.dirname(__FILE__))}/#{mod} #{command} #{args})
|
741
|
+
assert_equal(expected, result)
|
742
|
+
end
|
743
|
+
|
744
|
+
def test_full_run_mixed_args_hash_rocket
|
745
|
+
mod = "util_test_module.rb"
|
746
|
+
command = "test_command_mixed_options"
|
747
|
+
args = 'testing_arg "[ test1 , test2 ]" -test_opt="testing_option" "{ :a => "test_hsh_arg" }" some other args'
|
748
|
+
expected = 'test_arg=testing_arg test_arr=["test1", "test2"] test_opt=testing_option test_hsh={ :a => test_hsh_arg } test_rest=["some", "other", "args"]'+"\n"
|
749
|
+
result = %x(ruby #{File.expand_path(File.dirname(__FILE__))}/#{mod} #{command} #{args})
|
750
|
+
assert_equal(expected, result)
|
751
|
+
end
|
752
|
+
|
703
753
|
end
|
@@ -103,5 +103,10 @@ module UtilTestModule
|
|
103
103
|
test_hash
|
104
104
|
end
|
105
105
|
|
106
|
+
# A test_command with several mixed options
|
107
|
+
def self.test_command_mixed_options(test_arg, test_arr=[], test_opt='test_opt_arg', test_hsh={}, *test_rest)
|
108
|
+
"test_arg=#{test_arg} test_arr=#{test_arr} test_opt=#{test_opt} test_hsh=#{test_hsh} test_rest=#{test_rest}"
|
109
|
+
end
|
110
|
+
|
106
111
|
include Rubycom
|
107
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubycom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Purcell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|