atk_toolbox 0.0.126 → 0.0.127
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/atk/atk_info.rb +230 -60
- data/lib/atk/autocomplete.rb +1 -1
- data/lib/atk/commands/project.rb +69 -64
- data/lib/atk/console.rb +92 -11
- data/lib/atk/default_info.yaml +1 -1
- data/lib/atk/{file_sys.rb → file_system.rb} +89 -40
- data/lib/atk/git.rb +15 -14
- data/lib/atk/{yaml_info_parser.rb → info.rb} +41 -24
- data/lib/atk/os.rb +29 -11
- data/lib/atk/set_command.rb +11 -6
- data/lib/atk_toolbox/version.rb +1 -1
- data/lib/console_colors.rb +104 -0
- data/lib/rubygems_plugin.rb +15 -0
- metadata +5 -68
- data/lib/atk/extra_yaml.rb +0 -147
- data/lib/atk/online.rb +0 -8
- data/lib/atk/package_managers.rb +0 -111
- data/lib/atk/zip.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c4d780511982908f64d709071d17ccce1d7d7d7402aaec338fe28b4986c62c
|
4
|
+
data.tar.gz: 1574b3aa46422f14c5904b31cf095a10e4c426b8448f6864350f030c022080d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a295b532b4bbc450e5f4d6e4b56734f3fbce52ae0662afa394647582a137346751f0eb1e19d93b58eb56bdf9fcb363f6d409ab41bf78fbf0aeac2ee45f1e828a
|
7
|
+
data.tar.gz: 222c45ef0e94b873adb9cc0bcd3a345f8b37c94d08374923b0a1606004d1ad1c3d5112020cce48a2af3bee304790d6e19dde00d47b16aa6b9f2603fe58a4cca5
|
data/lib/atk/atk_info.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require_relative './
|
1
|
+
require_relative './file_system'
|
2
2
|
require_relative './console'
|
3
|
-
require_relative './
|
3
|
+
require_relative './info'
|
4
4
|
require_relative './os'
|
5
5
|
require_relative './git'
|
6
6
|
require 'yaml'
|
@@ -33,10 +33,16 @@ class AtkPaths
|
|
33
33
|
end
|
34
34
|
return ruby_path
|
35
35
|
when 'gem'
|
36
|
-
#
|
36
|
+
# FUTURE: this should eventually link to a specific version of ruby instead of the global version
|
37
37
|
return OS.path_for_executable("gem")
|
38
38
|
when 'repos'
|
39
39
|
return HOME/"atk"/"repos"
|
40
|
+
when 'commands'
|
41
|
+
if OS.is?("unix")
|
42
|
+
return "/usr/local/bin"
|
43
|
+
else
|
44
|
+
return "C:\\Users\\#{FS.username}\\AppData\\local\\Microsoft\\WindowsApps"
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
@@ -93,6 +99,48 @@ module Atk
|
|
93
99
|
FS.save(info_data, to: Atk.paths[:info], as: :yaml )
|
94
100
|
end
|
95
101
|
|
102
|
+
def self.checkup
|
103
|
+
errors = {}
|
104
|
+
|
105
|
+
# make sure ruby is the corrct version
|
106
|
+
if VERSION_OF_RUBY >= Version.new("3.0.0")
|
107
|
+
errors[:ruby_version_too_high] = true
|
108
|
+
elsif VERSION_OF_RUBY < Version.new("2.5")
|
109
|
+
errors[:ruby_version_too_low] = true
|
110
|
+
end
|
111
|
+
|
112
|
+
# make sure git is installed and up to date
|
113
|
+
if not Console.has_command("git")
|
114
|
+
errors[:doesnt_have_git] = true
|
115
|
+
else
|
116
|
+
git_version = Version.extract_from(`git --version`)
|
117
|
+
if git_version < Version.new("2.17")
|
118
|
+
errors[:git_version_too_low] = true
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# FUTURE: checkup on the package manager
|
123
|
+
|
124
|
+
# FUTURE: verify that windows and unix paths are highest priority
|
125
|
+
|
126
|
+
if OS.is?("unix")
|
127
|
+
sources = Console.command_sources()
|
128
|
+
top_source = sources[0]
|
129
|
+
path_for_commands = Atk.paths[:commands]
|
130
|
+
if top_source != path_for_commands
|
131
|
+
errors[:commands_are_not_at_top_of_path] = true
|
132
|
+
if not sources.any?{ |each| each == path_for_commands }
|
133
|
+
errors[:commands_are_not_in_path] = true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# TODO: talk about any found errors
|
140
|
+
#
|
141
|
+
|
142
|
+
end
|
143
|
+
|
96
144
|
def self.setup(package_name, arguments)
|
97
145
|
repo_url = AtkPackage.new(package_name).url
|
98
146
|
project_folder = Atk.info["project_folder"]
|
@@ -100,7 +148,7 @@ module Atk
|
|
100
148
|
if not project_folder
|
101
149
|
# then use the current folder
|
102
150
|
project_folder = FS.pwd
|
103
|
-
puts "Project will be downloaded to #{project_folder.to_s.
|
151
|
+
puts "Project will be downloaded to #{project_folder.to_s.color_as :key_term}"
|
104
152
|
puts "(your current directory)"
|
105
153
|
puts ""
|
106
154
|
end
|
@@ -110,7 +158,7 @@ module Atk
|
|
110
158
|
FS.in_dir(project_path) do
|
111
159
|
setup_command = Info.commands['(setup)']
|
112
160
|
if setup_command.is_a?(Code) || setup_command.is_a?(String)
|
113
|
-
puts "\n\
|
161
|
+
puts "\n\n#{"Running (setup) command:".color_as :title}\n"
|
114
162
|
sleep 1
|
115
163
|
if setup_command.is_a?(Code)
|
116
164
|
setup_command.run(arguments)
|
@@ -119,10 +167,10 @@ module Atk
|
|
119
167
|
end
|
120
168
|
end
|
121
169
|
puts "\n\n\n\n============================================================"
|
122
|
-
puts "Finished running setup for: #{project_path.
|
170
|
+
puts "Finished running setup for: #{project_path.color_as :good}"
|
123
171
|
puts "This project has these commands avalible:"
|
124
172
|
system "project commands"
|
125
|
-
puts "\ndon't forget to do:\n#{"cd '#{project_path}'".
|
173
|
+
puts "\ndon't forget to do:\n#{"cd '#{project_path}'".color_as :code}"
|
126
174
|
end
|
127
175
|
end
|
128
176
|
|
@@ -135,16 +183,43 @@ module Atk
|
|
135
183
|
puts "Sorry, this feature is still under development"
|
136
184
|
end
|
137
185
|
|
138
|
-
def self.update()
|
139
|
-
|
186
|
+
def self.update(*args)
|
187
|
+
#
|
188
|
+
# update a specific repo/package
|
189
|
+
#
|
190
|
+
if args.size != 0
|
191
|
+
Atk.not_yet_implemented()
|
192
|
+
return
|
193
|
+
end
|
194
|
+
|
195
|
+
#
|
196
|
+
# update ATK itself
|
197
|
+
#
|
198
|
+
puts "Checking latest online version"
|
199
|
+
console_output = IO.popen([Atk.paths['gem'], "list", "atk_toolbox", "--remote"]).read
|
200
|
+
filtered = console_output.split("\n").select{|each| each =~ /^atk_toolbox \(/}
|
201
|
+
latest_version = Version.extract_from(filtered[0])
|
202
|
+
# if update avalible
|
203
|
+
if Atk.version < latest_version
|
204
|
+
puts "Newer version avalible, installing now"
|
205
|
+
# install the new gem
|
206
|
+
system(Atk.paths['gem'], "install", "atk_toolbox")
|
207
|
+
# run the update handler
|
208
|
+
temp_file = Atk.temp_path("after_gem_update.rb")
|
209
|
+
FS.download("https://raw.githubusercontent.com/aggie-tool-kit/atk-toolbox/master/lib/after_gem_update.rb", to: temp_file)
|
210
|
+
system(Atk.paths["ruby"], temp_file, Atk.version.to_s)
|
211
|
+
else
|
212
|
+
puts "System up to date"
|
213
|
+
end
|
140
214
|
end
|
141
215
|
end
|
142
216
|
ATK = Atk
|
143
217
|
|
144
|
-
|
145
218
|
class AtkPackage
|
146
219
|
def initialize(package_name)
|
147
220
|
@init_name = package_name
|
221
|
+
@package_info_loaded = false
|
222
|
+
@dont_exist = {}
|
148
223
|
end
|
149
224
|
|
150
225
|
def simple_name
|
@@ -200,63 +275,158 @@ class AtkPackage
|
|
200
275
|
end
|
201
276
|
end
|
202
277
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
278
|
+
#
|
279
|
+
# parse package
|
280
|
+
#
|
281
|
+
def ensure_package_info()
|
282
|
+
if not @package_info_loaded
|
283
|
+
@package_info_loaded = true
|
284
|
+
self.ensure_cached()
|
285
|
+
FS.in_dir(self.cache_location) do
|
286
|
+
if not FS.file?("./info.yaml")
|
287
|
+
@dont_exist[:yaml_file] = true
|
288
|
+
end
|
289
|
+
begin
|
290
|
+
# must be in top most dir
|
291
|
+
@info = YAML.load_file("./info.yaml")
|
292
|
+
rescue => exception
|
293
|
+
@dont_exist[:correctly_formatted_yaml_file] = true
|
294
|
+
end
|
295
|
+
|
296
|
+
# attempt to load a version
|
297
|
+
begin
|
298
|
+
version = Version.new(@info['(using_atk_version)'])
|
299
|
+
rescue => exception
|
300
|
+
version = nil
|
301
|
+
@dont_exist[:using_atk_version] = true
|
302
|
+
end
|
303
|
+
# if there is a version
|
304
|
+
if version.is_a?(Version)
|
305
|
+
# if the version is really old
|
306
|
+
if version <= Version.new("1.0.0")
|
307
|
+
raise <<-HEREDOC.remove_indent
|
308
|
+
|
309
|
+
|
310
|
+
It appears that the #{self.simple_name()} package is using
|
311
|
+
the alpha version of ATK (1.0.0), which is no longer supported.
|
312
|
+
This is probably just a simple versioning mistake.
|
313
|
+
Please ask the maintainer of the #{self.simple_name()} package to
|
314
|
+
update it to a newer ATK package format
|
315
|
+
HEREDOC
|
316
|
+
elsif version <= Version.new("1.1.0")
|
317
|
+
self.parser_version_1_1(@info)
|
226
318
|
else
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
end
|
240
|
-
end
|
319
|
+
raise <<-HEREDOC.remove_indent
|
320
|
+
|
321
|
+
|
322
|
+
The package #{self.simple_name()} has a (using_atk_version)
|
323
|
+
that is newer than the currently installed ATK can handle:
|
324
|
+
version: #{version}
|
325
|
+
|
326
|
+
This means either
|
327
|
+
1. ATK needs to be updated (which you can do with #{'atk update'.color_as :code})
|
328
|
+
2. The package has specified a version of ATK that doesn't exist
|
329
|
+
HEREDOC
|
330
|
+
end
|
241
331
|
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
#
|
337
|
+
# (using_atk_version) 1.1.0
|
338
|
+
#
|
339
|
+
# (package):
|
340
|
+
# (actions):
|
341
|
+
# (run): *run command as string*
|
342
|
+
def parser_version_1_1(info)
|
343
|
+
#
|
344
|
+
# inits:
|
345
|
+
# @package_info: nil
|
346
|
+
# @actions: {}
|
347
|
+
# @run: nil
|
348
|
+
#
|
349
|
+
if @info.is_a?(Hash)
|
350
|
+
@package_info = @info['(package)']
|
351
|
+
if @package_info.is_a?(Hash)
|
352
|
+
@actions = @package_info['(actions)']
|
353
|
+
else
|
354
|
+
@dont_exist[:package_info] = true
|
355
|
+
end
|
356
|
+
if not @actions.is_a?(Hash)
|
357
|
+
@actions = {}
|
358
|
+
@dont_exist[:actions] = true
|
359
|
+
end
|
360
|
+
|
361
|
+
@run = @actions['(run)']
|
362
|
+
if not @run.is_a?(String)
|
363
|
+
@dont_exist[:run_action] = true
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
def run(arguments)
|
369
|
+
self.ensure_package_info()
|
370
|
+
# if it exists, run it
|
371
|
+
if @run.is_a?(String)
|
372
|
+
FS.in_dir(self.cache_location) do
|
373
|
+
system(@run + Console.make_arguments_appendable(arguments))
|
374
|
+
return $?.success?
|
375
|
+
end
|
376
|
+
# if not, explain why not
|
377
|
+
else
|
378
|
+
custom_message = <<-HEREDOC.remove_indent
|
379
|
+
|
380
|
+
When trying
|
381
|
+
to perform the #{"run".color_as :code} action
|
382
|
+
on the #{self.simple_name.to_s.color_as :key_term} module
|
383
|
+
with these arguments: #{arguments.inspect.to_s.color_as :argument}
|
242
384
|
|
243
|
-
|
244
|
-
|
245
|
-
|
385
|
+
There was an issue because:
|
386
|
+
HEREDOC
|
387
|
+
|
388
|
+
# FUTURE: make a more standardized error reporting tool and it that here
|
389
|
+
|
390
|
+
good = ->(message) do
|
391
|
+
" ✓ #{message.color_as :good}"
|
392
|
+
end
|
393
|
+
bad = ->(message) do
|
394
|
+
" ✖ #{message.color_as :bad}"
|
395
|
+
end
|
396
|
+
|
397
|
+
if @dont_exist[:yaml_file]
|
398
|
+
custom_message += <<-HEREDOC.remove_indent
|
399
|
+
#{bad("there was no info.yaml for that package")}
|
400
|
+
and an info.yaml is the location for defining a run action
|
246
401
|
|
247
|
-
|
402
|
+
HEREDOC
|
403
|
+
elsif @dont_exist[:correctly_formatted_yaml_file]
|
404
|
+
custom_message += <<-HEREDOC.remove_indent
|
405
|
+
#{good("there was a info.yaml for that package")}
|
406
|
+
#{bad("the info.yaml is not parseable")}
|
407
|
+
and an info.yaml is the location for defining a run action
|
248
408
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
#{"
|
254
|
-
(
|
255
|
-
|
256
|
-
|
257
|
-
".
|
409
|
+
HEREDOC
|
410
|
+
elsif @dont_exist[:using_atk_version]
|
411
|
+
custom_message += <<-HEREDOC.remove_indent
|
412
|
+
#{good("there was a info.yaml for that package")}
|
413
|
+
#{good("the info.yaml was parseable")}
|
414
|
+
#{@dont_exist[:using_atk_version] && bad("the info.yaml didn't have a (using_atk_version) key")}
|
415
|
+
#{@dont_exist[:package_info] && bad("the info.yaml didn't have a (package_info) key")}
|
416
|
+
#{@dont_exist[:actions] && bad("the info.yaml didn't have a (package_info): (actions) key")}
|
417
|
+
#{@dont_exist[:run_action] && bad("the info.yaml didn't have a (package_info): (actions): (run) key")}
|
258
418
|
HEREDOC
|
259
419
|
end
|
420
|
+
|
421
|
+
raise <<-HEREDOC.remove_indent
|
422
|
+
|
423
|
+
|
424
|
+
#{custom_message}
|
425
|
+
|
426
|
+
This is almost certainly a problem with the package
|
427
|
+
Please contact the maintainer of #{self.simple_name}
|
428
|
+
and let them know about the above issue
|
429
|
+
HEREDOC
|
260
430
|
end
|
261
431
|
end
|
262
432
|
end
|
data/lib/atk/autocomplete.rb
CHANGED
data/lib/atk/commands/project.rb
CHANGED
@@ -2,70 +2,91 @@ require_relative '../atk_info'
|
|
2
2
|
|
3
3
|
module Atk
|
4
4
|
def self.project(args)
|
5
|
-
#
|
5
|
+
#
|
6
|
+
# no arguments
|
7
|
+
#
|
6
8
|
if args.length == 0
|
7
|
-
|
9
|
+
begin
|
10
|
+
info = Info.new
|
11
|
+
rescue Info::YamlFileDoesntExist => exception
|
12
|
+
puts <<-HEREDOC.remove_indent
|
13
|
+
|
14
|
+
It appears there is no #{"info.yaml".color_as :code} file
|
15
|
+
Meaning you're probably not in folder that contains a project
|
16
|
+
|
17
|
+
To convert the current folder into a project folder run:
|
18
|
+
#{"project init".color_as :code}
|
19
|
+
|
20
|
+
If you don't know how to use #{"project".color_as :code} just run #{"project help".color_as :code}
|
21
|
+
HEREDOC
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
puts "If you don't know how to use #{"project".color_as :code} just run #{"project help".color_as :code}"
|
8
25
|
puts ""
|
9
26
|
# if there are commands then show them
|
10
|
-
commands =
|
27
|
+
commands = info.commands
|
11
28
|
if commands.is_a?(Hash) && commands.keys.size > 0
|
12
29
|
puts "commands for current project:"
|
13
30
|
puts `project commands`
|
14
31
|
end
|
15
32
|
else
|
16
|
-
#
|
17
|
-
# Check dependencies
|
18
|
-
#
|
19
|
-
# if they're not met, then warn the user about that
|
20
|
-
# check a hash of the file to see if anything has changed
|
21
33
|
case args[0]
|
34
|
+
#
|
35
|
+
# help
|
36
|
+
#
|
22
37
|
when 'help', '--help', '-h'
|
23
38
|
puts <<-HEREDOC.remove_indent
|
24
|
-
#{"help".
|
25
|
-
#{"info:".
|
26
|
-
#{"examples:".
|
39
|
+
#{"help".color_as :key_term}
|
40
|
+
#{"info:".color_as :title} displays the avalible tools
|
41
|
+
#{"examples:".color_as :title} #{'project help'.color_as :code}
|
27
42
|
|
28
|
-
#{"initialize".
|
29
|
-
#{"examples:".
|
30
|
-
#{'project init'.
|
31
|
-
#{'project initialize'.
|
32
|
-
#{"info:".
|
43
|
+
#{"initialize".color_as :key_term}
|
44
|
+
#{"examples:".color_as :title}
|
45
|
+
#{'project init'.color_as :code}
|
46
|
+
#{'project initialize'.color_as :code}
|
47
|
+
#{"info:".color_as :title}
|
33
48
|
This will create an info.yaml in your current directory
|
34
49
|
The info.yaml will contain all the standard project managment tools
|
35
50
|
In the future this command will be more interactive
|
36
51
|
|
37
|
-
#{"synchronize".
|
38
|
-
#{"examples:".
|
39
|
-
#{'project sync'.
|
40
|
-
#{'project synchronize'.
|
41
|
-
#{'project synchronize --message=\'updated the readme\''.
|
42
|
-
#{"info:".
|
52
|
+
#{"synchronize".color_as :key_term}
|
53
|
+
#{"examples:".color_as :title}
|
54
|
+
#{'project sync'.color_as :code}
|
55
|
+
#{'project synchronize'.color_as :code}
|
56
|
+
#{'project synchronize --message=\'updated the readme\''.color_as :code}
|
57
|
+
#{"info:".color_as :title}
|
43
58
|
Adds, commits, and then pulls/pushes all git changes
|
44
59
|
If there is merge conflict, it will show up as normal
|
45
|
-
#{"format:".
|
46
|
-
#{"project".
|
60
|
+
#{"format:".color_as :title}
|
61
|
+
#{"project".color_as :code} #{"synchronize".color_as :key_term} #{"<package>".color_as :argument} #{"--message='your message'".color_as :optional}
|
47
62
|
|
48
|
-
#{"execute".
|
49
|
-
#{"examples:".
|
50
|
-
#{'project execute compile'.
|
51
|
-
#{'project exec compile'.
|
52
|
-
#{'project exec main'.
|
53
|
-
#{'project exec server'.
|
54
|
-
#{"info:".
|
63
|
+
#{"execute".color_as :key_term}
|
64
|
+
#{"examples:".color_as :title}
|
65
|
+
#{'project execute compile'.color_as :code}
|
66
|
+
#{'project exec compile'.color_as :code}
|
67
|
+
#{'project exec main'.color_as :code}
|
68
|
+
#{'project exec server'.color_as :code}
|
69
|
+
#{"info:".color_as :title}
|
55
70
|
This will look at the info.yaml file in your project to find commands
|
56
71
|
You can use the `project init` command to generate an info.yaml which
|
57
72
|
has example commands. Commands can be CMD/terminal/console commands, or ruby code.
|
58
|
-
#{"format:".
|
59
|
-
#{"project".
|
73
|
+
#{"format:".color_as :title}
|
74
|
+
#{"project".color_as :code} #{"execute".color_as :key_term} #{"<name-of-command>".color_as :argument} #{"<arg1-for-command>".color_as :optional} #{"<arg2-for-command>".color_as :optional} #{"<...etc>".color_as :optional}
|
60
75
|
|
61
|
-
#{"commands".
|
62
|
-
#{"examples:".
|
63
|
-
#{"info:".
|
76
|
+
#{"commands".color_as :key_term}
|
77
|
+
#{"examples:".color_as :title} #{'project commands'.color_as :code}
|
78
|
+
#{"info:".color_as :title}
|
64
79
|
This will read the local info.yaml of your project to find commands
|
65
80
|
then it will list out each command with a short preview of the contents of that command
|
66
81
|
HEREDOC
|
82
|
+
#
|
83
|
+
# init
|
84
|
+
#
|
67
85
|
when 'initialize', 'init'
|
68
86
|
Info.init
|
87
|
+
#
|
88
|
+
# sync
|
89
|
+
#
|
69
90
|
when 'synchronize', 'sync'
|
70
91
|
# if there is an argument
|
71
92
|
git_folder_path = FS.dirname(Info.path)/".git"
|
@@ -103,35 +124,13 @@ module Atk
|
|
103
124
|
system('git pull --no-edit')
|
104
125
|
# push up everything
|
105
126
|
system('git push')
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
structure_name = args[1]
|
110
|
-
# use this to mix a structure into the project
|
111
|
-
# TODO:
|
112
|
-
# get the context
|
113
|
-
# if there is a --context='something' command line option, then use that
|
114
|
-
# otherwise use the default(--context) speficied in the info.yaml
|
115
|
-
# re-iterate through the info.yaml (advanced_setup) keys
|
116
|
-
# find all of the "when(--context = 'something')" keys
|
117
|
-
# find the (dependencies) sub-key for them, create one if the key doesn't exist
|
118
|
-
# add the project and version to the
|
119
|
-
when 'add'
|
120
|
-
not_yet_implemented()
|
121
|
-
package = args[1]
|
122
|
-
# check if there is an info.yaml
|
123
|
-
# check if there is an local_package_manager in the info.yaml
|
124
|
-
# if there is only 1, then use it
|
125
|
-
# if there is more than one, ask which one the user wants to use
|
126
|
-
when 'remove'
|
127
|
-
not_yet_implemented()
|
128
|
-
package = args[1]
|
129
|
-
# check if there is an local_package_manager in the info.yaml
|
130
|
-
# if it does use it to remove the package
|
127
|
+
#
|
128
|
+
# execute
|
129
|
+
#
|
131
130
|
when 'execute', 'exec'
|
132
131
|
# extract the (project_commands) section from the info.yaml,
|
133
132
|
# then find the command with the same name as args[1] and run it
|
134
|
-
#
|
133
|
+
# FUTURE: use https://github.com/piotrmurach/tty-markdown#ttymarkdown- to highlight the ruby code
|
135
134
|
_, command_name, *command_args = args
|
136
135
|
command = Info.commands[command_name]
|
137
136
|
# temporairly set the dir to be the same as the info.yaml
|
@@ -144,16 +143,22 @@ module Atk
|
|
144
143
|
puts "I don't think that command is in the info.yaml file"
|
145
144
|
end
|
146
145
|
end
|
146
|
+
#
|
147
|
+
# commands
|
148
|
+
#
|
147
149
|
when 'commands'
|
148
150
|
max_number_of_chars_to_show = 80
|
149
151
|
commands = Info.commands
|
150
152
|
if commands.keys.size == 0
|
151
|
-
puts "0 avalible commands".
|
153
|
+
puts "0 avalible commands".color_as :message
|
152
154
|
else
|
153
155
|
for each_key, each_value in commands
|
154
|
-
puts " #{each_key.to_s.
|
156
|
+
puts " #{each_key.to_s.color_as :key_term}: #{each_value.to_s.strip[0..max_number_of_chars_to_show].sub(/(.*)[\s\S]*/,'\1')}"
|
155
157
|
end
|
156
158
|
end
|
159
|
+
#
|
160
|
+
# unrecognized
|
161
|
+
#
|
157
162
|
else
|
158
163
|
puts "I don't recognized that command\nhere's the `project --help` which might get you what you're looking for:"
|
159
164
|
Atk.project(["help"])
|