scout-essentials 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.vimproject +78 -0
  4. data/Gemfile +14 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +18 -0
  7. data/Rakefile +47 -0
  8. data/VERSION +1 -0
  9. data/lib/scout/cmd.rb +348 -0
  10. data/lib/scout/concurrent_stream.rb +284 -0
  11. data/lib/scout/config.rb +168 -0
  12. data/lib/scout/exceptions.rb +77 -0
  13. data/lib/scout/indiferent_hash/case_insensitive.rb +30 -0
  14. data/lib/scout/indiferent_hash/options.rb +115 -0
  15. data/lib/scout/indiferent_hash.rb +96 -0
  16. data/lib/scout/log/color.rb +224 -0
  17. data/lib/scout/log/color_class.rb +269 -0
  18. data/lib/scout/log/fingerprint.rb +69 -0
  19. data/lib/scout/log/progress/report.rb +244 -0
  20. data/lib/scout/log/progress/util.rb +173 -0
  21. data/lib/scout/log/progress.rb +106 -0
  22. data/lib/scout/log/trap.rb +107 -0
  23. data/lib/scout/log.rb +441 -0
  24. data/lib/scout/meta_extension.rb +100 -0
  25. data/lib/scout/misc/digest.rb +63 -0
  26. data/lib/scout/misc/filesystem.rb +25 -0
  27. data/lib/scout/misc/format.rb +255 -0
  28. data/lib/scout/misc/helper.rb +31 -0
  29. data/lib/scout/misc/insist.rb +56 -0
  30. data/lib/scout/misc/monitor.rb +66 -0
  31. data/lib/scout/misc/system.rb +73 -0
  32. data/lib/scout/misc.rb +10 -0
  33. data/lib/scout/named_array.rb +138 -0
  34. data/lib/scout/open/lock/lockfile.rb +587 -0
  35. data/lib/scout/open/lock.rb +68 -0
  36. data/lib/scout/open/remote.rb +135 -0
  37. data/lib/scout/open/stream.rb +491 -0
  38. data/lib/scout/open/util.rb +244 -0
  39. data/lib/scout/open.rb +170 -0
  40. data/lib/scout/path/find.rb +204 -0
  41. data/lib/scout/path/tmpfile.rb +8 -0
  42. data/lib/scout/path/util.rb +127 -0
  43. data/lib/scout/path.rb +51 -0
  44. data/lib/scout/persist/open.rb +17 -0
  45. data/lib/scout/persist/path.rb +15 -0
  46. data/lib/scout/persist/serialize.rb +157 -0
  47. data/lib/scout/persist.rb +104 -0
  48. data/lib/scout/resource/open.rb +8 -0
  49. data/lib/scout/resource/path.rb +80 -0
  50. data/lib/scout/resource/produce/rake.rb +69 -0
  51. data/lib/scout/resource/produce.rb +151 -0
  52. data/lib/scout/resource/scout.rb +3 -0
  53. data/lib/scout/resource/software.rb +178 -0
  54. data/lib/scout/resource/util.rb +59 -0
  55. data/lib/scout/resource.rb +40 -0
  56. data/lib/scout/simple_opt/accessor.rb +54 -0
  57. data/lib/scout/simple_opt/doc.rb +126 -0
  58. data/lib/scout/simple_opt/get.rb +57 -0
  59. data/lib/scout/simple_opt/parse.rb +67 -0
  60. data/lib/scout/simple_opt/setup.rb +26 -0
  61. data/lib/scout/simple_opt.rb +5 -0
  62. data/lib/scout/tmpfile.rb +129 -0
  63. data/lib/scout-essentials.rb +10 -0
  64. data/scout-essentials.gemspec +143 -0
  65. data/share/color/color_names +507 -0
  66. data/share/color/diverging_colors.hex +12 -0
  67. data/share/software/install_helpers +523 -0
  68. data/test/scout/indiferent_hash/test_case_insensitive.rb +16 -0
  69. data/test/scout/indiferent_hash/test_options.rb +46 -0
  70. data/test/scout/log/test_color.rb +0 -0
  71. data/test/scout/log/test_progress.rb +108 -0
  72. data/test/scout/misc/test_digest.rb +30 -0
  73. data/test/scout/misc/test_filesystem.rb +30 -0
  74. data/test/scout/misc/test_insist.rb +13 -0
  75. data/test/scout/misc/test_system.rb +21 -0
  76. data/test/scout/open/test_lock.rb +52 -0
  77. data/test/scout/open/test_remote.rb +25 -0
  78. data/test/scout/open/test_stream.rb +676 -0
  79. data/test/scout/open/test_util.rb +73 -0
  80. data/test/scout/path/test_find.rb +110 -0
  81. data/test/scout/path/test_util.rb +22 -0
  82. data/test/scout/persist/test_open.rb +37 -0
  83. data/test/scout/persist/test_path.rb +37 -0
  84. data/test/scout/persist/test_serialize.rb +114 -0
  85. data/test/scout/resource/test_path.rb +58 -0
  86. data/test/scout/resource/test_produce.rb +94 -0
  87. data/test/scout/resource/test_software.rb +24 -0
  88. data/test/scout/resource/test_util.rb +38 -0
  89. data/test/scout/simple_opt/test_doc.rb +16 -0
  90. data/test/scout/simple_opt/test_get.rb +11 -0
  91. data/test/scout/simple_opt/test_parse.rb +10 -0
  92. data/test/scout/simple_opt/test_setup.rb +77 -0
  93. data/test/scout/test_cmd.rb +85 -0
  94. data/test/scout/test_concurrent_stream.rb +29 -0
  95. data/test/scout/test_config.rb +66 -0
  96. data/test/scout/test_indiferent_hash.rb +26 -0
  97. data/test/scout/test_log.rb +32 -0
  98. data/test/scout/test_meta_extension.rb +80 -0
  99. data/test/scout/test_misc.rb +6 -0
  100. data/test/scout/test_named_array.rb +43 -0
  101. data/test/scout/test_open.rb +146 -0
  102. data/test/scout/test_path.rb +54 -0
  103. data/test/scout/test_persist.rb +186 -0
  104. data/test/scout/test_resource.rb +26 -0
  105. data/test/scout/test_tmpfile.rb +53 -0
  106. data/test/test_helper.rb +50 -0
  107. metadata +247 -0
