atk_toolbox 0.0.106 → 0.0.107
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 +157 -52
- data/lib/atk/commands/project.rb +2 -2
- data/lib/atk/console.rb +8 -0
- data/lib/atk/file_sys.rb +1 -1
- data/lib/atk/git.rb +6 -0
- data/lib/atk/set_command.rb +2 -2
- data/lib/atk/yaml_info_parser.rb +5 -5
- data/lib/atk_toolbox/version.rb +1 -1
- metadata +2 -3
- data/lib/atk/output.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e9e896c1f401e8b333baeaed5ab2f4f437a8a2201cede3d94932b1eb73fe139
|
4
|
+
data.tar.gz: 0a08f89770bf3115820d63a19670d903eef053455d5970770a5f21c361554c79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11a4ab36e04ac6fadaa8305400d70fc94412798abf2898d6ee724405dd2b21c32d1289e6703dba73441fc41305c200bcb534b94eb645bdc2eef43eae9f92931f
|
7
|
+
data.tar.gz: d5fa4fde8e79e2cb8b3e13fff7df7f75c7ba679a47da5fce87c8479cd9aebc188c546207c5700e555e0ff61dad7bf48800be752af1a65b68073bf15cb490d856
|
data/lib/atk/atk_info.rb
CHANGED
@@ -17,7 +17,7 @@ class AtkPaths
|
|
17
17
|
when 'info'
|
18
18
|
return HOME/"info.yaml"
|
19
19
|
when 'ruby'
|
20
|
-
atk_path_settings =
|
20
|
+
atk_path_settings = Atk.info["paths"]
|
21
21
|
if atk_path_settings.is_a?(Hash) and atk_path_settings["ruby"].is_a?(String)
|
22
22
|
ruby_path = atk_path_settings["ruby"]
|
23
23
|
elsif OS.is?(:mac)
|
@@ -38,18 +38,25 @@ class AtkPaths
|
|
38
38
|
return HOME/"atk"/"installers.yaml"
|
39
39
|
when 'installers_folder'
|
40
40
|
return HOME/"atk"/"installers"
|
41
|
+
when 'repos'
|
42
|
+
return HOME/"atk"/"repos"
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
|
-
module
|
47
|
+
module Atk
|
46
48
|
@@atk_settings_key = "atk_settings"
|
49
|
+
def self.version
|
50
|
+
require_relative '../atk_toolbox/version.rb'
|
51
|
+
return AtkToolbox::VERSION
|
52
|
+
end
|
53
|
+
|
47
54
|
def self.paths
|
48
55
|
return AtkPaths
|
49
56
|
end
|
50
57
|
|
51
58
|
def self.temp_path(filename)
|
52
|
-
new_path =
|
59
|
+
new_path = Atk.paths[:temp]/filename
|
53
60
|
# make sure the path is empty
|
54
61
|
FS.write("", to: new_path)
|
55
62
|
FS.delete(new_path)
|
@@ -57,7 +64,7 @@ module ATK
|
|
57
64
|
end
|
58
65
|
|
59
66
|
def self.info
|
60
|
-
settings_path =
|
67
|
+
settings_path = Atk.paths[:info]
|
61
68
|
# if it doesn't exist then create it
|
62
69
|
if not FS.exist?(settings_path)
|
63
70
|
FS.write("#{@@atk_settings_key}: {}", to: settings_path)
|
@@ -75,59 +82,23 @@ module ATK
|
|
75
82
|
end
|
76
83
|
|
77
84
|
def self.save_info(new_hash)
|
78
|
-
settings_path =
|
79
|
-
current_settings =
|
85
|
+
settings_path = Atk.paths[:info]
|
86
|
+
current_settings = Atk.info
|
80
87
|
updated_settings = current_settings.merge(new_hash)
|
81
88
|
|
82
|
-
info_data = YAML.load_file(
|
89
|
+
info_data = YAML.load_file(Atk.paths[:info])
|
83
90
|
if info_file.is_a?(Hash)
|
84
91
|
info_data[@@atk_settings_key] = updated_settings
|
85
92
|
else
|
86
93
|
info_data = { @@atk_settings_key => updated_settings }
|
87
94
|
end
|
88
95
|
|
89
|
-
FS.save(info_data, to:
|
90
|
-
end
|
91
|
-
|
92
|
-
def self.simplify_package_name(source)
|
93
|
-
source = source.strip
|
94
|
-
# if its starts with "atk/", just remove that part
|
95
|
-
source = source.sub( /^atk\//, "" )
|
96
|
-
# if it starts with "https://github.com/", just remove that part
|
97
|
-
source = source.sub( /^https:\/\/github.com\//, "" )
|
98
|
-
return source
|
99
|
-
end
|
100
|
-
|
101
|
-
def self.package_name_to_url(package_name)
|
102
|
-
# if its starts with "atk/", just remove that part
|
103
|
-
package_name = ATK.simplify_package_name(package_name)
|
104
|
-
# if the package name does not have a slash in it, then assume it is a core / approved installer
|
105
|
-
if not (package_name =~ /.*\/.*/)
|
106
|
-
# TODO: turn this into a check for is_core_repo?(package_name)
|
107
|
-
# path_to_core_listing = ATK.paths[:core_yaml]
|
108
|
-
# core = YAML.load_file(path_to_core_listing)
|
109
|
-
# if core[package_name] == nil
|
110
|
-
# puts "I don't see that package in the core, let me make sure I have the latest info"
|
111
|
-
# download("https://raw.githubusercontent.com/aggie-tool-kit/atk/master/interface/core.yaml", as: path_to_core_listing)
|
112
|
-
# core = YAML.load_file(path_to_core_listing)
|
113
|
-
# end
|
114
|
-
# if core[package_name] != nil
|
115
|
-
# repo_url = core[package_name]["source"]
|
116
|
-
# else
|
117
|
-
raise "That package doesn't seem to be a core package"
|
118
|
-
# end
|
119
|
-
# if it does have a slash, and isn't a full url, then assume its a github repo
|
120
|
-
elsif not package_name.start_with?(/https?:\/\//)
|
121
|
-
repo_url = "https://github.com/"+package_name
|
122
|
-
else
|
123
|
-
repo_url = package_name
|
124
|
-
end
|
125
|
-
return repo_url
|
96
|
+
FS.save(info_data, to: Atk.paths[:info], as: :yaml )
|
126
97
|
end
|
127
98
|
|
128
99
|
def self.setup(package_name, arguments)
|
129
|
-
repo_url =
|
130
|
-
project_folder =
|
100
|
+
repo_url = AtkPackage.new(package_name).url
|
101
|
+
project_folder = Atk.info["project_folder"]
|
131
102
|
# if there's no project folder
|
132
103
|
if not project_folder
|
133
104
|
# then use the current folder
|
@@ -147,11 +118,7 @@ module ATK
|
|
147
118
|
if setup_command.is_a?(Code)
|
148
119
|
setup_command.run(arguments)
|
149
120
|
else
|
150
|
-
|
151
|
-
"'"+Console.single_quote_escape(each)+"'"
|
152
|
-
end
|
153
|
-
console_line = setup_command+' '+(safe_arguments.join(' '))
|
154
|
-
system(console_line)
|
121
|
+
system(setup_command + Console.make_arguments_appendable(arguments))
|
155
122
|
end
|
156
123
|
end
|
157
124
|
puts "\n\n\n\n============================================================"
|
@@ -162,7 +129,145 @@ module ATK
|
|
162
129
|
end
|
163
130
|
end
|
164
131
|
|
165
|
-
def
|
132
|
+
def self.run(package_name, arguments=[])
|
133
|
+
the_package = AtkPackage.new(package_name)
|
134
|
+
the_package.run(arguments)
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.not_yet_implemented()
|
166
138
|
puts "Sorry, this feature is still under development"
|
167
139
|
end
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
class AtkPackage
|
145
|
+
def initialize(package_name)
|
146
|
+
@init_name = package_name
|
147
|
+
end
|
148
|
+
|
149
|
+
def simple_name
|
150
|
+
if @simple_name == nil
|
151
|
+
source = @init_name.strip
|
152
|
+
# if its starts with "atk/", just remove that part
|
153
|
+
source = source.sub( /^atk\//, "" )
|
154
|
+
# if it starts with "https://github.com/", just remove that part
|
155
|
+
@simple_name = source.sub( /^https:\/\/github.com\//, "" )
|
156
|
+
end
|
157
|
+
return @simple_name
|
158
|
+
end
|
159
|
+
|
160
|
+
def url
|
161
|
+
if @url == nil
|
162
|
+
simple_name = self.simple_name()
|
163
|
+
# if the package name does not have a slash in it, then assume it is a core / approved installer
|
164
|
+
if not (simple_name =~ /.*\/.*/)
|
165
|
+
# TODO: turn this into a check for is_core_repo?(package_name)
|
166
|
+
# path_to_core_listing = Atk.paths[:core_yaml]
|
167
|
+
# core = YAML.load_file(path_to_core_listing)
|
168
|
+
# if core[package_name] == nil
|
169
|
+
# puts "I don't see that package in the core, let me make sure I have the latest info"
|
170
|
+
# download("https://raw.githubusercontent.com/aggie-tool-kit/atk/master/interface/core.yaml", as: path_to_core_listing)
|
171
|
+
# core = YAML.load_file(path_to_core_listing)
|
172
|
+
# end
|
173
|
+
# if core[package_name] != nil
|
174
|
+
# repo_url = core[package_name]["source"]
|
175
|
+
# else
|
176
|
+
raise "That package #{@init_name} doesn't seem to be a core package"
|
177
|
+
# end
|
178
|
+
# if it does have a slash, and isn't a full url, then assume its a github repo
|
179
|
+
elsif not simple_name.start_with?(/https?:\/\//)
|
180
|
+
repo_url = "https://github.com/"+simple_name
|
181
|
+
else
|
182
|
+
repo_url = simple_name
|
183
|
+
end
|
184
|
+
@url = repo_url
|
185
|
+
end
|
186
|
+
return @url
|
187
|
+
end
|
188
|
+
|
189
|
+
def cache_name()
|
190
|
+
if @cache_name == nil
|
191
|
+
repo_url = self.url()
|
192
|
+
require 'digest'
|
193
|
+
repo_hash = Digest::MD5.hexdigest(repo_url)
|
194
|
+
repo_name = Git.repo_name(repo_url)
|
195
|
+
@cache_name = repo_name+"_"+repo_hash
|
196
|
+
end
|
197
|
+
return @cache_name
|
198
|
+
end
|
199
|
+
|
200
|
+
def cache_location()
|
201
|
+
if @cache_location == nil
|
202
|
+
@cache_location = Atk.paths['repos']/self.cache_name
|
203
|
+
end
|
204
|
+
return @cache_location
|
205
|
+
end
|
206
|
+
|
207
|
+
def ensure_cached()
|
208
|
+
if @is_cached == nil
|
209
|
+
Git.ensure_cloned_and_up_to_date(self.cache_location, self.url)
|
210
|
+
@is_cached = true
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def run(arguments)
|
215
|
+
# make sure the repo is downloaded
|
216
|
+
self.ensure_cached()
|
217
|
+
FS.in_dir(self.cache_location) do
|
218
|
+
run_command = nil
|
219
|
+
begin
|
220
|
+
run_command = Info["(installer)"]["(commands)"]["(run)"]
|
221
|
+
rescue
|
222
|
+
end
|
223
|
+
if run_command.is_a?(String)
|
224
|
+
system(run_command + Console.make_arguments_appendable(arguments))
|
225
|
+
else
|
226
|
+
#
|
227
|
+
# refine the error message
|
228
|
+
#
|
229
|
+
custom_message = ""
|
230
|
+
if run_command != nil && ( !run_command.is_a?(String) )
|
231
|
+
custom_message = "✖ the (run) command wasn't a string".red
|
232
|
+
else
|
233
|
+
yaml_exists = File.exist?(self.cache_location()/"info.yaml")
|
234
|
+
|
235
|
+
if not yaml_exists
|
236
|
+
custom_message = "✖ there was no info.yaml for this package".red
|
237
|
+
else
|
238
|
+
error_loading_yaml = false
|
239
|
+
begin
|
240
|
+
YAML.load_file("./info.yaml")
|
241
|
+
rescue
|
242
|
+
error_loading_yaml = true
|
243
|
+
end
|
244
|
+
if error_loading_yaml
|
245
|
+
custom_message = "✖ there was an issue loading the info.yaml for this package".red
|
246
|
+
else
|
247
|
+
if run_command["(installer)"] == nil
|
248
|
+
custom_message = "✖ there wasn't an (installer) key with a run command".red
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
# throw error for command not being runable
|
255
|
+
raise <<-HEREDOC.remove_indent
|
256
|
+
|
257
|
+
|
258
|
+
#{custom_message}
|
259
|
+
|
260
|
+
For the repository to be runnable
|
261
|
+
1. There needs to be an #{"info.yaml".blue}
|
262
|
+
2. The info.yaml needs to be in the root directory/folder
|
263
|
+
3. It needs to contain:
|
264
|
+
#{"
|
265
|
+
(installer):
|
266
|
+
(commands):
|
267
|
+
(run): \"a commandline command\"
|
268
|
+
".blue}
|
269
|
+
HEREDOC
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
168
273
|
end
|
data/lib/atk/commands/project.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative '../atk_info'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Atk
|
4
4
|
def self.project(args)
|
5
5
|
# TODO: check to make sure project exists
|
6
6
|
if args.length == 0
|
@@ -159,7 +159,7 @@ module ATK
|
|
159
159
|
end
|
160
160
|
else
|
161
161
|
puts "I don't recognized that command\nhere's the `project --help` which might get you what you're looking for:"
|
162
|
-
|
162
|
+
Atk.project(["help"])
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
data/lib/atk/console.rb
CHANGED
@@ -61,6 +61,14 @@ class TTY::Prompt
|
|
61
61
|
def single_quote_escape(string)
|
62
62
|
string.gsub(/'/, "'\"'\"'")
|
63
63
|
end
|
64
|
+
|
65
|
+
def make_arguments_appendable(arguments)
|
66
|
+
# TODO: make sure this works on windows
|
67
|
+
safe_arguments = arguments.map do |each|
|
68
|
+
" '"+Console.single_quote_escape(each)+"'"
|
69
|
+
end
|
70
|
+
return safe_arguments.join('')
|
71
|
+
end
|
64
72
|
end
|
65
73
|
|
66
74
|
Console = TTY::Prompt.new
|
data/lib/atk/file_sys.rb
CHANGED
@@ -200,7 +200,7 @@ module FileSys
|
|
200
200
|
|
201
201
|
def self.path_pieces(path)
|
202
202
|
# use this function like this:
|
203
|
-
# *path, filename, extension = FS.
|
203
|
+
# *path, filename, extension = FS.path_pieces('/Users/jeffhykin/Desktop/place1/file1.pdf')
|
204
204
|
pieces = Pathname(path).each_filename.to_a
|
205
205
|
extname = File.extname(pieces[-1])
|
206
206
|
basebasename = pieces[-1][0...(pieces[-1].size - extname.size)]
|
data/lib/atk/git.rb
CHANGED
@@ -18,4 +18,10 @@ module Git
|
|
18
18
|
# TODO: make this a force pull
|
19
19
|
git_repo.pull
|
20
20
|
end
|
21
|
+
|
22
|
+
def self.repo_name(url)
|
23
|
+
require_relative './file_sys'
|
24
|
+
*folders, name, extension = FS.path_pieces('https://stackoverflow.com/questions/19072070/how-to-find-where-gem-files-are-installed')
|
25
|
+
return name
|
26
|
+
end
|
21
27
|
end
|
data/lib/atk/set_command.rb
CHANGED
@@ -12,9 +12,9 @@ class TTY::Prompt
|
|
12
12
|
def set_command(name, code)
|
13
13
|
if OS.is?("unix")
|
14
14
|
exec_path = "/usr/local/bin/#{name}"
|
15
|
-
local_place =
|
15
|
+
local_place = Atk.temp_path(name)
|
16
16
|
# add the hash bang
|
17
|
-
hash_bang = "#!#{
|
17
|
+
hash_bang = "#!#{Atk.paths[:ruby]}\n"
|
18
18
|
# create the file
|
19
19
|
FS.write(hash_bang+code, to: local_place)
|
20
20
|
# copy to command folder
|
data/lib/atk/yaml_info_parser.rb
CHANGED
@@ -239,22 +239,22 @@ class Info
|
|
239
239
|
HEREDOC
|
240
240
|
end
|
241
241
|
rescue => exception
|
242
|
-
puts "\n\nI'm having trouble loading the info.yaml file. Here's the error:\n"
|
242
|
+
puts "\n\nI'm having trouble loading the info.yaml file. Here's the error:\n".red
|
243
243
|
raise exception
|
244
244
|
end
|
245
245
|
else
|
246
|
-
raise "\n\nCouldn't find an info.yaml file in #{Dir.pwd}"
|
246
|
+
raise "\n\nCouldn't find an info.yaml file in #{Dir.pwd}".red
|
247
247
|
end
|
248
248
|
@@project = @@data['(project)']
|
249
249
|
if @@project == nil
|
250
250
|
# TODO: maybe change this to be optional in the future and have default settings
|
251
|
-
raise "\n\nThere is no (project): key in the info.yaml\n(so ATK is unable to parse the project settings)"
|
251
|
+
raise "\n\nThere is no (project): key in the info.yaml\n(so ATK is unable to parse the project settings)".red
|
252
252
|
end
|
253
253
|
|
254
254
|
@@settings = @@project['(advanced_setup)']
|
255
255
|
if @@settings == nil
|
256
256
|
# TODO: maybe change this to be optional in the future and have default settings
|
257
|
-
raise "\n\nThere is no (advanced_setup): key in the (project) of the info.yaml\n(so ATK is unable to parse the project settings)"
|
257
|
+
raise "\n\nThere is no (advanced_setup): key in the (project) of the info.yaml\n(so ATK is unable to parse the project settings)".red
|
258
258
|
end
|
259
259
|
Info.parse_advanced_setup(@@settings, @@settings)
|
260
260
|
@@dependencies = @@settings['(dependencies)']
|
@@ -309,7 +309,7 @@ class Info
|
|
309
309
|
loop do
|
310
310
|
# if all folders exhausted
|
311
311
|
if folders.size == 0
|
312
|
-
raise <<-HEREDOC.remove_indent
|
312
|
+
raise <<-HEREDOC.remove_indent.red
|
313
313
|
|
314
314
|
Couldn't find an info.yaml in the current directory or any parent directory
|
315
315
|
#{Dir.pwd}
|
data/lib/atk_toolbox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atk_toolbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.107
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zip
|
@@ -105,7 +105,6 @@ files:
|
|
105
105
|
- lib/atk/git.rb
|
106
106
|
- lib/atk/online.rb
|
107
107
|
- lib/atk/os.rb
|
108
|
-
- lib/atk/output.rb
|
109
108
|
- lib/atk/package_managers.rb
|
110
109
|
- lib/atk/remove_indent.rb
|
111
110
|
- lib/atk/set_command.rb
|