tools 0.4.4 → 0.4.5
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/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/aux2 +1 -6
- data/bin/tools +5 -0
- data/lib/lib/.workin-history +1 -0
- data/lib/lib/array.rb +131 -0
- data/lib/lib/cache.rb +22 -23
- data/lib/lib/config.rb +6 -5
- data/lib/lib/console.rb +18 -25
- data/lib/lib/display.rb +19 -8
- data/lib/lib/files.rb +37 -1
- data/lib/lib/hash.rb +91 -0
- data/lib/lib/log.rb +2 -6
- data/lib/lib/net.rb +20 -12
- data/lib/lib/object.rb +42 -0
- data/lib/lib/prompt.rb +1 -1
- data/lib/lib/string.rb +83 -0
- data/lib/lib/utils.rb +17 -410
- data/lib/tools.rb +8 -13
- data/lib/tools/version.rb +1 -1
- data/test/mini_array.rb +53 -0
- data/test/mini_cache.rb +28 -0
- data/test/mini_config.rb +28 -0
- data/test/mini_console.rb +20 -0
- data/test/mini_display.rb +53 -0
- data/test/mini_file.rb +64 -0
- data/test/mini_hash.rb +155 -0
- data/test/mini_log.rb +21 -0
- data/test/mini_net.rb +223 -0
- data/test/mini_object.rb +35 -0
- data/test/mini_prompt.rb +82 -0
- data/test/mini_string.rb +48 -0
- data/test/mini_utils.rb +96 -0
- data/test/run +43 -0
- data/tools.gemspec +2 -2
- metadata +56 -44
- data/test/minitest/minit-display.rb +0 -29
- data/test/minitest/minit-tools.rb +0 -67
- data/test/minitest/run +0 -9
data/lib/tools.rb
CHANGED
@@ -5,29 +5,22 @@ require 'lib/utils'
|
|
5
5
|
require 'lib/display'
|
6
6
|
require 'lib/net'
|
7
7
|
require 'lib/files'
|
8
|
+
require 'lib/string'
|
9
|
+
require 'lib/array'
|
10
|
+
require 'lib/hash'
|
11
|
+
require 'lib/object'
|
8
12
|
|
9
13
|
# Extented models
|
10
14
|
require 'lib/config'
|
11
15
|
require 'lib/log'
|
12
16
|
require 'lib/cache'
|
13
17
|
require 'lib/prompt'
|
14
|
-
|
15
|
-
# require 'lib/console'
|
18
|
+
require 'lib/console'
|
16
19
|
|
17
20
|
load __dir__ + '/files/requireds.rb'
|
18
21
|
|
19
22
|
module Tools
|
20
23
|
|
21
|
-
@@check_version = nil
|
22
|
-
|
23
|
-
def self.set_check_version param
|
24
|
-
@@check_version = param
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.get_check_version
|
28
|
-
return @@check_version
|
29
|
-
end
|
30
|
-
|
31
24
|
class Configuration
|
32
25
|
attr_accessor :console_prompt
|
33
26
|
end
|
@@ -83,7 +76,9 @@ end
|
|
83
76
|
|
84
77
|
Tools.configure do |config|
|
85
78
|
config.console_prompt = Tools::VERSION
|
86
|
-
|
79
|
+
I18n.load_path = Dir[Tools.files + '/pt-BR.yml']
|
80
|
+
I18n.locale = 'pt-BR'.to_sym
|
81
|
+
#ToolsUtil.instance
|
87
82
|
end
|
88
83
|
|
89
84
|
|
data/lib/tools/version.rb
CHANGED
data/test/mini_array.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_hash_A_extract_first
|
8
|
+
assert_equal ['a','b','c'].extract_first, 'a'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_hash_B_extract_first
|
12
|
+
assert_equal (['a',:color,'c'].extract_symbol :color), true
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_hash_C_extract_color
|
16
|
+
args = ['xxx', '-x', '-vvv', :yellow, '-c', '-vcv', '-v2', '-vvvvv', '-s', :json, :red, :json]
|
17
|
+
yellow = args.extract_color
|
18
|
+
color = args.extract_color
|
19
|
+
assert_equal yellow, :yellow
|
20
|
+
assert_equal color, :red
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_hash_D_extract_option
|
24
|
+
args = ['xxx', '-x', '-vvv', :yellow, ':red','-c', '-vcv', '-v2', '-vvvvv', '-s', :json, :red, :json]
|
25
|
+
yellow = args.extract_color
|
26
|
+
red1 = args.extract_color
|
27
|
+
red2 = args.extract_color
|
28
|
+
red3 = args.extract_color
|
29
|
+
x = args.extract_option '-x'
|
30
|
+
f = args.extract_option '-f'
|
31
|
+
v = args.extract_option '-v', false
|
32
|
+
assert_equal x, true
|
33
|
+
assert_equal f, false
|
34
|
+
assert_equal v, 8
|
35
|
+
assert_equal red1, :red
|
36
|
+
assert_equal red2, :red
|
37
|
+
assert_equal red3, :default
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_hash_D_extract_option_value
|
41
|
+
args = ['-o', 'um', '-o', 'dois', '--desc', 'description', '-v', '-v', '-o', 'tres', '-s', :json, :red, :json]
|
42
|
+
desc_status, desc = args.extract_option_value '--desc'
|
43
|
+
status, origin = args.extract_option_value '-o', {:multiple => true}
|
44
|
+
assert_equal desc_status, true
|
45
|
+
assert_equal desc, 'description'
|
46
|
+
assert_equal status, true
|
47
|
+
assert_equal origin, ['um','um','dois','dois','tres','tres']
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
|
data/test/mini_cache.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_cache_A_all_operators
|
8
|
+
ToolsFiles.remove_file '/home/francisco/2018/xykotools/tools/teste-persistent.cache'
|
9
|
+
ToolsCache.create_cache_file 'tools', (File.dirname __dir__) + '/teste-persistent.cache', 60
|
10
|
+
assert_equal ToolsCache.tools_list, {}
|
11
|
+
ToolsCache.tools_set :k1, 100
|
12
|
+
assert_equal ToolsCache.tools_list, {:k1 => 100}
|
13
|
+
ToolsCache.tools_unset :k1
|
14
|
+
assert_equal ToolsCache.tools_list, {}
|
15
|
+
ToolsCache.tools_set :k2, {:i => 100, :j => 200}
|
16
|
+
ToolsCache.tools_set :k2, {:l => 100, :m => 200}
|
17
|
+
ToolsCache.tools_set :k3, []
|
18
|
+
ToolsCache.tools_set :k3, [1,2,3]
|
19
|
+
ToolsCache.tools_set :k3, [4, ['a','b']]
|
20
|
+
assert_equal (ToolsCache.tools_get :k3), [1,2,3,4,['a','b']]
|
21
|
+
assert_equal (ToolsCache.tools_get :k2), {:i => 100, :j => 200,:l => 100, :m => 200}
|
22
|
+
ToolsCache.tools_clear
|
23
|
+
assert_equal ToolsCache.tools_list, {}
|
24
|
+
ToolsFiles.remove_file '/home/francisco/2018/xykotools/tools/teste-persistent.cache'
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
data/test/mini_config.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_log_A_all_operations
|
8
|
+
|
9
|
+
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_yaml.config'
|
10
|
+
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_json.config'
|
11
|
+
ToolsConfig.create_config_file 'tools_yaml', (File.dirname __dir__) +'/tools_yaml.config', :yaml, {:first_time => true}
|
12
|
+
ToolsConfig.create_config_file 'tools_json', (File.dirname __dir__) +'/tools_json.config', :json, {:first_time => true}
|
13
|
+
ToolsConfig.create_config_file 'tools_json', (File.dirname __dir__) +'/tools_json.config', :json, {:first_time => true}
|
14
|
+
ToolsConfig.load_config (File.dirname __dir__) + '/tools_yaml.config'
|
15
|
+
ToolsConfig.load_config (File.dirname __dir__) + '/tools_json.config'
|
16
|
+
|
17
|
+
ToolsConfig.insert_in_config (File.dirname __dir__) +'/tools_yaml.config', {:first_time => false,}
|
18
|
+
ToolsConfig.insert_in_config (File.dirname __dir__) +'/tools_json.config', {:first_time => false,}
|
19
|
+
|
20
|
+
ToolsConfig.change_value_in_config (File.dirname __dir__) +'/tools_yaml.config', true , :first_time
|
21
|
+
ToolsConfig.change_value_in_config (File.dirname __dir__) +'/tools_json.config', true , :first_time
|
22
|
+
|
23
|
+
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_yaml.config'
|
24
|
+
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_json.config'
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
class ToolsModuleTest < Minitest::Test
|
3
|
+
|
4
|
+
def self.test_order
|
5
|
+
:sorted
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
def test_console_A_run_console
|
10
|
+
mock = MiniTest::Mock.new
|
11
|
+
def mock.start *args; true; end
|
12
|
+
Prompt::Console.stub :start, mock do
|
13
|
+
assert_equal ToolsConsole.create_console.class, Array
|
14
|
+
assert_equal (ToolsConsole.exec_console ['test']), true
|
15
|
+
assert_equal (ToolsConsole.exec_console ['tes']), false
|
16
|
+
assert_equal ToolsConsole.run_console.class, Minitest::Mock
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_dislay_A
|
8
|
+
ToolsDisplay.instance
|
9
|
+
old_stdout = $stdout
|
10
|
+
captured_stdio = StringIO.new('', 'w')
|
11
|
+
$stdout = captured_stdio
|
12
|
+
ToolsDisplay.show "TEXTO VERDE", :green
|
13
|
+
$stdout = old_stdout
|
14
|
+
assert_equal "\e[0;32;49mTEXTO VERDE\n\e[0m", captured_stdio.string
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_dislay_B_sameline
|
18
|
+
ToolsDisplay.instance
|
19
|
+
old_stdout = $stdout
|
20
|
+
captured_stdio = StringIO.new('', 'w')
|
21
|
+
$stdout = captured_stdio
|
22
|
+
ToolsDisplay.show "TEXTO SAMELINE", :sameline
|
23
|
+
$stdout = old_stdout
|
24
|
+
assert_equal "\e[0;39;49mTEXTO SAMELINE\e[0m", captured_stdio.string
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_dislay_C_show_colorize
|
28
|
+
ToolsDisplay.instance
|
29
|
+
old_stdout = $stdout
|
30
|
+
captured_stdio = StringIO.new('', 'w')
|
31
|
+
$stdout = captured_stdio
|
32
|
+
ToolsDisplay.show_colorize "red".red+ " " + "white".white
|
33
|
+
$stdout = old_stdout
|
34
|
+
assert_equal "\e[0;31;49mred\e[0m \e[0;37;49mwhite\e[0m\n", captured_stdio.string
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_dislay_D_colorized
|
38
|
+
ToolsDisplay.instance
|
39
|
+
old_stdout = $stdout
|
40
|
+
captured_stdio = StringIO.new('', 'w')
|
41
|
+
$stdout = captured_stdio
|
42
|
+
ToolsDisplay.show "red".red+ " " + "white".white, :colorized
|
43
|
+
$stdout = old_stdout
|
44
|
+
assert_equal "\e[0;31;49mred\e[0m \e[0;37;49mwhite\e[0m\n", captured_stdio.string
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_dislay_E_error
|
48
|
+
result = ToolsDisplay.show []
|
49
|
+
assert_equal "Array", result
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
data/test/mini_file.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_file_A_purge
|
8
|
+
mock = MiniTest::Mock.new
|
9
|
+
def mock.delete *args; Array; end
|
10
|
+
File.stub :delete, mock do
|
11
|
+
assert_equal (ToolsFiles.purge_files (File.dirname __dir__)+'/pkg', '*.gem', 1).class, Array
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_file_B_create_dir
|
16
|
+
mock = MiniTest::Mock.new
|
17
|
+
def mock.mkdir *args; String; end
|
18
|
+
Dir.stub :mkdir, mock do
|
19
|
+
assert_equal (ToolsFiles.create_dir (File.dirname __dir__)+'/pkg', 'minitest').class, String
|
20
|
+
assert_equal (ToolsFiles.create_dir (File.dirname __dir__)+'/pkg2', 'minitest').class, String
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_file_C_create_file
|
25
|
+
mock = MiniTest::Mock.new
|
26
|
+
def mock.open *args; String; end
|
27
|
+
File.stub :open, mock do
|
28
|
+
assert_equal (ToolsFiles.create_file (File.dirname __dir__)+'/pkg', 'minitest', 'minitest').class, String
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_file_D_load_file
|
33
|
+
file = (File.dirname __dir__) + '/TODO.txt'
|
34
|
+
result = ToolsFiles.load_file file
|
35
|
+
assert_equal result.class, File
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_file_F_load_file
|
39
|
+
mock = MiniTest::Mock.new
|
40
|
+
mock.expect :exists?, true
|
41
|
+
mock.expect :open, true
|
42
|
+
file = (File.dirname __dir__) + '/TODO'
|
43
|
+
assert_nil (ToolsFiles.load_file file), nil
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_file_G_open_file
|
47
|
+
mock = MiniTest::Mock.new
|
48
|
+
def mock.open *args; true; end
|
49
|
+
TTY::Editor.stub :open, mock do
|
50
|
+
assert_equal (ToolsFiles.open_file '').class, Minitest::Mock
|
51
|
+
assert_equal (ToolsFiles.open_file '', :vi).class, Minitest::Mock
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def test_file_H_remove_file
|
57
|
+
mock = MiniTest::Mock.new
|
58
|
+
def mock.remove_file *args; String; end
|
59
|
+
FileUtils.stub :remove_file, mock do
|
60
|
+
assert_equal (ToolsFiles.remove_file (File.dirname __dir__)+'/pkg').class, Minitest::Mock
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
data/test/mini_hash.rb
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
class ToolsModuleTest < Minitest::Test
|
2
|
+
|
3
|
+
def self.test_order
|
4
|
+
:sorted
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_hash_A_tools
|
8
|
+
data = {
|
9
|
+
'k1' => 100,
|
10
|
+
'k2' => 'v2',
|
11
|
+
:k3 => {
|
12
|
+
:a => 100,
|
13
|
+
},
|
14
|
+
}
|
15
|
+
result = {
|
16
|
+
"k1" => 100,
|
17
|
+
"k2" => "v2",
|
18
|
+
:k3 => {
|
19
|
+
:a => 100,
|
20
|
+
:k2 => 200
|
21
|
+
},
|
22
|
+
:k1 => 100,
|
23
|
+
}
|
24
|
+
data.rmerge!( {:k1 => 100} )
|
25
|
+
data.rmerge!( {:k3 => {:k2 => 200}})
|
26
|
+
assert_equal data, result
|
27
|
+
|
28
|
+
result_merge = {
|
29
|
+
"k1" => 100,
|
30
|
+
"k2" => "v2",
|
31
|
+
:k3 => {
|
32
|
+
:a => 100,
|
33
|
+
:k2 => 200
|
34
|
+
},
|
35
|
+
:k1 => 100
|
36
|
+
}
|
37
|
+
|
38
|
+
hash = data.rmerge( {:k1 => 100} )
|
39
|
+
assert_equal hash, result_merge
|
40
|
+
|
41
|
+
x = {:k1 => 100 , :k2 => { :k3 => {:a => 100}}}
|
42
|
+
assert_equal x.rblank, {:k2 => {:k3 => {}}}
|
43
|
+
assert_equal x.rblank!, {:k2 => {:k3 => {}}}
|
44
|
+
|
45
|
+
x = {:k1 => 100 , :k2 => { :k3 => {:a => 100}}}
|
46
|
+
y = x.rblank
|
47
|
+
diff = x.diff y
|
48
|
+
assert_equal diff, {:k1=>[100, nil], :k2=>{:k3=>{:a=>[100, nil]}}}
|
49
|
+
|
50
|
+
|
51
|
+
x = {:k1 => 100 , :k2 => { :k3 => {:a => 100}}}
|
52
|
+
y = x.nested_set [:k2,:k3,:a], 200
|
53
|
+
assert_equal x, {:k1 => 100 , :k2 => { :k3 => {:a => 200}}}
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
# module HashRecursiveBlank
|
66
|
+
# def rblank
|
67
|
+
# r = {}
|
68
|
+
# each_pair do |key, val|
|
69
|
+
# r[key] = val.rblank if val.is_a?(Hash)
|
70
|
+
# end
|
71
|
+
# return r.keep_if { |key, val| val.is_a?(Hash) }
|
72
|
+
# end
|
73
|
+
|
74
|
+
# def rblank!
|
75
|
+
# each_pair do |key, val|
|
76
|
+
# self[key] = val.rblank! if val.is_a?(Hash)
|
77
|
+
# end
|
78
|
+
# return keep_if { |key, val| val.is_a?(Hash) }
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
|
82
|
+
# module HashRecursiveMerge
|
83
|
+
# def rmerge(other_hash, concat_if_array = false)
|
84
|
+
# r = {}
|
85
|
+
# return merge(other_hash) do |key, oldval, newval|
|
86
|
+
# if oldval.is_a?(Hash)
|
87
|
+
# r[key] = oldval.rmerge(newval, concat_if_array)
|
88
|
+
# elsif oldval.is_a?(Array) and newval.is_a?(Array)
|
89
|
+
# r[key] = concat_if_array ? oldval + newval : newval
|
90
|
+
# else
|
91
|
+
# newval
|
92
|
+
# end
|
93
|
+
# end
|
94
|
+
# end
|
95
|
+
|
96
|
+
# def rmerge!(other_hash, concat_if_array = false)
|
97
|
+
# return merge!(other_hash) do |key, oldval, newval|
|
98
|
+
# if oldval.is_a?(Hash)
|
99
|
+
# oldval.rmerge!(newval, concat_if_array)
|
100
|
+
# elsif oldval.is_a?(Array) and newval.is_a?(Array)
|
101
|
+
# concat_if_array ? oldval + newval : newval
|
102
|
+
# else
|
103
|
+
# newval
|
104
|
+
# end
|
105
|
+
# end
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
|
109
|
+
# class Hash
|
110
|
+
# include HashRecursiveMerge
|
111
|
+
# include HashRecursiveBlank
|
112
|
+
|
113
|
+
# def diff(other)
|
114
|
+
# (self.keys + other.keys).uniq.inject({}) do |memo, key|
|
115
|
+
# unless self[key] == other[key]
|
116
|
+
# if self[key].kind_of?(Hash) && other[key].kind_of?(Hash)
|
117
|
+
# memo[key] = self[key].diff(other[key])
|
118
|
+
# else
|
119
|
+
# memo[key] = [self[key], other[key]]
|
120
|
+
# end
|
121
|
+
# end
|
122
|
+
# memo
|
123
|
+
# end
|
124
|
+
# end
|
125
|
+
# end
|
126
|
+
|
127
|
+
|
128
|
+
# class Hash
|
129
|
+
|
130
|
+
# # ensures nested hash from keys, and sets final key to value
|
131
|
+
# # keys: Array of Symbol|String
|
132
|
+
# # value: any
|
133
|
+
# def nested_set(keys, value)
|
134
|
+
# raise "DEBUG: nested_set keys must be an Array" unless keys.is_a?(Array)
|
135
|
+
|
136
|
+
# final_key = keys.pop
|
137
|
+
# return unless valid_key?(final_key)
|
138
|
+
# position = self
|
139
|
+
# for key in keys
|
140
|
+
# return unless valid_key?(key)
|
141
|
+
# position[key] = {} unless position[key].is_a?(Hash)
|
142
|
+
# position = position[key]
|
143
|
+
# end
|
144
|
+
# position[final_key] = value
|
145
|
+
# end
|
146
|
+
|
147
|
+
# private
|
148
|
+
|
149
|
+
# # returns true if key is valid
|
150
|
+
# def valid_key?(key)
|
151
|
+
# return true if key.is_a?(Symbol) || key.is_a?(String)
|
152
|
+
# raise "DEBUG: nested_set invalid key: #{key} (#{key.class})"
|
153
|
+
# end
|
154
|
+
|
155
|
+
# end
|