cli-mastermind 0.4.1 → 0.5.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/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
|