atk_toolbox 0.0.108 → 0.0.109
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/lib/atk/autocomplete.rb +12 -0
- data/lib/atk/extra_yaml.rb +1 -9
- data/lib/atk/file_sys.rb +23 -23
- data/lib/atk/os.rb +0 -43
- data/lib/atk/yaml_info_parser.rb +53 -34
- data/lib/atk_toolbox/version.rb +1 -1
- data/test/main.rb +4 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb7564990fc348d432e32a8657f4311049b88460b607cb928371d629a6c05a5a
|
4
|
+
data.tar.gz: cc9f1798043595bac786b73b14d219944f2a82fe1524f834dbb0af9401f21d3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c948f809e4e2b229d7aa6e122f9001e4554c8ec6fb6dbc2feb798dff3d0c88e25e9df13bf363f2249feb27515b4527ccc76e738ac2c975ddb9e955d211cd2b3a
|
7
|
+
data.tar.gz: ac8c6d6c24a1540ab1a5867c8a1c5ac5dd5d90741e4eb0367fef828fbf96df5f83d67021712b5aa7452e2d54fdeed5bb152a3e5d6964c43a65d8ee12e2801335
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Atk
|
2
|
+
def self.autocomplete(which_command)
|
3
|
+
if which_command == '_'
|
4
|
+
require_relative './yaml_info_parser.rb'
|
5
|
+
begin
|
6
|
+
puts Info.project_commands().keys.map { |each| each.gsub(' ', '\ ') }.join(' ')
|
7
|
+
rescue => exception
|
8
|
+
puts ""
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/atk/extra_yaml.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative './os'
|
2
1
|
require_relative './remove_indent'
|
3
2
|
require_relative './version'
|
4
3
|
require 'json'
|
@@ -145,11 +144,4 @@ class Psych::Nodes::Node
|
|
145
144
|
new_string = inject_string(@document.string, middle_part, @start_line, @start_column, @end_line, @end_column)
|
146
145
|
@document.init( string: new_string )
|
147
146
|
end
|
148
|
-
end
|
149
|
-
|
150
|
-
|
151
|
-
class String
|
152
|
-
def yaml
|
153
|
-
return YAML.load(self)
|
154
|
-
end
|
155
|
-
end
|
147
|
+
end
|
data/lib/atk/file_sys.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
require 'etc'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'pathname'
|
4
|
-
require 'open-uri'
|
5
|
-
require 'json'
|
6
|
-
require 'yaml'
|
7
|
-
require 'csv'
|
8
4
|
require_relative './os'
|
9
5
|
require_relative './remove_indent'
|
10
6
|
|
@@ -29,7 +25,7 @@ class String
|
|
29
25
|
end
|
30
26
|
end
|
31
27
|
|
32
|
-
module
|
28
|
+
module FileSystem
|
33
29
|
# This is a combination of the FileUtils, File, Pathname, IO, Etc, and Dir classes,
|
34
30
|
# along with some other helpful methods
|
35
31
|
# It is by-default forceful (dangerous/overwriting)
|
@@ -44,7 +40,7 @@ module FileSys
|
|
44
40
|
|
45
41
|
def self.write(data, to:nil)
|
46
42
|
# make sure the containing folder exists
|
47
|
-
|
43
|
+
FileSystem.makedirs(File.dirname(to))
|
48
44
|
# actually download the file
|
49
45
|
IO.write(to, data)
|
50
46
|
end
|
@@ -58,8 +54,11 @@ module FileSys
|
|
58
54
|
# add a special exception for csv files
|
59
55
|
case as
|
60
56
|
when :csv
|
57
|
+
require 'csv'
|
61
58
|
FS.write(value.map(&:to_csv).join, to: to)
|
62
59
|
else
|
60
|
+
require 'json'
|
61
|
+
require 'yaml'
|
63
62
|
conversion_method_name = "to_#{as}"
|
64
63
|
if value.respond_to? conversion_method_name
|
65
64
|
# this is like calling `value.to_json`, `value.to_yaml`, or `value.to_csv` but programatically
|
@@ -68,12 +67,12 @@ module FileSys
|
|
68
67
|
raise <<-HEREDOC.remove_indent
|
69
68
|
|
70
69
|
|
71
|
-
The
|
70
|
+
The FileSystem.save(value, to: #{to.inspect}, as: #{as.inspect}) had a problem.
|
72
71
|
The as: #{as}, gets converted into value.to_#{as}
|
73
72
|
Normally that returns a string that can be saved to a file
|
74
73
|
However, the value.to_#{as} did not return a string.
|
75
74
|
Value is of the #{value.class} class. Add a `to_#{as}`
|
76
|
-
method to that class that returns a string to get
|
75
|
+
method to that class that returns a string to get FileSystem.save() working
|
77
76
|
HEREDOC
|
78
77
|
end
|
79
78
|
FS.write(string_value, to:to)
|
@@ -81,13 +80,13 @@ module FileSys
|
|
81
80
|
raise <<-HEREDOC.remove_indent
|
82
81
|
|
83
82
|
|
84
|
-
The
|
83
|
+
The FileSystem.save(value, to: #{to.inspect}, as: #{as.inspect}) had a problem.
|
85
84
|
|
86
85
|
The as: #{as}, gets converted into value.to_#{as}
|
87
86
|
Normally that returns a string that can be saved to a file
|
88
87
|
However, the value.to_#{as} is not a method for value
|
89
88
|
Value is of the #{value.class} class. Add a `to_#{as}`
|
90
|
-
method to that class that returns a string to get
|
89
|
+
method to that class that returns a string to get FileSystem.save() working
|
91
90
|
HEREDOC
|
92
91
|
end
|
93
92
|
end
|
@@ -135,24 +134,24 @@ module FileSys
|
|
135
134
|
|
136
135
|
def self.copy(from:nil, to:nil, new_name:"", force: true, preserve: false, dereference_root: false)
|
137
136
|
if new_name == ""
|
138
|
-
raise "\n\
|
137
|
+
raise "\n\nFileSystem.copy() needs a new_name: argument\nset new_name:nil if you wish the file/folder to keep the same name\ne.g. FileSystem.copy(from:'place/thing', to:'place', new_name:nil)"
|
139
138
|
elsif new_name == nil
|
140
139
|
new_name = File.basename(from)
|
141
140
|
end
|
142
141
|
# make sure the "to" path exists
|
143
|
-
|
142
|
+
FileSystem.touch_dir(to)
|
144
143
|
# perform the copy
|
145
144
|
FileUtils.copy_entry(from, to/new_name, preserve, dereference_root, force)
|
146
145
|
end
|
147
146
|
|
148
147
|
def self.move(from:nil, to:nil, new_name:"", force: true, noop: nil, verbose: nil, secure: nil)
|
149
148
|
if new_name == ""
|
150
|
-
raise "\n\
|
149
|
+
raise "\n\nFileSystem.move() needs a new_name: argument\nset new_name:nil if you wish the file/folder to keep the same name\ne.g. FileSystem.move(from:'place/thing', to:'place', new_name:nil)"
|
151
150
|
elsif new_name == nil
|
152
151
|
new_name = File.basename(from)
|
153
152
|
end
|
154
153
|
# make sure the "to" path exists
|
155
|
-
|
154
|
+
FileSystem.touch_dir(to)
|
156
155
|
# perform the move
|
157
156
|
FileUtils.move(from, to/new_name, force: force, noop: noop, verbose: verbose, secure: secure)
|
158
157
|
end
|
@@ -160,11 +159,11 @@ module FileSys
|
|
160
159
|
def self.rename(from:nil, to:nil, force: true)
|
161
160
|
# if the directories are different, then throw an error
|
162
161
|
if not File.identical?(File.dirname(from), File.dirname(to))
|
163
|
-
raise "\n\
|
162
|
+
raise "\n\nFileSystem.rename() requires that the the file stay in the same place and only change names.\nIf you want to move a file, use FileSystem.move()"
|
164
163
|
end
|
165
164
|
# make sure the path is clear
|
166
165
|
if force
|
167
|
-
|
166
|
+
FileSystem.delete(to)
|
168
167
|
end
|
169
168
|
# perform the copy
|
170
169
|
File.rename(from, to)
|
@@ -177,7 +176,7 @@ module FileSys
|
|
177
176
|
singleton_class.send(:alias_method, :new_file, :touch)
|
178
177
|
|
179
178
|
def self.touch_dir(path)
|
180
|
-
if not
|
179
|
+
if not FileSystem.directory?(path)
|
181
180
|
FileUtils.makedirs(path)
|
182
181
|
end
|
183
182
|
end
|
@@ -205,7 +204,7 @@ module FileSys
|
|
205
204
|
extname = File.extname(pieces[-1])
|
206
205
|
basebasename = pieces[-1][0...(pieces[-1].size - extname.size)]
|
207
206
|
# add the root if the path is absolute
|
208
|
-
if
|
207
|
+
if FileSystem.abs?(path)
|
209
208
|
if not OS.is?("windows")
|
210
209
|
pieces.unshift('/')
|
211
210
|
else
|
@@ -224,10 +223,10 @@ module FileSys
|
|
224
223
|
Dir.glob(path, File::FNM_DOTMATCH) - %w[. ..]
|
225
224
|
end
|
226
225
|
def self.list_files(path=".")
|
227
|
-
Dir.children(path).map{|each| path/each }.select {|each|
|
226
|
+
Dir.children(path).map{|each| path/each }.select {|each| FileSystem.file?(each)}
|
228
227
|
end
|
229
228
|
def self.list_folders(path=".")
|
230
|
-
Dir.children(path).map{|each| path/each }.select {|each|
|
229
|
+
Dir.children(path).map{|each| path/each }.select {|each| FileSystem.directory?(each)}
|
231
230
|
end
|
232
231
|
def self.ls(path=".")
|
233
232
|
Dir.children(path)
|
@@ -379,6 +378,7 @@ module FileSys
|
|
379
378
|
end
|
380
379
|
|
381
380
|
def self.download(input=nil, from:nil, url:nil, to:nil)
|
381
|
+
require 'open-uri'
|
382
382
|
# if only one argument, either input or url
|
383
383
|
if ((input!=nil) != (url!=nil)) && (from==nil) && (to==nil)
|
384
384
|
# this covers:
|
@@ -409,8 +409,8 @@ module FileSys
|
|
409
409
|
download 'file', url:'site.com/file'
|
410
410
|
HEREDOC
|
411
411
|
end
|
412
|
-
|
412
|
+
FileSystem.write(open(URI.encode(the_url)).read, to: file_name)
|
413
413
|
end
|
414
414
|
end
|
415
|
-
# create an FS singleton_class.send(:alias_method, :FS = :
|
416
|
-
FS =
|
415
|
+
# create an FS singleton_class.send(:alias_method, :FS = :FileSystem)
|
416
|
+
FS = FileSystem
|
data/lib/atk/os.rb
CHANGED
@@ -1,47 +1,4 @@
|
|
1
1
|
require_relative './version.rb'
|
2
|
-
# every OS version is a perfect heirarchy of versions and sub verisons that may or may not be chronological
|
3
|
-
# every OS gets it's own custom heirarchy since there are issues like x86 support and "student edition" etc
|
4
|
-
# the plan is to release this heirarchy on its own repo, and to get pull requests for anyone who wants to add their own OS
|
5
|
-
os_heirarchy = {
|
6
|
-
"windows" => {
|
7
|
-
"10" => {},
|
8
|
-
"8.1" => {},
|
9
|
-
"8" => {},
|
10
|
-
"7" => {},
|
11
|
-
"vista" => {},
|
12
|
-
"xp" => {},
|
13
|
-
"95" => {},
|
14
|
-
},
|
15
|
-
"mac" => {
|
16
|
-
"mojave" => {},
|
17
|
-
"high sierra" => {},
|
18
|
-
"sierra" => {},
|
19
|
-
"el capitan" => {},
|
20
|
-
"yosemite" => {},
|
21
|
-
"mavericks" => {},
|
22
|
-
"mountain lion" => {},
|
23
|
-
"lion" => {},
|
24
|
-
"snow leopard" => {},
|
25
|
-
"leopard" => {},
|
26
|
-
"tiger" => {},
|
27
|
-
"panther" => {},
|
28
|
-
"jaguar" => {},
|
29
|
-
"puma" => {},
|
30
|
-
"cheetah" => {},
|
31
|
-
"kodiak" => {},
|
32
|
-
},
|
33
|
-
"ubuntu" => {},
|
34
|
-
"arch" => {},
|
35
|
-
"manjaro" => {},
|
36
|
-
"deepin" => {},
|
37
|
-
"centos" => {},
|
38
|
-
"debian" => {},
|
39
|
-
"fedora" => {},
|
40
|
-
"elementary" => {},
|
41
|
-
"zorin" => {},
|
42
|
-
"raspian" => {},
|
43
|
-
"android" => {},
|
44
|
-
}
|
45
2
|
|
46
3
|
# this statment was extracted from the ptools gem, credit should go to them
|
47
4
|
# https://github.com/djberg96/ptools/blob/master/lib/ptools.rb
|
data/lib/atk/yaml_info_parser.rb
CHANGED
@@ -1,11 +1,27 @@
|
|
1
1
|
require "yaml"
|
2
|
-
|
2
|
+
require "colorize"
|
3
3
|
require_relative './os'
|
4
|
-
require_relative './file_sys'
|
5
|
-
require_relative './extra_yaml'
|
6
4
|
require 'fileutils'
|
7
5
|
require_relative './remove_indent.rb'
|
8
6
|
|
7
|
+
# duplicated for the sake of efficieny (so that the parser doesn't need to import all of FileSystem)
|
8
|
+
module FileSystem
|
9
|
+
def self.join(*args)
|
10
|
+
if OS.is?("windows")
|
11
|
+
folders_without_leading_or_trailing_slashes = args.map do |each|
|
12
|
+
# replace all forward slashes with backslashes
|
13
|
+
backslashed_only = each.gsub(/\//,"\\")
|
14
|
+
# remove leading/trailing backslashes
|
15
|
+
backslashed_only.gsub(/(^\\|^\/|\\$|\/$)/,"")
|
16
|
+
end
|
17
|
+
# join all of them with backslashes
|
18
|
+
folders_without_leading_or_trailing_slashes.join("\\")
|
19
|
+
else
|
20
|
+
File.join(*args)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
9
25
|
# TODO: for efficiency, have the parser generate a parsed object, instead of only handling everything dynamically (allow for both)
|
10
26
|
|
11
27
|
#
|
@@ -103,7 +119,7 @@ class Info
|
|
103
119
|
def self.init
|
104
120
|
current_dir = Dir.pwd/"info.yaml"
|
105
121
|
# if there isn't a info.yaml then create one
|
106
|
-
if not
|
122
|
+
if not File.file?(current_dir)
|
107
123
|
# copy the default yaml to the current dir
|
108
124
|
FileUtils.cp(__dir__/"default_info.yaml", current_dir)
|
109
125
|
puts "info.yaml created successfully"
|
@@ -225,25 +241,27 @@ class Info
|
|
225
241
|
# @@environment_variables
|
226
242
|
|
227
243
|
# get the local yaml file
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
244
|
+
absolute_parent_path = File.absolute_path(Info.folder())
|
245
|
+
source = FileSystem.join(absolute_parent_path, "info.yaml")
|
246
|
+
begin
|
247
|
+
@@data = YAML.load_file(source)
|
248
|
+
if @@data['(using_atk_version)'] != 1.0
|
249
|
+
raise <<-HEREDOC.remove_indent
|
250
|
+
|
251
|
+
|
252
|
+
When opening the info.yaml file in '#{self.folder}'
|
253
|
+
the (using_atk_version) was listed as: #{@@data['(using_atk_version)'].inspect}
|
254
|
+
The version of atk_toolbox you have installed is only capable of handling version 1.0
|
255
|
+
either atk_toolbox needs to be changed, or the (using_atk_version) version needs to be changed.
|
256
|
+
HEREDOC
|
257
|
+
end
|
258
|
+
rescue
|
259
|
+
if File.file?(source)
|
242
260
|
puts "\n\nI'm having trouble loading the info.yaml file. Here's the error:\n".red
|
243
261
|
raise exception
|
262
|
+
else
|
263
|
+
raise "\n\nCouldn't find an info.yaml file in #{Dir.pwd}".red
|
244
264
|
end
|
245
|
-
else
|
246
|
-
raise "\n\nCouldn't find an info.yaml file in #{Dir.pwd}".red
|
247
265
|
end
|
248
266
|
@@project = @@data['(project)']
|
249
267
|
if @@project == nil
|
@@ -269,7 +287,7 @@ class Info
|
|
269
287
|
for each_key, each_value in @@paths
|
270
288
|
# if its an array, just join it together
|
271
289
|
if each_value.is_a?(Array)
|
272
|
-
each_value =
|
290
|
+
each_value = FileSystem.join(*each_value)
|
273
291
|
end
|
274
292
|
if each_value.is_a?(String)
|
275
293
|
# remove the ./ if it exists
|
@@ -279,7 +297,7 @@ class Info
|
|
279
297
|
# Dont add a source_path if its an absolute path
|
280
298
|
if not each_value.size > 0 && each_value[0] == '/'
|
281
299
|
# convert the path into an absolute path
|
282
|
-
@@paths[each_key] =
|
300
|
+
@@paths[each_key] = FileSystem.join(absolute_parent_path , each_value)
|
283
301
|
end
|
284
302
|
end
|
285
303
|
end
|
@@ -304,29 +322,30 @@ class Info
|
|
304
322
|
end
|
305
323
|
|
306
324
|
def self.folder()
|
307
|
-
|
308
|
-
*folders, name, ext = FS.path_pieces(first_location)
|
325
|
+
folder = Dir.pwd
|
309
326
|
loop do
|
327
|
+
# if the info.yaml exists in that folder
|
328
|
+
if FileSystem.join(folder, "info.yaml")
|
329
|
+
return folder
|
330
|
+
end
|
331
|
+
|
332
|
+
next_location = File.dirname(folder)
|
333
|
+
|
310
334
|
# if all folders exhausted
|
311
|
-
if
|
335
|
+
if next_location == folder
|
312
336
|
raise <<-HEREDOC.remove_indent.red
|
313
337
|
|
314
|
-
Couldn't find an info.yaml in the current directory or any parent directory
|
338
|
+
#{"Couldn't find an info.yaml in the current directory or any parent directory".red}
|
315
339
|
#{Dir.pwd}
|
316
340
|
Are you sure you're running the command from the correct directory?
|
317
341
|
HEREDOC
|
318
342
|
end
|
319
|
-
|
320
|
-
|
321
|
-
if FS.file?(path)
|
322
|
-
return FS.join(*folders)
|
323
|
-
end
|
324
|
-
# go up the folders
|
325
|
-
folders.pop()
|
343
|
+
|
344
|
+
folder = next_location
|
326
345
|
end
|
327
346
|
end
|
328
347
|
|
329
348
|
def self.source_path()
|
330
|
-
return self.folder()
|
349
|
+
return FileSystem.join( self.folder(), "info.yaml")
|
331
350
|
end
|
332
351
|
end
|
data/lib/atk_toolbox/version.rb
CHANGED
data/test/main.rb
CHANGED
@@ -2,4 +2,7 @@ require_relative '../lib/atk_toolbox'
|
|
2
2
|
|
3
3
|
Dir.chdir __dir__
|
4
4
|
|
5
|
-
puts Info.paths.to_yaml
|
5
|
+
puts Info.paths.to_yaml
|
6
|
+
|
7
|
+
# only require the autocomplete, not the entire ATK toolbox
|
8
|
+
require File.dirname(Gem.find_latest_files('atk_toolbox')[0])+"/atk/autocomplete.rb"; Atk.autocomplete('_')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.109
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
@@ -97,6 +97,7 @@ extensions: []
|
|
97
97
|
extra_rdoc_files: []
|
98
98
|
files:
|
99
99
|
- lib/atk/atk_info.rb
|
100
|
+
- lib/atk/autocomplete.rb
|
100
101
|
- lib/atk/commands/project.rb
|
101
102
|
- lib/atk/console.rb
|
102
103
|
- lib/atk/default_info.yaml
|