console_runner 0.2.3 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.ruby-version +1 -0
- data/.travis.yml +2 -2
- data/console_runner.gemspec +2 -0
- data/lib/command_line_parser.rb +34 -9
- data/lib/console_runner.rb +3 -1
- data/lib/console_runner/version.rb +1 -1
- data/lib/file_parser.rb +22 -20
- data/lib/method_parser.rb +23 -23
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: dc2014166894d41a7a29fcecdbb09d715a26be5c626bf8f674b3cb0d6e7bf397
|
4
|
+
data.tar.gz: 734b4658c19fa4cbaa4dcca9669f3ea65c938d4a302d9ad8d198335afece95f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55722733901c5424f0c194a29b8b9373b82be532dbe766c4eb0b09acf5cc386f949fa253540502f78c0b3dd5404b986049b8b895358e91031be5239b56e85e0d
|
7
|
+
data.tar.gz: 961eafb916dd30cc0513fc04f6dfcdf841fb4424ff3baa9b411e1f975b0a8f4cdce4541fe55edd7c5417789de04c3b734cee568e62eb69da9afec6719c92c441
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.1
|
data/.travis.yml
CHANGED
data/console_runner.gemspec
CHANGED
@@ -32,6 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.executables = ['c_run']
|
33
33
|
spec.require_paths = ['lib']
|
34
34
|
|
35
|
+
spec.required_ruby_version = '>= 2.5.1'
|
36
|
+
|
35
37
|
spec.add_development_dependency 'rake', '>= 12.3.3'
|
36
38
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
37
39
|
spec.add_development_dependency 'pry', '~> 0'
|
data/lib/command_line_parser.rb
CHANGED
@@ -4,7 +4,7 @@ require 'colorize'
|
|
4
4
|
|
5
5
|
# Parses command line and configure #Optimist
|
6
6
|
class CommandLineParser
|
7
|
-
attr_reader :method, :initialize_method
|
7
|
+
attr_reader :method, :initialize_method, :file_parser
|
8
8
|
@debug = false
|
9
9
|
|
10
10
|
# Generate tool help menu.
|
@@ -72,19 +72,44 @@ class CommandLineParser
|
|
72
72
|
next unless method
|
73
73
|
method.optimist_opts.each { |a| @parser.opt(*a) }
|
74
74
|
maybe_help(method.text, action.name.to_s)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
|
76
|
+
|
77
|
+
# Read code defaults
|
78
|
+
# def droplet_create(name, region = 1, image = nil, size = nil, ssh_keys = nil)
|
79
|
+
argv_from_code_defaults = []
|
80
|
+
method.default_values.each do |k, param_value_from_code|
|
81
|
+
param_name_from_code = k.to_sym
|
82
|
+
next if method.option_tags.map(&:name).include?(param_name_from_code.to_s)
|
83
|
+
next if param_value_from_code == 'nil'
|
84
|
+
|
85
|
+
argv_from_code_defaults << "--#{param_name_from_code.to_s.gsub('_', '-')}"
|
86
|
+
argv_from_code_defaults << param_value_from_code
|
87
|
+
end
|
88
|
+
# Raise on constant found
|
89
|
+
constants = file_parser.constants
|
90
|
+
argv_from_code_defaults.map do |x|
|
91
|
+
existing_constant = constants.find { |c| c.name.to_s == x }
|
92
|
+
raise "Constants as default params values are not supported by console_runner: #{existing_constant.name}" if existing_constant
|
82
93
|
end
|
94
|
+
parsed_code_default_args = @parser.parse(argv_from_code_defaults)
|
95
|
+
params_names_from_code = parsed_code_default_args.keys.select { |k| k.to_s.include? '_given' }.map { |k| k.to_s.gsub('_given', '').to_sym }
|
96
|
+
params_with_values_from_code = parsed_code_default_args.select { |k, _| params_names_from_code.include? k }
|
97
|
+
params_with_values_from_code.delete_if { |k, v| v == 'nil' }
|
98
|
+
|
99
|
+
|
100
|
+
parsed_cli_args = @parser.parse ARGV
|
101
|
+
params_names_from_cl = parsed_cli_args.keys.select { |k| k.to_s.include? '_given' }.map { |k| k.to_s.gsub('_given', '').to_sym }
|
102
|
+
params_with_values_from_cl = parsed_cli_args.select { |k, _| params_names_from_cl.include? k }
|
103
|
+
|
104
|
+
|
105
|
+
method.cmd_opts = params_with_values_from_code.merge(params_with_values_from_cl)
|
106
|
+
missed_params = []
|
83
107
|
method.required_parameters.each do |required_param|
|
84
108
|
next if method.options_group? required_param
|
85
109
|
next if method.cmd_opts[required_param.to_sym]
|
86
|
-
|
110
|
+
missed_params << required_param
|
87
111
|
end
|
112
|
+
raise ConsoleRunnerError, "You must specify required parameter: #{missed_params.join(', ')}" if missed_params.count.positive?
|
88
113
|
ARGV.shift
|
89
114
|
end
|
90
115
|
end
|
data/lib/console_runner.rb
CHANGED
@@ -40,7 +40,7 @@ module ConsoleRunner
|
|
40
40
|
c_line_parser.initialize_method.cmd_opts.map { |k, v| LOGGER.debug "\t#{k} = #{v}" }
|
41
41
|
end
|
42
42
|
LOGGER.debug "Executing ##{action.name} method..."
|
43
|
-
c_line_parser.method.cmd_opts.map { |k, v| LOGGER.debug
|
43
|
+
c_line_parser.method.cmd_opts.map { |k, v| LOGGER.debug "\t#{k} = #{v}" }
|
44
44
|
LOGGER.debug("Remaining arguments: #{ARGV.inspect}") if ARGV != []
|
45
45
|
LOGGER.info SEPARATOR
|
46
46
|
|
@@ -75,6 +75,8 @@ module ConsoleRunner
|
|
75
75
|
LOGGER.success 'Execution status: ' + status
|
76
76
|
else
|
77
77
|
LOGGER.error 'Execution status: ' + status
|
78
|
+
LOGGER.error e.message if e
|
79
|
+
LOGGER.error SEPARATOR
|
78
80
|
end
|
79
81
|
|
80
82
|
end
|
data/lib/file_parser.rb
CHANGED
@@ -6,6 +6,7 @@ class FileParser
|
|
6
6
|
RUNNABLE_TAG = :runnable
|
7
7
|
|
8
8
|
attr_reader :clazz,
|
9
|
+
:constants,
|
9
10
|
:runnable_methods,
|
10
11
|
:initialize_method,
|
11
12
|
:run_method
|
@@ -21,6 +22,7 @@ class FileParser
|
|
21
22
|
runnable_classes = list_classes(:runnable)
|
22
23
|
raise ConsoleRunnerError, 'At least one runnable Class should be specified in file' if runnable_classes.count != 1
|
23
24
|
@clazz = runnable_classes.first
|
25
|
+
@constants = @clazz.constants
|
24
26
|
all_methods = list_methods(:all, clazz)
|
25
27
|
@runnable_methods = list_methods(:runnable, clazz)
|
26
28
|
@initialize_method = all_methods.find { |m| m.name == :initialize }
|
@@ -47,20 +49,20 @@ class FileParser
|
|
47
49
|
all_class_methods = clazz.children.select { |m| m.class == YARD::CodeObjects::MethodObject } if clazz
|
48
50
|
|
49
51
|
case scope
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
else
|
54
|
-
all_methods
|
55
|
-
end
|
56
|
-
when RUNNABLE_TAG
|
57
|
-
if clazz
|
58
|
-
all_class_methods.select { |m| m.has_tag? RUNNABLE_TAG }
|
59
|
-
else
|
60
|
-
all_methods.select { |m| m.has_tag? RUNNABLE_TAG }
|
61
|
-
end
|
52
|
+
when :all
|
53
|
+
if clazz
|
54
|
+
all_class_methods
|
62
55
|
else
|
63
|
-
|
56
|
+
all_methods
|
57
|
+
end
|
58
|
+
when RUNNABLE_TAG
|
59
|
+
if clazz
|
60
|
+
all_class_methods.select { |m| m.has_tag? RUNNABLE_TAG }
|
61
|
+
else
|
62
|
+
all_methods.select { |m| m.has_tag? RUNNABLE_TAG }
|
63
|
+
end
|
64
|
+
else
|
65
|
+
raise ":scope can be :all or #{RUNNABLE_TAG}"
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
@@ -68,15 +70,15 @@ class FileParser
|
|
68
70
|
#
|
69
71
|
# @param [Symbol] scope :all - list all classes, :runnable - list only runnable classes
|
70
72
|
# @return [Array(YARD::CodeObjects::ClassObject)]
|
71
|
-
def list_classes(scope= :all)
|
73
|
+
def list_classes(scope = :all)
|
72
74
|
all_classes = @all_objects.select { |o| o.type == :class }
|
73
75
|
case scope
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
when :all
|
77
|
+
all_classes
|
78
|
+
when RUNNABLE_TAG
|
79
|
+
all_classes.select { |m| m.has_tag? RUNNABLE_TAG }
|
80
|
+
else
|
81
|
+
raise ":scope can be :all or #{RUNNABLE_TAG}"
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
data/lib/method_parser.rb
CHANGED
@@ -13,16 +13,16 @@ class MethodParser
|
|
13
13
|
attr_accessor :cmd_opts
|
14
14
|
|
15
15
|
TYPES_MAPPINGS = {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
'String' => :string,
|
17
|
+
'Integer' => :int,
|
18
|
+
'Fixnum' => :int,
|
19
|
+
'Float' => :float,
|
20
|
+
'Boolean' => :boolean,
|
21
|
+
'Array(String)' => :strings,
|
22
|
+
'Array(Integer)' => :ints,
|
23
|
+
'Array(Fixnum)' => :ints,
|
24
|
+
'Array(Float)' => :floats,
|
25
|
+
'Array(Boolean)' => :booleans
|
26
26
|
}.freeze
|
27
27
|
|
28
28
|
# @param [YARD::CodeObjects::MethodObject] method YARD method object to be parsed
|
@@ -31,16 +31,16 @@ class MethodParser
|
|
31
31
|
@name = @method.name
|
32
32
|
@text = FileParser.select_runnable_tags(@method).map(&:text).join("\n")
|
33
33
|
@parameters = @method.parameters
|
34
|
-
@default_values = default_params
|
34
|
+
@default_values = default_params.reject { |k, v| v.nil? }
|
35
35
|
@param_tags = FileParser.select_param_tags @method
|
36
36
|
@option_tags = FileParser.select_option_tags @method
|
37
|
-
@required_parameters = @param_tags.select { |t| t.tag_name == 'param' }.map(&:name)
|
37
|
+
@required_parameters = @param_tags.select { |t| t.tag_name == 'param' && !@default_values.keys.include?(t.name) }.map(&:name)
|
38
38
|
@cmd_opts = nil
|
39
39
|
same_params = param_tags_names & option_tags_names
|
40
40
|
unless same_params.count.zero?
|
41
41
|
raise(
|
42
|
-
|
43
|
-
|
42
|
+
ConsoleRunnerError,
|
43
|
+
"You have the same name for @param and @option attribute(s): #{same_params.join(', ')}.
|
44
44
|
Use different names to `console_runner` be able to run #{@name} method."
|
45
45
|
)
|
46
46
|
end
|
@@ -61,23 +61,23 @@ Use different names to `console_runner` be able to run #{@name} method."
|
|
61
61
|
option_text = option.pair.text
|
62
62
|
option_type = option.pair.type
|
63
63
|
result << [
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
option_name.to_sym,
|
65
|
+
"(Ruby class: #{option_type}) " + option_text.to_s,
|
66
|
+
type: parse_type(option_type)
|
67
67
|
]
|
68
68
|
end
|
69
69
|
else
|
70
70
|
result << [
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
tag_name.to_sym,
|
72
|
+
"(Ruby class: #{tag_type}) " + tag_text.to_s,
|
73
|
+
type: parse_type(tag_type)
|
74
74
|
]
|
75
75
|
end
|
76
76
|
else
|
77
77
|
result << [
|
78
|
-
|
79
|
-
|
80
|
-
|
78
|
+
tag_name.to_sym,
|
79
|
+
"(Ruby class: #{tag_type}) " + tag_text.to_s,
|
80
|
+
type: parse_type(tag_type)
|
81
81
|
]
|
82
82
|
end
|
83
83
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console_runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Karpovich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03
|
11
|
+
date: 2020-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -162,6 +162,7 @@ extra_rdoc_files: []
|
|
162
162
|
files:
|
163
163
|
- ".coveralls.yml"
|
164
164
|
- ".gitignore"
|
165
|
+
- ".ruby-version"
|
165
166
|
- ".travis.yml"
|
166
167
|
- Gemfile
|
167
168
|
- LICENSE.txt
|
@@ -190,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
191
|
requirements:
|
191
192
|
- - ">="
|
192
193
|
- !ruby/object:Gem::Version
|
193
|
-
version:
|
194
|
+
version: 2.5.1
|
194
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
196
|
requirements:
|
196
197
|
- - ">="
|
@@ -198,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
199
|
version: '0'
|
199
200
|
requirements: []
|
200
201
|
rubyforge_project:
|
201
|
-
rubygems_version: 2.
|
202
|
+
rubygems_version: 2.7.6
|
202
203
|
signing_key:
|
203
204
|
specification_version: 4
|
204
205
|
summary: Command-line runner for ruby code.
|