cli-mastermind 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/cli/mastermind.rb +18 -4
- data/lib/cli/mastermind/arg_parse.rb +7 -0
- data/lib/cli/mastermind/configuration.rb +26 -2
- data/lib/cli/mastermind/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e40196d83c1db754add3b8e4fbf4f10a26c4f66f1aff199261261bdfda66edc7
|
4
|
+
data.tar.gz: 0de3f8b0fe48d3c2496970380ea5f9ec3d5e73b15258bd3be5dcf7315516edc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 034731a236c65aa88e3bd04dae4f41cf6324c128ea2847b5753ab86300f4c31a250ba3224afd8e14f33e746fabc319c7f046e3d3f380294ee7f1154d66fba2fc
|
7
|
+
data.tar.gz: a1b8f76371629f2fd7844cea59fc3e5e753f819a4f567562b0cfb7bcd7da3983149e2906b76efb19c4ebade3adf5188865b52568efb3052f0edb207269e7259f
|
data/README.md
CHANGED
@@ -71,6 +71,9 @@ parallel, _Mastermind is designed to run only one task at a time_. Specifying
|
|
71
71
|
multiple plan names on the command line is how you walk down the tree to a
|
72
72
|
specific plan.
|
73
73
|
|
74
|
+
If you don't provide enough information to Mastermind to walk to an executable
|
75
|
+
plan, Mastermind will provide you with a list of available options to choose.
|
76
|
+
|
74
77
|
For more information on how to use and configure Mastermind, check out the
|
75
78
|
[wiki][wiki].
|
76
79
|
|
data/lib/cli/mastermind.rb
CHANGED
@@ -18,6 +18,18 @@ module CLI
|
|
18
18
|
@config
|
19
19
|
end
|
20
20
|
|
21
|
+
# Allows utilities wrapping Mastermind to specify that only plans under a
|
22
|
+
# particular path should be loaded.
|
23
|
+
def base_path=(base_path)
|
24
|
+
@base_path = base_path
|
25
|
+
end
|
26
|
+
|
27
|
+
# Allows utilities wrapping Mastermind to specify a top level plan without
|
28
|
+
# having to monkey with the incomming arguments.
|
29
|
+
def base_plan=(base_plan)
|
30
|
+
@base_plan = base_plan
|
31
|
+
end
|
32
|
+
|
21
33
|
# Process incoming options and take an appropriate action.
|
22
34
|
# This is normally called by the mastermind executable.
|
23
35
|
def execute(cli_args=ARGV)
|
@@ -26,7 +38,7 @@ module CLI
|
|
26
38
|
enable_ui if @arguments.display_ui?
|
27
39
|
|
28
40
|
frame('Mastermind') do
|
29
|
-
@config = spinner('Loading configuration') { Configuration.new }
|
41
|
+
@config = spinner('Loading configuration') { Configuration.new @base_path }
|
30
42
|
|
31
43
|
if @arguments.dump_config?
|
32
44
|
do_print_configuration
|
@@ -81,7 +93,7 @@ module CLI
|
|
81
93
|
suffix = was_callable ? '{{*}}' : ' '
|
82
94
|
|
83
95
|
puts stylize("{{yellow:#{name}}}")
|
84
|
-
puts stylize("\t #{suffix} {{blue:#{value}}}")
|
96
|
+
puts stylize("\t #{suffix} {{blue:#{value.inspect}}}")
|
85
97
|
print "\n"
|
86
98
|
end
|
87
99
|
end
|
@@ -138,9 +150,11 @@ module CLI
|
|
138
150
|
def process_plan_names
|
139
151
|
@arguments.do_command_expansion!(@config)
|
140
152
|
|
153
|
+
@arguments.insert_base_plan!(@base_plan) unless @base_plan.nil?
|
154
|
+
|
141
155
|
@plan_stack = []
|
142
156
|
|
143
|
-
@selected_plan = @plans
|
157
|
+
@selected_plan = @plans if @arguments.has_additional_plan_names?
|
144
158
|
|
145
159
|
while @arguments.has_additional_plan_names?
|
146
160
|
plan_name = @arguments.get_next_plan_name
|
@@ -168,7 +182,7 @@ module CLI
|
|
168
182
|
end
|
169
183
|
|
170
184
|
def user_is_sure?
|
171
|
-
!@arguments.ask? or confirm("Execute plan #{@plan_stack.join('/')}?")
|
185
|
+
!@arguments.ask? or !@config.ask? or confirm("Execute plan #{@plan_stack.join('/')}?")
|
172
186
|
end
|
173
187
|
|
174
188
|
def execute_plan!
|
@@ -31,6 +31,13 @@ module CLI::Mastermind
|
|
31
31
|
@plan_arguments = @alias_arguments + @plan_arguments
|
32
32
|
|
33
33
|
@mastermind_arguments.flatten!
|
34
|
+
nil # prevent @mastermind_arguments from leaking
|
35
|
+
end
|
36
|
+
|
37
|
+
# Adds the given base plan to the beginning of the arguments array
|
38
|
+
def insert_base_plan!(base_plan)
|
39
|
+
@mastermind_arguments.unshift base_plan
|
40
|
+
nil # prevent @mastermind_arguments from leaking
|
34
41
|
end
|
35
42
|
|
36
43
|
def display_plans?
|
@@ -47,9 +47,11 @@ module CLI
|
|
47
47
|
# masterplans, so it's important that it be set.
|
48
48
|
add_attribute :project_root
|
49
49
|
|
50
|
-
def initialize
|
50
|
+
def initialize(base_path=nil)
|
51
|
+
@base_path = base_path
|
51
52
|
@loaded_masterplans = Set.new
|
52
53
|
@plan_files = Set.new
|
54
|
+
@ask_for_confirmation = true
|
53
55
|
|
54
56
|
# If no alias exists for a particular value, return that value
|
55
57
|
@aliases = Hash.new { |_,k| k }
|
@@ -60,7 +62,13 @@ module CLI
|
|
60
62
|
|
61
63
|
# Adds a set of filenames for plans into the set of +@plan_files+
|
62
64
|
def add_plans(planfiles)
|
63
|
-
@
|
65
|
+
allowed_plans = if @base_path.nil?
|
66
|
+
planfiles
|
67
|
+
else
|
68
|
+
planfiles.select { |file| file.start_with? @base_path }
|
69
|
+
end
|
70
|
+
|
71
|
+
@plan_files.merge(allowed_plans)
|
64
72
|
end
|
65
73
|
|
66
74
|
# Loads all plan files added using +add_plans+
|
@@ -115,6 +123,14 @@ module CLI
|
|
115
123
|
@aliases[input]
|
116
124
|
end
|
117
125
|
|
126
|
+
def ask?
|
127
|
+
@ask_for_confirmation
|
128
|
+
end
|
129
|
+
|
130
|
+
def skip_confirmation!
|
131
|
+
@ask_for_confirmation = false
|
132
|
+
end
|
133
|
+
|
118
134
|
private
|
119
135
|
|
120
136
|
# Walks up the file tree looking for masterplans.
|
@@ -168,10 +184,18 @@ module CLI
|
|
168
184
|
@config.public_send "#{attribute}=", value, &block
|
169
185
|
end
|
170
186
|
|
187
|
+
# Define a user alias. User aliases are expanded as part of plan selection.
|
188
|
+
# @see ArgParse#do_command_expansion!
|
171
189
|
def define_alias(name, arguments)
|
172
190
|
@config.define_alias(name, arguments)
|
173
191
|
end
|
174
192
|
|
193
|
+
# SKip confirmation before plan execution.
|
194
|
+
# Identical to -A.
|
195
|
+
def skip_confirmation
|
196
|
+
@config.skip_confirmation!
|
197
|
+
end
|
198
|
+
|
175
199
|
private
|
176
200
|
|
177
201
|
def supported_extensions
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli-mastermind
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Hall
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cli-ui
|