atk_toolbox 0.0.108 → 0.0.109
Sign up to get free protection for your applications and to get access to all the features.
- 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
|