atk_toolbox 0.0.126 → 0.0.127
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/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
data/lib/atk/os.rb
CHANGED
@@ -19,11 +19,11 @@ end
|
|
19
19
|
#
|
20
20
|
# Groups
|
21
21
|
#
|
22
|
-
# the groups are the pratical side of the OS, they describe the OS rather than fit it prefectly into a heirarchy
|
23
22
|
module OS
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
|
24
|
+
# create a singleton class
|
25
|
+
class << (OS::CACHE = Object.new)
|
26
|
+
attr_accessor :is_windows, :is_mac, :is_linux, :is_unix, :is_debian, :is_ubuntu
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.is?(adjective)
|
@@ -34,17 +34,35 @@ module OS
|
|
34
34
|
adjective = adjective.to_s.downcase
|
35
35
|
case adjective
|
36
36
|
when 'windows'
|
37
|
-
|
37
|
+
if OS::CACHE::is_windows == nil
|
38
|
+
OS::CACHE::is_windows = (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
39
|
+
end
|
40
|
+
return OS::CACHE::is_windows
|
38
41
|
when 'mac'
|
39
|
-
|
42
|
+
if OS::CACHE::is_mac == nil
|
43
|
+
OS::CACHE::is_mac = (/darwin/ =~ RUBY_PLATFORM) != nil
|
44
|
+
end
|
45
|
+
return OS::CACHE::is_mac
|
40
46
|
when 'linux'
|
41
|
-
|
47
|
+
if OS::CACHE::is_linux == nil
|
48
|
+
OS::CACHE::is_linux = (not OS.is?(:windows)) && (not OS.is?(:mac))
|
49
|
+
end
|
50
|
+
return OS::CACHE::is_linux
|
42
51
|
when 'unix'
|
43
|
-
|
52
|
+
if OS::CACHE::is_unix == nil
|
53
|
+
OS::CACHE::is_unix = not(OS.is?(:windows))
|
54
|
+
end
|
55
|
+
return OS::CACHE::is_unix
|
44
56
|
when 'debian'
|
45
|
-
|
57
|
+
if OS::CACHE::is_debian == nil
|
58
|
+
OS::CACHE::is_debian = File.file?('/etc/debian_version')
|
59
|
+
end
|
60
|
+
return OS::CACHE::is_debian
|
46
61
|
when 'ubuntu'
|
47
|
-
|
62
|
+
if OS::CACHE::is_ubuntu == nil
|
63
|
+
OS::CACHE::is_ubuntu = OS.has_command('lsb_release') && `lsb_release -a`.match(/Distributor ID:[\s\t]*Ubuntu/)
|
64
|
+
end
|
65
|
+
return OS::CACHE::is_ubuntu
|
48
66
|
end
|
49
67
|
end
|
50
68
|
|
@@ -59,7 +77,7 @@ module OS
|
|
59
77
|
end
|
60
78
|
return version
|
61
79
|
elsif OS.is?("debian")
|
62
|
-
#
|
80
|
+
# FUTURE: support debian version
|
63
81
|
return nil
|
64
82
|
elsif OS.is?('mac')
|
65
83
|
version = Version.extract_from(`system_profiler SPSoftwareDataType`)
|
data/lib/atk/set_command.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative './
|
1
|
+
require_relative './file_system'
|
2
2
|
require_relative './os'
|
3
3
|
require_relative './atk_info'
|
4
4
|
|
@@ -11,7 +11,7 @@ require_relative './atk_info'
|
|
11
11
|
class TTY::Prompt
|
12
12
|
def set_command(name, code)
|
13
13
|
if OS.is?("unix")
|
14
|
-
exec_path = "
|
14
|
+
exec_path = "#{Atk.paths[:commands]}/#{name}"
|
15
15
|
local_place = Atk.temp_path(name)
|
16
16
|
# add the hash bang
|
17
17
|
hash_bang = "#!#{Atk.paths[:ruby]}\n"
|
@@ -23,11 +23,16 @@ class TTY::Prompt
|
|
23
23
|
elsif OS.is?("windows")
|
24
24
|
# check for invalid file paths, see https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
25
25
|
if name =~ /[><:"\/\\|?*]/
|
26
|
-
|
27
|
-
|
26
|
+
raise <<-HEREDOC.remove_indent
|
27
|
+
|
28
|
+
|
29
|
+
When using the ATK Console.set_command(name)
|
30
|
+
The name: #{name}
|
31
|
+
is not a valid file path on windows
|
32
|
+
which means it cannot be a command
|
33
|
+
HEREDOC
|
28
34
|
end
|
29
|
-
|
30
|
-
exec_path = "C:\\Users\\#{username}\\AppData\\local\\Microsoft\\WindowsApps\\#{name}"
|
35
|
+
exec_path = "#{Atk.paths[:commands]}\\#{name}"
|
31
36
|
|
32
37
|
# create the code
|
33
38
|
IO.write(exec_path+".rb", code)
|
data/lib/atk_toolbox/version.rb
CHANGED
@@ -0,0 +1,104 @@
|
|
1
|
+
class String
|
2
|
+
style_wrap = ->(name, number) do
|
3
|
+
# reset: \\e\\[0m
|
4
|
+
# some number of resets: (?:\\e\\[0m)+
|
5
|
+
# any ansi style/color: \\e\\[([;0-9]+)m
|
6
|
+
# some number of ansi-style/colors: ((?:\\e\\[([;0-9]+)m)*)
|
7
|
+
eval(<<-HEREDOC)
|
8
|
+
def #{name}()
|
9
|
+
# fix nested
|
10
|
+
self.gsub!(/(\\e\\[0m)(?:\\e\\[0m)*((?:\\e\\[([;0-9]+)m)*)/, '\\1\\2\e[#{number}m')
|
11
|
+
# inject start
|
12
|
+
self.sub!(/^((?:\\e\\[([;0-9]+)m)*)/, '\\1'+"\\e[#{number}m")
|
13
|
+
# append reset
|
14
|
+
self.replace("\#{self}\\e[0m")
|
15
|
+
end
|
16
|
+
HEREDOC
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# generate foreground/background methods
|
21
|
+
#
|
22
|
+
@@colors = {
|
23
|
+
default: 39,
|
24
|
+
black: 30,
|
25
|
+
red: 31,
|
26
|
+
green: 32,
|
27
|
+
yellow: 33,
|
28
|
+
blue: 34,
|
29
|
+
magenta: 35,
|
30
|
+
cyan: 36,
|
31
|
+
white: 37,
|
32
|
+
light_black: 90,
|
33
|
+
light_red: 91,
|
34
|
+
light_green: 92,
|
35
|
+
light_yellow: 93,
|
36
|
+
light_blue: 94,
|
37
|
+
light_magenta: 95,
|
38
|
+
light_cyan: 96,
|
39
|
+
light_white: 97,
|
40
|
+
}
|
41
|
+
for each_key, each_value in @@colors
|
42
|
+
# foreground
|
43
|
+
style_wrap[each_key, each_value]
|
44
|
+
# background
|
45
|
+
style_wrap["on_#{each_key}", each_value+10]
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# generate style methods
|
50
|
+
#
|
51
|
+
styles = {
|
52
|
+
normal: "21;22;23;24;25;27;28;29", # reset all non-color changes
|
53
|
+
bold: 1,
|
54
|
+
dim: 2,
|
55
|
+
italic: 3,
|
56
|
+
underline: 4,
|
57
|
+
blink: 5,
|
58
|
+
flash: 6,
|
59
|
+
invert: 7,
|
60
|
+
hide: 8,
|
61
|
+
}
|
62
|
+
for each_key, each_value in styles
|
63
|
+
style_wrap[each_key, each_value]
|
64
|
+
end
|
65
|
+
|
66
|
+
def unstyle
|
67
|
+
self.gsub!(/\e\[([;0-9]+)m/,"")
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.color_samples
|
71
|
+
for background, foreground in @@colors.keys.permutation(2)
|
72
|
+
eval("puts ' #{foreground} on_#{background} '.rjust(32).#{foreground}.on_#{background}")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
#
|
79
|
+
# Theme
|
80
|
+
#
|
81
|
+
class String
|
82
|
+
def color_as(kind)
|
83
|
+
case kind
|
84
|
+
when :error
|
85
|
+
" #{self} ".white.on_red
|
86
|
+
when :code
|
87
|
+
" #{self} ".light_blue.on_black
|
88
|
+
when :key_term
|
89
|
+
" #{self} ".yellow.on_black
|
90
|
+
when :title
|
91
|
+
" #{self} ".green.on_black
|
92
|
+
when :argument, :message
|
93
|
+
" #{self} ".cyan.on_black
|
94
|
+
when :optional
|
95
|
+
" #{self} ".light_magenta.on_black
|
96
|
+
when :good
|
97
|
+
" #{self} ".green.on_black
|
98
|
+
when :bad
|
99
|
+
" #{self} ".red.on_black
|
100
|
+
else
|
101
|
+
" #{self} ".cyan.on_black
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# NOTES:
|
2
|
+
#
|
3
|
+
# this is the ideal replacement for the "after_gem_update.rb"
|
4
|
+
# however it (the ruby gem API) does not work as intended and has very *VERY* little documentation
|
5
|
+
# there may be a way to get it working, however the name of this file and the following code are required
|
6
|
+
# and finding their names in the ruby documentation is difficult (which is why dead code is living here)
|
7
|
+
# the issue is something along the lines of:
|
8
|
+
# - if gem 0.0.1 is already installed
|
9
|
+
# - then gem install atk_toolbox (upgrading to atk_toolbox 0.0.2)
|
10
|
+
# - will run the 0.0.1 version of this file instead of the 0.0.2 version
|
11
|
+
# (even durning post_install)
|
12
|
+
# I'm unsure of the initial behavior (aka assuming no atk_toolbox was installed)
|
13
|
+
# this needs to be further tested/explored before replacing "after_gem_update.rb"
|
14
|
+
|
15
|
+
|
1
16
|
# #
|
2
17
|
# # right before gem install
|
3
18
|
# #
|
metadata
CHANGED
@@ -1,55 +1,15 @@
|
|
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.127
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: zip
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.0'
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 2.0.2
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '2.0'
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 2.0.2
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: git
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 1.5.0
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.5.0
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 1.5.0
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 1.5.0
|
53
13
|
- !ruby/object:Gem::Dependency
|
54
14
|
name: tty-prompt
|
55
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,26 +30,6 @@ dependencies:
|
|
70
30
|
- - ">="
|
71
31
|
- !ruby/object:Gem::Version
|
72
32
|
version: 0.19.0
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: colorize
|
75
|
-
requirement: !ruby/object:Gem::Requirement
|
76
|
-
requirements:
|
77
|
-
- - "~>"
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 0.8.1
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.8.1
|
83
|
-
type: :runtime
|
84
|
-
prerelease: false
|
85
|
-
version_requirements: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.8.1
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 0.8.1
|
93
33
|
description: ''
|
94
34
|
email: jeff.hykin@gmail.com
|
95
35
|
executables: []
|
@@ -102,19 +42,16 @@ files:
|
|
102
42
|
- lib/atk/commands/project.rb
|
103
43
|
- lib/atk/console.rb
|
104
44
|
- lib/atk/default_info.yaml
|
105
|
-
- lib/atk/
|
106
|
-
- lib/atk/file_sys.rb
|
45
|
+
- lib/atk/file_system.rb
|
107
46
|
- lib/atk/git.rb
|
108
|
-
- lib/atk/
|
47
|
+
- lib/atk/info.rb
|
109
48
|
- lib/atk/os.rb
|
110
|
-
- lib/atk/package_managers.rb
|
111
49
|
- lib/atk/remove_indent.rb
|
112
50
|
- lib/atk/set_command.rb
|
113
51
|
- lib/atk/version.rb
|
114
|
-
- lib/atk/yaml_info_parser.rb
|
115
|
-
- lib/atk/zip.rb
|
116
52
|
- lib/atk_toolbox.rb
|
117
53
|
- lib/atk_toolbox/version.rb
|
54
|
+
- lib/console_colors.rb
|
118
55
|
- lib/rubygems_plugin.rb
|
119
56
|
- test/info.yaml
|
120
57
|
- test/main.rb
|
data/lib/atk/extra_yaml.rb
DELETED
@@ -1,147 +0,0 @@
|
|
1
|
-
require_relative './remove_indent'
|
2
|
-
require_relative './version'
|
3
|
-
require 'json'
|
4
|
-
require 'yaml'
|
5
|
-
|
6
|
-
# how the new parser should work
|
7
|
-
# turn every meaninful peice of the yaml file into data that is represented in ruby
|
8
|
-
# reference objects instead of actually replacing the reference with the value
|
9
|
-
# reference insertion keys instead of actually performing the <<:
|
10
|
-
# save the style data (like 0x00 vs 0) to every peice of data
|
11
|
-
# save whether or not the data must be single-line
|
12
|
-
# tokenize the yaml recursively with the base case of scalar values
|
13
|
-
# HARD: detect when values must be single-line or multiline
|
14
|
-
# non-complex keys are single-line
|
15
|
-
# anything inside of a JSON-like list or array must be single line
|
16
|
-
# everything else I know of can be multiline
|
17
|
-
# have both an inline and multiline conversion function for every data type
|
18
|
-
# when changing data, convert the new data into a single-line or multiline form based on the parent token
|
19
|
-
# if multiline, add the correct amount of indentation
|
20
|
-
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# JSON method
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# example:
|
27
|
-
# doc = <<-HEREDOC
|
28
|
-
# (dependencies):
|
29
|
-
# python: 3.6.7
|
30
|
-
# gcc: 8.0.0
|
31
|
-
# HEREDOC
|
32
|
-
# document = YamlEdit.new(string:doc)
|
33
|
-
# document["(dependencies)"]["python"].replace_value_with(value: "200")
|
34
|
-
# puts document.string
|
35
|
-
# # creates:
|
36
|
-
# doc = <<-HEREDOC
|
37
|
-
# (dependencies):
|
38
|
-
# python: "200"
|
39
|
-
# gcc: 8.0.0
|
40
|
-
# HEREDOC
|
41
|
-
|
42
|
-
def inject_string(string, middle_part, start_line, start_column, end_line, end_column)
|
43
|
-
lines = string.split("\n")
|
44
|
-
untouched_begining_lines = lines[0...start_line]
|
45
|
-
untouched_ending_lines = lines[end_line+1..-1]
|
46
|
-
middle_lines = []
|
47
|
-
|
48
|
-
before_part = lines[start_line][0...start_column]
|
49
|
-
after_part = lines[end_line][end_column..-1]
|
50
|
-
|
51
|
-
return (untouched_begining_lines + [ before_part + middle_part + after_part ] + untouched_ending_lines).join("\n")
|
52
|
-
end
|
53
|
-
|
54
|
-
class YamlEdit
|
55
|
-
attr_accessor :string
|
56
|
-
|
57
|
-
def initialize(string:nil, file:nil)
|
58
|
-
self.init(string:string, file: file)
|
59
|
-
end
|
60
|
-
|
61
|
-
def init(string:nil, file:nil)
|
62
|
-
if string == nil
|
63
|
-
string = IO.read(file)
|
64
|
-
end
|
65
|
-
@root_node = YAML.parse(string).children[0]
|
66
|
-
@string = string
|
67
|
-
self.attach_to_all_children(@root_node, self)
|
68
|
-
end
|
69
|
-
|
70
|
-
def attach_to_all_children(node, original_document)
|
71
|
-
if node.respond_to?(:children)
|
72
|
-
if node.children.is_a?(Array)
|
73
|
-
for each in node.children
|
74
|
-
self.attach_to_all_children(each, original_document)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
node.document = original_document
|
79
|
-
end
|
80
|
-
|
81
|
-
def [](key)
|
82
|
-
return @root_node[key]
|
83
|
-
end
|
84
|
-
|
85
|
-
def save_to(file)
|
86
|
-
IO.write(file, @string)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
class Psych::Nodes::Node
|
91
|
-
attr_accessor :document
|
92
|
-
def anchor_and_tag(anchor:nil, tag:nil)
|
93
|
-
anchor = @anchor if anchor == nil
|
94
|
-
tag = @tag if tag == nil
|
95
|
-
|
96
|
-
string = ""
|
97
|
-
if anchor
|
98
|
-
string += "&#{anchor} "
|
99
|
-
end
|
100
|
-
|
101
|
-
if tag
|
102
|
-
string += "!#{tag} "
|
103
|
-
end
|
104
|
-
return string
|
105
|
-
end
|
106
|
-
|
107
|
-
# saving this for later once the JSON method can be replaced
|
108
|
-
def indent_level
|
109
|
-
if self.respond_to?(:children)
|
110
|
-
if self.children.size > 0
|
111
|
-
return self.children[0].start_column
|
112
|
-
end
|
113
|
-
end
|
114
|
-
return 4 + self.start_column
|
115
|
-
end
|
116
|
-
|
117
|
-
def [](key)
|
118
|
-
previous = nil
|
119
|
-
# for seq
|
120
|
-
if key.is_a?(Integer)
|
121
|
-
return self.children[key]
|
122
|
-
end
|
123
|
-
# for maps
|
124
|
-
for each in self.children.reverse
|
125
|
-
if each.respond_to?(:value) && each.value == key
|
126
|
-
return previous
|
127
|
-
end
|
128
|
-
previous = each
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def replace_value_with(value:nil, literal:nil, anchor: nil, tag:nil)
|
133
|
-
# check version
|
134
|
-
if VERSION_OF_RUBY < "2.5.0"
|
135
|
-
raise "\n\nSomewhere, replace_value_with() is being called, which is related to editing yaml\nthe problem is this function needs ruby >= 2.5.0\nbut the code is being run with ruby #{RUBY_VERSION}"
|
136
|
-
end
|
137
|
-
|
138
|
-
if literal == nil
|
139
|
-
new_value = value.to_json
|
140
|
-
else
|
141
|
-
new_value = literal
|
142
|
-
end
|
143
|
-
middle_part = self.anchor_and_tag(anchor:anchor, tag:tag) + new_value
|
144
|
-
new_string = inject_string(@document.string, middle_part, @start_line, @start_column, @end_line, @end_column)
|
145
|
-
@document.init( string: new_string )
|
146
|
-
end
|
147
|
-
end
|