atk_toolbox 0.0.45 → 0.0.46
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 +4 -5
- data/lib/atk/extra_file_utils.rb +258 -18
- data/lib/atk/set_command.rb +3 -5
- data/lib/atk_toolbox/version.rb +1 -1
- metadata +1 -2
- data/lib/atk/download.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3b9bd3949490ee39a6afe827c568f40b9e9c152f530269ffe17e80e797bc8e4
|
4
|
+
data.tar.gz: 6a7ca257444314078b134db311eb33e1b397eb75538e9b0c098dabe0a0e02651
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 590cd15964c6322f6501fc4032fd914cddee9ca1eb45b75d3d44eaa9929b8435c9a2f2a5dce495175bc4c59d0be49fa8bed1f7a7da930345655820896e891203
|
7
|
+
data.tar.gz: 034a4883a6274a8f0d1dd1273d0d595601310bc5762688dafacde4f5958a42d9471ad932fc92fcc426b6bf15a8a3c3d238e8b47d1de8058d6393aec83b93fecc
|
data/lib/atk/atk_info.rb
CHANGED
@@ -36,9 +36,8 @@ module ATK
|
|
36
36
|
def self.temp_path(filepath)
|
37
37
|
new_path = ATK.paths[:temp]/filepath
|
38
38
|
# make sure the path is empty
|
39
|
-
|
40
|
-
|
41
|
-
end
|
39
|
+
FS.write("", to: new_path)
|
40
|
+
FS.delete(new_path)
|
42
41
|
return new_path
|
43
42
|
end
|
44
43
|
|
@@ -46,8 +45,8 @@ module ATK
|
|
46
45
|
settings_path = ATK.paths[:info]
|
47
46
|
atk_settings_key = "atk_settings"
|
48
47
|
# if it doesn't exist then create it
|
49
|
-
if not
|
50
|
-
|
48
|
+
if not FS.exist?(settings_path)
|
49
|
+
FS.write("#{atk_settings_key}: {}", to: settings_path)
|
51
50
|
return {}
|
52
51
|
else
|
53
52
|
data = YAML.load_file(settings_path)
|
data/lib/atk/extra_file_utils.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'etc'
|
2
2
|
require 'fileutils'
|
3
|
-
require '
|
3
|
+
require 'pathname'
|
4
|
+
require 'open-uri'
|
4
5
|
require_relative './os'
|
5
6
|
|
6
7
|
if OS.is?("unix")
|
@@ -10,6 +11,8 @@ else # windows
|
|
10
11
|
end
|
11
12
|
|
12
13
|
class String
|
14
|
+
# this is for easy creation of cross-platform filepaths
|
15
|
+
# ex: "foldername"/"filename"
|
13
16
|
def /(next_string)
|
14
17
|
if OS.is?("windows")
|
15
18
|
self + "\\" + next_string
|
@@ -17,9 +20,67 @@ class String
|
|
17
20
|
File.join(self, next_string)
|
18
21
|
end
|
19
22
|
end
|
23
|
+
|
24
|
+
# this is for having docstrings that get their indent removed
|
25
|
+
# this is used frequently for multi-line strings and error messages
|
26
|
+
# example usage
|
27
|
+
# puts <<-HEREDOC.remove_indent
|
28
|
+
# This command does such and such.
|
29
|
+
# this part is extra indented
|
30
|
+
# HEREDOC
|
31
|
+
def remove_indent
|
32
|
+
gsub(/^[ \t]{#{self.match(/^[ \t]*/)[0].length}}/, '')
|
33
|
+
end
|
20
34
|
end
|
21
35
|
|
22
36
|
class FileSys
|
37
|
+
# This is a combination of the FileUtils, File, Pathname, IO, Etc, and Dir classes,
|
38
|
+
# along with some other helpful methods
|
39
|
+
# It is by-default forceful (dangerous/overwriting)
|
40
|
+
# it is made to get things done in a no-nonsense error-free way and to have every pratical tool in one place
|
41
|
+
|
42
|
+
# TODO
|
43
|
+
# change_owner
|
44
|
+
# set_permissions
|
45
|
+
# relative_path_between
|
46
|
+
# relative_path_to
|
47
|
+
# add a force: true option to most of the commands
|
48
|
+
|
49
|
+
def self.write(data, to:nil)
|
50
|
+
# make sure the containing folder exists
|
51
|
+
FileSys.makedirs(File.dirname(to))
|
52
|
+
# actually download the file
|
53
|
+
IO.write(to, data)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.read(filepath)
|
57
|
+
begin
|
58
|
+
return IO.read(filepath)
|
59
|
+
rescue Errno::ENOENT => exception
|
60
|
+
return nil
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.delete(path)
|
65
|
+
if File.file?(path)
|
66
|
+
File.delete(path)
|
67
|
+
elsif File.directory?(path)
|
68
|
+
FileUtils.rm_rf(path)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def username
|
73
|
+
if OS.is?(:windows)
|
74
|
+
return File.basename(ENV["userprofile"])
|
75
|
+
else
|
76
|
+
return Etc.getlogin
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.makedirs(path)
|
81
|
+
FileUtils.makedirs(path)
|
82
|
+
end
|
83
|
+
|
23
84
|
def self.in_dir(path_to_somewhere)
|
24
85
|
# save the current working dir
|
25
86
|
current_dir = Dir.pwd
|
@@ -32,27 +93,206 @@ class FileSys
|
|
32
93
|
return output
|
33
94
|
end
|
34
95
|
|
35
|
-
def self.
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
96
|
+
def self.copy(from:nil, to:nil, new_name:"", force: true, preserve: false, dereference_root: false)
|
97
|
+
if new_name == ""
|
98
|
+
raise "\n\nFileSys.copy() needs a new_name: argument\nset new_name:nil if you wish the file/folder to keep the same name\ne.g. FileSys.copy(from:'place/thing', to:'place', new_name:nil)"
|
99
|
+
end
|
100
|
+
# make sure the "to" path exists
|
101
|
+
FileSys.touch_dir(to)
|
102
|
+
# perform the copy
|
103
|
+
FileUtils.copy_entry(from, to/new_name, preserve, dereference_root, force)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.move(from:nil, to:nil, new_name:"", force: true, noop: nil, verbose: nil, secure: nil)
|
107
|
+
if new_name == ""
|
108
|
+
raise "\n\nFileSys.move() needs a new_name: argument\nset new_name:nil if you wish the file/folder to keep the same name\ne.g. FileSys.move(from:'place/thing', to:'place', new_name:nil)"
|
109
|
+
end
|
110
|
+
# make sure the "to" path exists
|
111
|
+
FileSys.touch_dir(to)
|
112
|
+
# perform the move
|
113
|
+
FileUtils.move(from, to/new_name, force: force, noop: noop, verbose: verbose, secure: secure)
|
40
114
|
end
|
41
115
|
|
42
|
-
def self.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
return nil
|
116
|
+
def self.rename(from:nil, to:nil, force: true)
|
117
|
+
# if the directories are different, then throw an error
|
118
|
+
if not File.identical?(File.dirname(from), File.dirname(to))
|
119
|
+
raise "\n\nFileSys.rename() requires that the the file stay in the same place and only change names.\nIf you want to move a file, use FileSys.move()"
|
47
120
|
end
|
121
|
+
# make sure the path is clear
|
122
|
+
if force
|
123
|
+
FileSys.delete(to)
|
124
|
+
end
|
125
|
+
# perform the copy
|
126
|
+
File.rename(from, to)
|
48
127
|
end
|
49
128
|
|
50
|
-
def self.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
129
|
+
def self.touch(*args)
|
130
|
+
return FileUtils.touch(*args)
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.touch_dir(path)
|
134
|
+
if not FileSys.directory?(path)
|
135
|
+
FileUtils.makedirs(path)
|
56
136
|
end
|
57
137
|
end
|
58
|
-
|
138
|
+
|
139
|
+
# Pathname aliases
|
140
|
+
def self.absolute_path?(path)
|
141
|
+
Pathname.new(path).absolute?
|
142
|
+
end
|
143
|
+
def self.abs?(path)
|
144
|
+
Pathname.new(path).absolute?
|
145
|
+
end
|
146
|
+
def self.relative_path?(path)
|
147
|
+
Pathname.new(path).relative?
|
148
|
+
end
|
149
|
+
def self.rel?(path)
|
150
|
+
Pathname.new(path).relative?
|
151
|
+
end
|
152
|
+
|
153
|
+
# dir aliases
|
154
|
+
def self.home
|
155
|
+
HOME
|
156
|
+
end
|
157
|
+
def self.glob(path)
|
158
|
+
Dir.glob(path, File::FNM_DOTMATCH) - %w[. ..]
|
159
|
+
end
|
160
|
+
def list_files(path=".")
|
161
|
+
Dir.children(path).select {|each| FileSys.file?(each)}
|
162
|
+
end
|
163
|
+
def list_folders(path=".")
|
164
|
+
Dir.children(path).select {|each| FileSys.directory?(each)}
|
165
|
+
end
|
166
|
+
def ls(path)
|
167
|
+
Dir.children(path)
|
168
|
+
end
|
169
|
+
def pwd
|
170
|
+
Dir.pwd
|
171
|
+
end
|
172
|
+
def cd(path, verbose: false)
|
173
|
+
FileUtils.cd(path, verbose: verbose)
|
174
|
+
end
|
175
|
+
def chdir(path, verbose: false)
|
176
|
+
FileUtils.cd(path, verbose: verbose)
|
177
|
+
end
|
178
|
+
|
179
|
+
# File aliases
|
180
|
+
def self.time_access(*args, **kwargs)
|
181
|
+
File.atime(*args, **kwargs)
|
182
|
+
end
|
183
|
+
def self.time_created(*args, **kwargs)
|
184
|
+
File.birthtime(*args, **kwargs)
|
185
|
+
end
|
186
|
+
def self.time_modified(*args, **kwargs)
|
187
|
+
end
|
188
|
+
def self.dir?(*args, **kwargs)
|
189
|
+
File.directory?(*args, **kwargs)
|
190
|
+
end
|
191
|
+
def self.exists?(*args, **kwargs)
|
192
|
+
File.exist?(*args,**kwargs)
|
193
|
+
end
|
194
|
+
|
195
|
+
# inherit from File
|
196
|
+
def self.absolute_path(*args, **kwargs)
|
197
|
+
File.absolute_path(*args,**kwargs)
|
198
|
+
end
|
199
|
+
def self.dirname(*args, **kwargs)
|
200
|
+
File.dirname(*args,**kwargs)
|
201
|
+
end
|
202
|
+
def self.basename(*args, **kwargs)
|
203
|
+
File.basename(*args,**kwargs)
|
204
|
+
end
|
205
|
+
def self.extname(*args, **kwargs)
|
206
|
+
File.extname(*args,**kwargs)
|
207
|
+
end
|
208
|
+
def self.directory?(*args, **kwargs)
|
209
|
+
File.directory?(*args,**kwargs)
|
210
|
+
end
|
211
|
+
def self.file?(*args, **kwargs)
|
212
|
+
File.file?(*args,**kwargs)
|
213
|
+
end
|
214
|
+
def self.empty?(*args, **kwargs)
|
215
|
+
File.empty?(*args,**kwargs)
|
216
|
+
end
|
217
|
+
def self.exist?(*args, **kwargs)
|
218
|
+
File.exist?(*args,**kwargs)
|
219
|
+
end
|
220
|
+
def self.executable?(*args, **kwargs)
|
221
|
+
File.executable?(*args,**kwargs)
|
222
|
+
end
|
223
|
+
def self.symlink?(*args, **kwargs)
|
224
|
+
File.symlink?(*args,**kwargs)
|
225
|
+
end
|
226
|
+
def self.owned?(*args, **kwargs)
|
227
|
+
File.owned?(*args,**kwargs)
|
228
|
+
end
|
229
|
+
def self.pipe?(*args, **kwargs)
|
230
|
+
File.pipe?(*args,**kwargs)
|
231
|
+
end
|
232
|
+
def self.readable?(*args, **kwargs)
|
233
|
+
File.readable?(*args,**kwargs)
|
234
|
+
end
|
235
|
+
def self.size?(*args, **kwargs)
|
236
|
+
File.size?(*args,**kwargs)
|
237
|
+
end
|
238
|
+
def self.socket?(*args, **kwargs)
|
239
|
+
File.socket?(*args,**kwargs)
|
240
|
+
end
|
241
|
+
def self.world_readable?(*args, **kwargs)
|
242
|
+
File.world_readable?(*args,**kwargs)
|
243
|
+
end
|
244
|
+
def self.world_writable?(*args, **kwargs)
|
245
|
+
File.world_writable?(*args,**kwargs)
|
246
|
+
end
|
247
|
+
def self.writable?(*args, **kwargs)
|
248
|
+
File.writable?(*args,**kwargs)
|
249
|
+
end
|
250
|
+
def self.writable_real?(*args, **kwargs)
|
251
|
+
File.writable_real?(*args,**kwargs)
|
252
|
+
end
|
253
|
+
def self.expand_path(*args, **kwargs)
|
254
|
+
File.expand_path(*args,**kwargs)
|
255
|
+
end
|
256
|
+
def self.mkfifo(*args, **kwargs)
|
257
|
+
File.mkfifo(*args,**kwargs)
|
258
|
+
end
|
259
|
+
def self.stat(*args, **kwargs)
|
260
|
+
File.stat(*args,**kwargs)
|
261
|
+
end
|
262
|
+
|
263
|
+
def download(input=nil, from:nil, url:nil, to:nil)
|
264
|
+
# if only one argument, either input or url
|
265
|
+
if ((input!=nil) != (url!=nil)) && (from==nil) && (to==nil)
|
266
|
+
# this covers:
|
267
|
+
# download 'site.com/file'
|
268
|
+
the_url = url || input
|
269
|
+
file_name = the_url.match /(?<=\/)[^\/]+\z/
|
270
|
+
file_name = file_name[0]
|
271
|
+
elsif (to != nil) && ((input!=nil)!=(url!=nil))
|
272
|
+
# this covers:
|
273
|
+
# download 'site.com/file' to:'file'
|
274
|
+
# download url:'site.com/file' to:'file'
|
275
|
+
the_url = url || input
|
276
|
+
file_name = to
|
277
|
+
elsif ((from!=nil) != (url!=nil)) && input!=nil
|
278
|
+
# this covers:
|
279
|
+
# download 'file' from:'site.com/file'
|
280
|
+
# download 'file' url:'site.com/file'
|
281
|
+
the_url = from || url
|
282
|
+
file_name = input
|
283
|
+
else
|
284
|
+
raise <<-HEREDOC.remove_indent
|
285
|
+
I'm not sure how you're using the download function.
|
286
|
+
Please use one of the following methods:
|
287
|
+
download 'site.com/file'
|
288
|
+
download 'site.com/file', to:'file'
|
289
|
+
download url:'site.com/file', to:'file'
|
290
|
+
download 'file', from:'site.com/file'
|
291
|
+
download 'file', url:'site.com/file'
|
292
|
+
HEREDOC
|
293
|
+
end
|
294
|
+
FileSys.write(open(URI.encode(the_url)).read, to: file_name)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
# create an FS alias
|
298
|
+
FS = FileSys
|
data/lib/atk/set_command.rb
CHANGED
@@ -6,12 +6,10 @@ def set_command(name, code)
|
|
6
6
|
if OS.is?("unix")
|
7
7
|
exec_path = "/usr/local/bin/#{name}"
|
8
8
|
local_place = ATK.temp_path(name)
|
9
|
-
# create temp if it doesn't exist
|
10
|
-
FileUtils.makedirs(File.dirname(local_place))
|
11
9
|
# add the hash bang
|
12
10
|
hash_bang = "#!#{ATK.paths[:ruby]}\n"
|
13
11
|
# create the file
|
14
|
-
|
12
|
+
FS.write(hash_bang+code, to: local_place)
|
15
13
|
# copy to command folder
|
16
14
|
system("sudo", "cp", local_place, exec_path)
|
17
15
|
system("sudo", "chmod", "ugo+x", exec_path)
|
@@ -25,8 +23,8 @@ def set_command(name, code)
|
|
25
23
|
exec_path = "C:\\Users\\#{username}\\AppData\\local\\Microsoft\\WindowsApps\\#{name}"
|
26
24
|
|
27
25
|
# create the code
|
28
|
-
|
26
|
+
FS.write(code, to: exec_path+".rb")
|
29
27
|
# create an executable to call the code
|
30
|
-
|
28
|
+
FS.write("@echo off\nruby \"#{exec_path}.rb\" %*", to: exec_path+".bat")
|
31
29
|
end
|
32
30
|
end
|
data/lib/atk_toolbox/version.rb
CHANGED
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.46
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- lib/atk/atk_info.rb
|
60
60
|
- lib/atk/cmd.rb
|
61
61
|
- lib/atk/default_info.yaml
|
62
|
-
- lib/atk/download.rb
|
63
62
|
- lib/atk/extra_file_utils.rb
|
64
63
|
- lib/atk/extra_yaml.rb
|
65
64
|
- lib/atk/git.rb
|
data/lib/atk/download.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'fileutils'
|
3
|
-
require_relative './extra_file_utils'
|
4
|
-
|
5
|
-
def download(input_1=nil, from:nil, url:nil, as:nil)
|
6
|
-
# argument checking
|
7
|
-
# if only one argument, either input_1 or url
|
8
|
-
if ((input_1!=nil) != (url!=nil)) && (from==nil) && (as==nil)
|
9
|
-
# this covers:
|
10
|
-
# download 'site.com/file'
|
11
|
-
the_url = url || input_1
|
12
|
-
file_name = the_url.match /(?<=\/)[^\/]+\z/
|
13
|
-
file_name = file_name[0]
|
14
|
-
elsif (as != nil) && ((input_1!=nil)!=(url!=nil))
|
15
|
-
# this covers:
|
16
|
-
# download 'site.com/file' as:'file'
|
17
|
-
# download url:'site.com/file' as:'file'
|
18
|
-
the_url = url || input_1
|
19
|
-
file_name = as
|
20
|
-
elsif ((from!=nil) != (url!=nil)) && input_1!=nil
|
21
|
-
# this covers:
|
22
|
-
# download 'file' from:'site.com/file'
|
23
|
-
# download 'file' url:'site.com/file'
|
24
|
-
the_url = from || url
|
25
|
-
file_name = input_1
|
26
|
-
else
|
27
|
-
message_ = "I'm not sure how you're using the download function.\n"
|
28
|
-
message_ << "Please use one of the following methods:\n"
|
29
|
-
message_ << " download 'site.com/file'\n"
|
30
|
-
message_ << " download 'site.com/file', as:'file'\n"
|
31
|
-
message_ << " download url:'site.com/file', as:'file'\n"
|
32
|
-
message_ << " download 'file', from:'site.com/file'\n"
|
33
|
-
message_ << " download 'file', url:'site.com/file'\n"
|
34
|
-
raise message_
|
35
|
-
end#if
|
36
|
-
#end argument checking
|
37
|
-
FileSys.write(open(URI.encode(the_url)).read, to: file_name)
|
38
|
-
end
|