@@ -0,0 +1,186 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestPersist < Test::Unit::TestCase
5
+ def test_string
6
+ TmpFile.with_file do |tmpfile|
7
+ Path.setup(tmpfile)
8
+ obj = "TEST"
9
+ type = :string
10
+ refute tmpdir.persist.glob("*").any?
11
+ assert_equal obj, Persist.persist(tmpfile, type, :dir => tmpdir.persist){ obj }
12
+ assert tmpdir.persist.glob("*").any?
13
+ assert_equal obj, Persist.persist(tmpfile, type, :dir => tmpdir.persist){ raise "Error" }
14
+ end
15
+ end
16
+
17
+ def test_float_array
18
+ TmpFile.with_file do |tmpfile|
19
+ Path.setup(tmpfile)
20
+ obj = [1.2,2.2]
21
+ type = :float_array
22
+ refute tmpdir.persist.glob("*").any?
23
+ assert_equal obj, Persist.persist(tmpfile, type, :dir => tmpdir.persist){ obj }
24
+ assert tmpdir.persist.glob("*").any?
25
+ assert_equal obj, Persist.persist(tmpfile, type, :dir => tmpdir.persist){ raise "Error" }
26
+ end
27
+ end
28
+
29
+ def test_string_update
30
+ TmpFile.with_file do |tmpfile|
31
+ Path.setup(tmpfile)
32
+ obj = "TEST"
33
+ type = :string
34
+ refute tmpdir.persist.glob("*").any?
35
+ assert_equal obj, Persist.persist(tmpfile, type, :dir => tmpdir.persist){ obj }
36
+ assert tmpdir.persist.glob("*").any?
37
+ assert_raises ScoutException do
38
+ Persist.persist(tmpfile, type, :dir => tmpdir.persist, :update => true){ raise ScoutException }
39
+ end
40
+ assert_raises ScoutException do
41
+ Persist.persist(tmpfile, type, :persist_dir => tmpdir.persist, :persist_update => true){ raise ScoutException }
42
+ end
43
+ end
44
+ end
45
+
46
+ def test_stream
47
+ TmpFile.with_file do |tmpfile|
48
+ Path.setup(tmpfile)
49
+ obj = "TEST\nTEST"
50
+ stream = StringIO.new obj
51
+ stream.rewind
52
+ res = Persist.persist(tmpfile, :string, :dir => tmpdir.persist){ stream }
53
+ assert IO === res
54
+ assert_equal obj, res.read
55
+ assert_equal obj, Persist.persist(tmpfile, :string, :dir => tmpdir.persist){ raise ScoutException }
56
+ end
57
+ end
58
+
59
+ def test_stream_multiple
60
+ TmpFile.with_file do |tmpfile|
61
+ Path.setup(tmpfile)
62
+ obj = "TEST\nTEST"
63
+ stream = StringIO.new obj
64
+ stream.rewind
65
+ res1 = Persist.persist(tmpfile, :string, :dir => tmpdir.persist, :tee_copies => 2){ stream }
66
+ res2 = res1.next
67
+ assert IO === res1
68
+ assert_equal obj, res1.read
69
+ assert_equal obj, res2.read
70
+ assert_equal obj, Persist.persist(tmpfile, :string, :dir => tmpdir.persist){ raise ScoutException }
71
+ end
72
+ end
73
+
74
+ def test_update_time
75
+ TmpFile.with_file do |dir|
76
+ Path.setup(dir)
77
+ obj = "TEST"
78
+ type = :string
79
+
80
+ Open.write(dir.file, "TEST")
81
+ assert_equal "TEST", Persist.persist(dir.cache, type, :dir => tmpdir.persist){ Open.read(dir.file) }
82
+ Open.rm(dir.file)
83
+ assert_equal "TEST", Persist.persist(dir.cache, type, :dir => tmpdir.persist){ Open.read(dir.file) }
84
+
85
+ sleep 1
86
+ Open.write(dir.file2, "TEST2")
87
+ assert_equal "TEST", Persist.persist(dir.cache, type, :dir => tmpdir.persist){ Open.read(dir.file2) }
88
+ assert_equal "TEST2", Persist.persist(dir.cache, type, :dir => tmpdir.persist, :update => dir.file2){ Open.read(dir.file2) }
89
+
90
+ sleep 1
91
+ Open.write(dir.file3, "TEST3")
92
+ sleep 1
93
+ Open.touch tmpdir.persist.glob("*").first
94
+ assert_equal "TEST2", Persist.persist(dir.cache, type, :dir => tmpdir.persist, :update => dir.file3){ Open.read(dir.file3) }
95
+ end
96
+ end
97
+
98
+ def test_concurrent
99
+ num = 10
100
+
101
+ s = 0.01
102
+ 10.times do
103
+ TmpFile.with_file do |file|
104
+ output1 = file + '.output1'
105
+ output2 = file + '.output2'
106
+ pid1 = Process.fork do
107
+ Open.purge_pipes
108
+ sleep rand/10.0
109
+ io = Persist.persist("test", :string, :path => file) do
110
+ Open.open_pipe do |sin|
111
+ num.times do |i|
112
+ sin.puts "line-#{i}-#{Process.pid}"
113
+ sleep s
114
+ end
115
+ end
116
+ end
117
+
118
+ if IO === io
119
+ Open.consume_stream(io, false)
120
+ else
121
+ Open.write(output1, io)
122
+ end
123
+ end
124
+ pid2 = Process.fork do
125
+ Open.purge_pipes
126
+ sleep rand/10.0
127
+ io = Persist.persist("test", :string, :path => file) do
128
+ Open.open_pipe do |sin|
129
+ num.times do |i|
130
+ sin.puts "line-#{i}-#{Process.pid}"
131
+ sleep s
132
+ end
133
+ end
134
+ end
135
+ if IO === io
136
+ Open.consume_stream(io, false)
137
+ else
138
+ Open.write(output2, io)
139
+ end
140
+ end
141
+ Process.waitpid pid1
142
+ Process.waitpid pid2
143
+
144
+ assert File.exist?(output1) || File.exist?(output2)
145
+ [pid1, pid2].zip([output2, output1]).each do |pid, found|
146
+ next unless File.exist?(found)
147
+ assert Open.read(found).include? "-#{pid}\n"
148
+ end
149
+ [pid1, pid2].zip([output1, output2]).each do |pid, found|
150
+ next unless File.exist?(found)
151
+ refute Open.read(found).include? "-#{pid}\n"
152
+ end
153
+ Open.rm file
154
+ Open.rm output1
155
+ Open.rm output2
156
+ end
157
+ end
158
+ end
159
+
160
+ def test_path_prefix
161
+ Persist.persist('foo', :tsv, :prefix => "TSV") do |filename|
162
+ assert File.basename(filename).start_with? "TSV"
163
+ end
164
+ end
165
+
166
+ def __test_speed
167
+ times = 100_000
168
+ TmpFile.with_file do |tmpfile|
169
+ sout = Persist.persist(tmpfile, :string, :path => tmpfile) do
170
+ Open.open_pipe do |sin|
171
+ times.times do |i|
172
+ sin.puts "line-#{i}"
173
+ end
174
+ end
175
+ end
176
+
177
+ Log::ProgressBar.with_bar do |bar|
178
+ while l = sout.gets
179
+ bar.tick
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ end
186
+
@@ -0,0 +1,26 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestResourceUnit < Test::Unit::TestCase
5
+ module TestResource
6
+ extend Resource
7
+
8
+ self.subdir = Path.setup('tmp/test-resource')
9
+ end
10
+
11
+
12
+ def test_root
13
+
14
+ p = TestResource.root.some_file
15
+ assert p.find(:user).include?(ENV["HOME"])
16
+ end
17
+
18
+ def __test_identify
19
+ assert_equal 'etc/', Rbbt.identify(File.join(ENV["HOME"], '.rbbt/etc/'))
20
+ assert_equal 'share/databases/', Rbbt.identify('/usr/local/share/rbbt/databases/')
21
+ assert_equal 'share/databases/DATABASE', Rbbt.identify('/usr/local/share/rbbt/databases/DATABASE')
22
+ assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify('/usr/local/share/rbbt/databases/DATABASE/FILE')
23
+ assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify(File.join(ENV["HOME"], '.rbbt/share/databases/DATABASE/FILE'))
24
+ assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify('/usr/local/share/rbbt/databases/DATABASE/FILE')
25
+ end
26
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestTmpFile < Test::Unit::TestCase
5
+
6
+ def test_tmp_file
7
+ assert(TmpFile.tmp_file("test") =~ /(tmpfiles|tmp)\/test\d+$/)
8
+ end
9
+
10
+ def test_do_tmp_file
11
+ content = "Hello World!"
12
+ TmpFile.with_file(content) do |file|
13
+ assert_equal content, File.open(file).read
14
+ end
15
+ end
16
+
17
+ def test_do_tmp_file_io
18
+ content = "Hello World!"
19
+ TmpFile.with_file(content) do |file1|
20
+ File.open(file1) do |io|
21
+ TmpFile.with_file(io) do |file|
22
+ assert_equal content, File.open(file).read
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def test_extension
29
+ TmpFile.with_file(nil, true, :extension => 'txt') do |file|
30
+ assert file =~ /\.txt$/
31
+ end
32
+ end
33
+
34
+ def test_tmpdir
35
+ TmpFile.with_file(nil, true, :tmpdir => TmpFile.user_tmp("TMPDIR")) do |file|
36
+ assert file =~ /TMPDIR/
37
+ end
38
+
39
+ TmpFile.tmpdir = TmpFile.user_tmp("TMPDIR")
40
+
41
+ TmpFile.with_file do |file|
42
+ assert file =~ /TMPDIR/
43
+ end
44
+ end
45
+
46
+ def test_in_dir
47
+ TmpFile.in_dir do |dir|
48
+ assert_equal_path dir, FileUtils.pwd
49
+ end
50
+ end
51
+
52
+ end
53
+
@@ -0,0 +1,50 @@
1
+
2
+ require 'simplecov'
3
+
4
+ module SimpleCov::Configuration
5
+ def clean_filters
6
+ @filters = []
7
+ end
8
+ end
9
+
10
+ SimpleCov.configure do
11
+ clean_filters
12
+ load_adapter 'test_frameworks'
13
+ end
14
+
15
+ ENV["COVERAGE"] && SimpleCov.start do
16
+ add_filter "/.rvm/"
17
+ end
18
+ require 'rubygems'
19
+ require 'test/unit'
20
+
21
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
22
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
23
+
24
+ require 'scout/tmpfile'
25
+ require 'scout/log'
26
+ require 'scout/open'
27
+ require 'scout/persist'
28
+
29
+ class Test::Unit::TestCase
30
+
31
+ def assert_equal_path(path1, path2)
32
+ assert_equal File.expand_path(path1), File.expand_path(path2)
33
+ end
34
+
35
+ def tmpdir
36
+ @tmpdir ||= Path.setup('tmp/test_tmpdir').find
37
+ end
38
+
39
+ setup do
40
+ TmpFile.tmpdir = tmpdir.tmpfiles
41
+ Log::ProgressBar.default_severity = 0
42
+ Persist.cache_dir = tmpdir.var.cache
43
+ Persist::MEMORY_CACHE.clear
44
+ Open.remote_cache_dir = tmpdir.var.cache
45
+ end
46
+
47
+ teardown do
48
+ Open.rm_rf tmpdir
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scout-essentials
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Miguel Vazquez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: shoulda
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: juwelier
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: term-ansicolor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yaml
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Things a scout can use anywhere
112
+ email: mikisvaz@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - LICENSE.txt
117
+ - README.rdoc
118
+ files:
119
+ - ".document"
120
+ - ".vimproject"
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.rdoc
124
+ - Rakefile
125
+ - VERSION
126
+ - lib/scout-essentials.rb
127
+ - lib/scout/cmd.rb
128
+ - lib/scout/concurrent_stream.rb
129
+ - lib/scout/config.rb
130
+ - lib/scout/exceptions.rb
131
+ - lib/scout/indiferent_hash.rb
132
+ - lib/scout/indiferent_hash/case_insensitive.rb
133
+ - lib/scout/indiferent_hash/options.rb
134
+ - lib/scout/log.rb
135
+ - lib/scout/log/color.rb
136
+ - lib/scout/log/color_class.rb
137
+ - lib/scout/log/fingerprint.rb
138
+ - lib/scout/log/progress.rb
139
+ - lib/scout/log/progress/report.rb
140
+ - lib/scout/log/progress/util.rb
141
+ - lib/scout/log/trap.rb
142
+ - lib/scout/meta_extension.rb
143
+ - lib/scout/misc.rb
144
+ - lib/scout/misc/digest.rb
145
+ - lib/scout/misc/filesystem.rb
146
+ - lib/scout/misc/format.rb
147
+ - lib/scout/misc/helper.rb
148
+ - lib/scout/misc/insist.rb
149
+ - lib/scout/misc/monitor.rb
150
+ - lib/scout/misc/system.rb
151
+ - lib/scout/named_array.rb
152
+ - lib/scout/open.rb
153
+ - lib/scout/open/lock.rb
154
+ - lib/scout/open/lock/lockfile.rb
155
+ - lib/scout/open/remote.rb
156
+ - lib/scout/open/stream.rb
157
+ - lib/scout/open/util.rb
158
+ - lib/scout/path.rb
159
+ - lib/scout/path/find.rb
160
+ - lib/scout/path/tmpfile.rb
161
+ - lib/scout/path/util.rb
162
+ - lib/scout/persist.rb
163
+ - lib/scout/persist/open.rb
164
+ - lib/scout/persist/path.rb
165
+ - lib/scout/persist/serialize.rb
166
+ - lib/scout/resource.rb
167
+ - lib/scout/resource/open.rb
168
+ - lib/scout/resource/path.rb
169
+ - lib/scout/resource/produce.rb
170
+ - lib/scout/resource/produce/rake.rb
171
+ - lib/scout/resource/scout.rb
172
+ - lib/scout/resource/software.rb
173
+ - lib/scout/resource/util.rb
174
+ - lib/scout/simple_opt.rb
175
+ - lib/scout/simple_opt/accessor.rb
176
+ - lib/scout/simple_opt/doc.rb
177
+ - lib/scout/simple_opt/get.rb
178
+ - lib/scout/simple_opt/parse.rb
179
+ - lib/scout/simple_opt/setup.rb
180
+ - lib/scout/tmpfile.rb
181
+ - scout-essentials.gemspec
182
+ - share/color/color_names
183
+ - share/color/diverging_colors.hex
184
+ - share/software/install_helpers
185
+ - test/scout/indiferent_hash/test_case_insensitive.rb
186
+ - test/scout/indiferent_hash/test_options.rb
187
+ - test/scout/log/test_color.rb
188
+ - test/scout/log/test_progress.rb
189
+ - test/scout/misc/test_digest.rb
190
+ - test/scout/misc/test_filesystem.rb
191
+ - test/scout/misc/test_insist.rb
192
+ - test/scout/misc/test_system.rb
193
+ - test/scout/open/test_lock.rb
194
+ - test/scout/open/test_remote.rb
195
+ - test/scout/open/test_stream.rb
196
+ - test/scout/open/test_util.rb
197
+ - test/scout/path/test_find.rb
198
+ - test/scout/path/test_util.rb
199
+ - test/scout/persist/test_open.rb
200
+ - test/scout/persist/test_path.rb
201
+ - test/scout/persist/test_serialize.rb
202
+ - test/scout/resource/test_path.rb
203
+ - test/scout/resource/test_produce.rb
204
+ - test/scout/resource/test_software.rb
205
+ - test/scout/resource/test_util.rb
206
+ - test/scout/simple_opt/test_doc.rb
207
+ - test/scout/simple_opt/test_get.rb
208
+ - test/scout/simple_opt/test_parse.rb
209
+ - test/scout/simple_opt/test_setup.rb
210
+ - test/scout/test_cmd.rb
211
+ - test/scout/test_concurrent_stream.rb
212
+ - test/scout/test_config.rb
213
+ - test/scout/test_indiferent_hash.rb
214
+ - test/scout/test_log.rb
215
+ - test/scout/test_meta_extension.rb
216
+ - test/scout/test_misc.rb
217
+ - test/scout/test_named_array.rb
218
+ - test/scout/test_open.rb
219
+ - test/scout/test_path.rb
220
+ - test/scout/test_persist.rb
221
+ - test/scout/test_resource.rb
222
+ - test/scout/test_tmpfile.rb
223
+ - test/test_helper.rb
224
+ homepage: http://github.com/mikisvaz/scout-essentials
225
+ licenses:
226
+ - MIT
227
+ metadata: {}
228
+ post_install_message:
229
+ rdoc_options: []
230
+ require_paths:
231
+ - lib
232
+ required_ruby_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ required_rubygems_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ requirements: []
243
+ rubygems_version: 3.4.13
244
+ signing_key:
245
+ specification_version: 4
246
+ summary: Scout essential tools
247
+ test_files: []