scout-essentials 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.vimproject +78 -0
- data/Gemfile +14 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/lib/scout/cmd.rb +348 -0
- data/lib/scout/concurrent_stream.rb +284 -0
- data/lib/scout/config.rb +168 -0
- data/lib/scout/exceptions.rb +77 -0
- data/lib/scout/indiferent_hash/case_insensitive.rb +30 -0
- data/lib/scout/indiferent_hash/options.rb +115 -0
- data/lib/scout/indiferent_hash.rb +96 -0
- data/lib/scout/log/color.rb +224 -0
- data/lib/scout/log/color_class.rb +269 -0
- data/lib/scout/log/fingerprint.rb +69 -0
- data/lib/scout/log/progress/report.rb +244 -0
- data/lib/scout/log/progress/util.rb +173 -0
- data/lib/scout/log/progress.rb +106 -0
- data/lib/scout/log/trap.rb +107 -0
- data/lib/scout/log.rb +441 -0
- data/lib/scout/meta_extension.rb +100 -0
- data/lib/scout/misc/digest.rb +63 -0
- data/lib/scout/misc/filesystem.rb +25 -0
- data/lib/scout/misc/format.rb +255 -0
- data/lib/scout/misc/helper.rb +31 -0
- data/lib/scout/misc/insist.rb +56 -0
- data/lib/scout/misc/monitor.rb +66 -0
- data/lib/scout/misc/system.rb +73 -0
- data/lib/scout/misc.rb +10 -0
- data/lib/scout/named_array.rb +138 -0
- data/lib/scout/open/lock/lockfile.rb +587 -0
- data/lib/scout/open/lock.rb +68 -0
- data/lib/scout/open/remote.rb +135 -0
- data/lib/scout/open/stream.rb +491 -0
- data/lib/scout/open/util.rb +244 -0
- data/lib/scout/open.rb +170 -0
- data/lib/scout/path/find.rb +204 -0
- data/lib/scout/path/tmpfile.rb +8 -0
- data/lib/scout/path/util.rb +127 -0
- data/lib/scout/path.rb +51 -0
- data/lib/scout/persist/open.rb +17 -0
- data/lib/scout/persist/path.rb +15 -0
- data/lib/scout/persist/serialize.rb +157 -0
- data/lib/scout/persist.rb +104 -0
- data/lib/scout/resource/open.rb +8 -0
- data/lib/scout/resource/path.rb +80 -0
- data/lib/scout/resource/produce/rake.rb +69 -0
- data/lib/scout/resource/produce.rb +151 -0
- data/lib/scout/resource/scout.rb +3 -0
- data/lib/scout/resource/software.rb +178 -0
- data/lib/scout/resource/util.rb +59 -0
- data/lib/scout/resource.rb +40 -0
- data/lib/scout/simple_opt/accessor.rb +54 -0
- data/lib/scout/simple_opt/doc.rb +126 -0
- data/lib/scout/simple_opt/get.rb +57 -0
- data/lib/scout/simple_opt/parse.rb +67 -0
- data/lib/scout/simple_opt/setup.rb +26 -0
- data/lib/scout/simple_opt.rb +5 -0
- data/lib/scout/tmpfile.rb +129 -0
- data/lib/scout-essentials.rb +10 -0
- data/scout-essentials.gemspec +143 -0
- data/share/color/color_names +507 -0
- data/share/color/diverging_colors.hex +12 -0
- data/share/software/install_helpers +523 -0
- data/test/scout/indiferent_hash/test_case_insensitive.rb +16 -0
- data/test/scout/indiferent_hash/test_options.rb +46 -0
- data/test/scout/log/test_color.rb +0 -0
- data/test/scout/log/test_progress.rb +108 -0
- data/test/scout/misc/test_digest.rb +30 -0
- data/test/scout/misc/test_filesystem.rb +30 -0
- data/test/scout/misc/test_insist.rb +13 -0
- data/test/scout/misc/test_system.rb +21 -0
- data/test/scout/open/test_lock.rb +52 -0
- data/test/scout/open/test_remote.rb +25 -0
- data/test/scout/open/test_stream.rb +676 -0
- data/test/scout/open/test_util.rb +73 -0
- data/test/scout/path/test_find.rb +110 -0
- data/test/scout/path/test_util.rb +22 -0
- data/test/scout/persist/test_open.rb +37 -0
- data/test/scout/persist/test_path.rb +37 -0
- data/test/scout/persist/test_serialize.rb +114 -0
- data/test/scout/resource/test_path.rb +58 -0
- data/test/scout/resource/test_produce.rb +94 -0
- data/test/scout/resource/test_software.rb +24 -0
- data/test/scout/resource/test_util.rb +38 -0
- data/test/scout/simple_opt/test_doc.rb +16 -0
- data/test/scout/simple_opt/test_get.rb +11 -0
- data/test/scout/simple_opt/test_parse.rb +10 -0
- data/test/scout/simple_opt/test_setup.rb +77 -0
- data/test/scout/test_cmd.rb +85 -0
- data/test/scout/test_concurrent_stream.rb +29 -0
- data/test/scout/test_config.rb +66 -0
- data/test/scout/test_indiferent_hash.rb +26 -0
- data/test/scout/test_log.rb +32 -0
- data/test/scout/test_meta_extension.rb +80 -0
- data/test/scout/test_misc.rb +6 -0
- data/test/scout/test_named_array.rb +43 -0
- data/test/scout/test_open.rb +146 -0
- data/test/scout/test_path.rb +54 -0
- data/test/scout/test_persist.rb +186 -0
- data/test/scout/test_resource.rb +26 -0
- data/test/scout/test_tmpfile.rb +53 -0
- data/test/test_helper.rb +50 -0
- metadata +247 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
module SOPT
|
2
|
+
def self.fix_shortcut(short, long)
|
3
|
+
return short unless short and shortcuts.include?(short)
|
4
|
+
|
5
|
+
current = shortcuts.select{|s,l| l == long}.collect{|s,l| s }.first
|
6
|
+
return current if current
|
7
|
+
|
8
|
+
chars = long.chars.to_a
|
9
|
+
current = [chars.shift]
|
10
|
+
short = current * ""
|
11
|
+
|
12
|
+
if (shortcuts.include?(short) and not shortcuts[short] == long)
|
13
|
+
if long.index "-" or long.index "_"
|
14
|
+
parts = long.split(/[_-]/)
|
15
|
+
acc = parts.collect{|s| s[0] } * ""
|
16
|
+
return acc unless shortcuts.include? acc
|
17
|
+
elsif m = long.match(/(\d+)/)
|
18
|
+
n = m[0]
|
19
|
+
acc = long[0] + n
|
20
|
+
return acc unless shortcuts.include? acc
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
while shortcuts.include?(short) && shortcuts[short] != long
|
25
|
+
next_letter = chars.shift
|
26
|
+
next_letter = chars.shift while %w(. - _).include?(next_letter)
|
27
|
+
return nil if next_letter.nil?
|
28
|
+
current << next_letter
|
29
|
+
short = current * ""
|
30
|
+
end
|
31
|
+
|
32
|
+
return nil if shortcuts.include? short
|
33
|
+
|
34
|
+
short
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.register(short, long, asterisk, description)
|
38
|
+
short = fix_shortcut(short, long)
|
39
|
+
shortcuts[short] = long if short
|
40
|
+
inputs << long
|
41
|
+
input_shortcuts[long] = short
|
42
|
+
input_descriptions[long] = description
|
43
|
+
input_types[long] = asterisk ? :string : :boolean
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.parse(opt_str)
|
47
|
+
inputs = []
|
48
|
+
|
49
|
+
if opt_str.include? "\n"
|
50
|
+
re = /\n+/
|
51
|
+
else
|
52
|
+
re = /:/
|
53
|
+
end
|
54
|
+
|
55
|
+
opt_str.split(re).each do |entry|
|
56
|
+
entry.strip!
|
57
|
+
next if entry.empty?
|
58
|
+
names, _sep, description = entry.partition(/\s+/)
|
59
|
+
short, long, asterisk = names.match(/\s*(?:-(.+))?(?:--(.+?))([*])?$/).values_at 1,2,3
|
60
|
+
|
61
|
+
inputs << long
|
62
|
+
register short, long, asterisk, description
|
63
|
+
end
|
64
|
+
|
65
|
+
inputs
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SOPT
|
2
|
+
|
3
|
+
def self.setup(str)
|
4
|
+
parts = str.split(/\n\n+/)
|
5
|
+
|
6
|
+
summary = parts.shift unless parts.first =~ /^\s*\$-/
|
7
|
+
synopsys = parts.shift if parts.first =~ /^\s*\$/
|
8
|
+
|
9
|
+
description = []
|
10
|
+
while parts.first and parts.first !~ /^\s*-/
|
11
|
+
description << parts.shift
|
12
|
+
end
|
13
|
+
description = description * "\n\n"
|
14
|
+
|
15
|
+
options = parts.collect{|part| part.split("\n").select{|l| l=~ /^\s*-/ } }.flatten.compact * "\n"
|
16
|
+
|
17
|
+
synopsys.sub!(/^\$\s+/,'') if synopsys
|
18
|
+
|
19
|
+
SOPT.summary = summary.strip if summary
|
20
|
+
SOPT.synopsys = synopsys.strip if synopsys
|
21
|
+
SOPT.description = description.strip if description
|
22
|
+
SOPT.parse options if options
|
23
|
+
|
24
|
+
SOPT.consume
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require_relative 'misc'
|
2
|
+
require_relative 'log'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module TmpFile
|
6
|
+
MAX_FILE_LENGTH = 150
|
7
|
+
|
8
|
+
def self.user_tmp(subdir = nil)
|
9
|
+
if subdir
|
10
|
+
File.join(ENV["HOME"],"/tmp/scout", subdir)
|
11
|
+
else
|
12
|
+
File.join(ENV["HOME"],"/tmp/scout")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.tmpdir=(tmpdir)
|
17
|
+
@tmpdir = tmpdir
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.tmpdir
|
21
|
+
@tmpdir ||= self.user_tmp('tmpfiles')
|
22
|
+
end
|
23
|
+
|
24
|
+
# Creates a random file name, with the given suffix and a random number
|
25
|
+
# up to +max+
|
26
|
+
def self.random_name(prefix = 'tmp-', max = 1_000_000_000)
|
27
|
+
n = rand(max)
|
28
|
+
prefix + n.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
# Creates a random filename in the temporary directory
|
32
|
+
def self.tmp_file(prefix = 'tmp-', max = 1_000_000_000, dir = nil)
|
33
|
+
dir ||= TmpFile.tmpdir
|
34
|
+
File.expand_path(File.join(dir, random_name(prefix, max)))
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.with_file(content = nil, erase = true, options = {})
|
38
|
+
if content.is_a?(Hash)
|
39
|
+
options = content
|
40
|
+
content = nil
|
41
|
+
erase = true
|
42
|
+
end
|
43
|
+
if erase.is_a?(Hash)
|
44
|
+
options = erase
|
45
|
+
erase = true
|
46
|
+
end
|
47
|
+
|
48
|
+
prefix = options[:prefix] || 'tmp-'
|
49
|
+
tmpdir = options[:tmpdir] || TmpFile.tmpdir
|
50
|
+
max = options[:max] || 1_000_000_000
|
51
|
+
tmpfile = tmp_file prefix, max, tmpdir
|
52
|
+
tmpfile += ".#{options[:extension]}" if options[:extension]
|
53
|
+
|
54
|
+
FileUtils.mkdir_p tmpdir
|
55
|
+
if IO === content
|
56
|
+
File.open(tmpfile, 'wb') do |f|
|
57
|
+
begin
|
58
|
+
while c = content.readpartial(1024)
|
59
|
+
f << c
|
60
|
+
end
|
61
|
+
rescue EOFError
|
62
|
+
end
|
63
|
+
end
|
64
|
+
elsif !content.nil?
|
65
|
+
File.open(tmpfile, 'w') { |f| f.write content }
|
66
|
+
end
|
67
|
+
|
68
|
+
result = yield(tmpfile)
|
69
|
+
|
70
|
+
FileUtils.rm_rf tmpfile if File.exist?(tmpfile) && erase
|
71
|
+
|
72
|
+
result
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.with_dir(erase = true, options = {})
|
76
|
+
prefix = options[:prefix] || 'tmpdir-'
|
77
|
+
tmpdir = tmp_file prefix
|
78
|
+
|
79
|
+
FileUtils.mkdir_p tmpdir
|
80
|
+
|
81
|
+
result = yield(tmpdir)
|
82
|
+
|
83
|
+
FileUtils.rm_rf tmpdir if File.exist?(tmpdir) && erase
|
84
|
+
|
85
|
+
result
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.in_dir(*args)
|
89
|
+
with_dir(*args) do |dir|
|
90
|
+
Misc.in_dir dir do
|
91
|
+
yield dir
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
SLASH_REPLACE = '·'
|
97
|
+
def self.tmp_for_file(file, tmp_options = {}, other_options = {})
|
98
|
+
tmp_for_file, prefix, key, persistence_dir = IndiferentHash.process_options tmp_options, :file, :prefix, :key, :dir
|
99
|
+
return tmp_for_file unless tmp_for_file.nil?
|
100
|
+
|
101
|
+
if prefix.nil?
|
102
|
+
perfile = file.to_s.sub(/\.b?gz$/,'')
|
103
|
+
else
|
104
|
+
perfile = prefix.to_s + ":" + file.to_s.sub(/\.b?gz$/,'')
|
105
|
+
end
|
106
|
+
|
107
|
+
perfile += "[#{ key }]" if key
|
108
|
+
|
109
|
+
if other_options.include? :filters
|
110
|
+
other_options[:filters].each do |match,value|
|
111
|
+
perfile = perfile + "&F[#{match}=#{Misc.digest(value)}]"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
persistence_dir = TmpFile.tmpdir if persistence_dir.nil?
|
116
|
+
Path.setup(persistence_dir) unless Path === persistence_dir
|
117
|
+
|
118
|
+
filename = perfile.gsub(/\s/,'_').gsub('/', SLASH_REPLACE)
|
119
|
+
clean_options = other_options.dup
|
120
|
+
clean_options.delete :unnamed
|
121
|
+
clean_options.delete "unnamed"
|
122
|
+
|
123
|
+
filename = filename[0..MAX_FILE_LENGTH] << Misc.digest(filename[MAX_FILE_LENGTH+1..-1]) if filename.length > MAX_FILE_LENGTH + 10
|
124
|
+
|
125
|
+
filename += ":" << Misc.digest(clean_options) unless clean_options.empty?
|
126
|
+
|
127
|
+
persistence_dir[filename]
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative 'scout/exceptions'
|
2
|
+
require_relative 'scout/indiferent_hash'
|
3
|
+
require_relative 'scout/tmpfile'
|
4
|
+
require_relative 'scout/log'
|
5
|
+
require_relative 'scout/path'
|
6
|
+
require_relative 'scout/simple_opt'
|
7
|
+
require_relative 'scout/resource'
|
8
|
+
require_relative 'scout/resource/scout'
|
9
|
+
require_relative 'scout/persist'
|
10
|
+
require_relative 'scout/config'
|
@@ -0,0 +1,143 @@
|
|
1
|
+
# Generated by juwelier
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: scout-essentials 1.0.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "scout-essentials".freeze
|
9
|
+
s.version = "1.0.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Miguel Vazquez".freeze]
|
14
|
+
s.date = "2023-07-04"
|
15
|
+
s.description = "Things a scout can use anywhere".freeze
|
16
|
+
s.email = "mikisvaz@gmail.com".freeze
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE.txt",
|
19
|
+
"README.rdoc"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".vimproject",
|
24
|
+
"Gemfile",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.rdoc",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"lib/scout-essentials.rb",
|
30
|
+
"lib/scout/cmd.rb",
|
31
|
+
"lib/scout/concurrent_stream.rb",
|
32
|
+
"lib/scout/config.rb",
|
33
|
+
"lib/scout/exceptions.rb",
|
34
|
+
"lib/scout/indiferent_hash.rb",
|
35
|
+
"lib/scout/indiferent_hash/case_insensitive.rb",
|
36
|
+
"lib/scout/indiferent_hash/options.rb",
|
37
|
+
"lib/scout/log.rb",
|
38
|
+
"lib/scout/log/color.rb",
|
39
|
+
"lib/scout/log/color_class.rb",
|
40
|
+
"lib/scout/log/fingerprint.rb",
|
41
|
+
"lib/scout/log/progress.rb",
|
42
|
+
"lib/scout/log/progress/report.rb",
|
43
|
+
"lib/scout/log/progress/util.rb",
|
44
|
+
"lib/scout/log/trap.rb",
|
45
|
+
"lib/scout/meta_extension.rb",
|
46
|
+
"lib/scout/misc.rb",
|
47
|
+
"lib/scout/misc/digest.rb",
|
48
|
+
"lib/scout/misc/filesystem.rb",
|
49
|
+
"lib/scout/misc/format.rb",
|
50
|
+
"lib/scout/misc/helper.rb",
|
51
|
+
"lib/scout/misc/insist.rb",
|
52
|
+
"lib/scout/misc/monitor.rb",
|
53
|
+
"lib/scout/misc/system.rb",
|
54
|
+
"lib/scout/named_array.rb",
|
55
|
+
"lib/scout/open.rb",
|
56
|
+
"lib/scout/open/lock.rb",
|
57
|
+
"lib/scout/open/lock/lockfile.rb",
|
58
|
+
"lib/scout/open/remote.rb",
|
59
|
+
"lib/scout/open/stream.rb",
|
60
|
+
"lib/scout/open/util.rb",
|
61
|
+
"lib/scout/path.rb",
|
62
|
+
"lib/scout/path/find.rb",
|
63
|
+
"lib/scout/path/tmpfile.rb",
|
64
|
+
"lib/scout/path/util.rb",
|
65
|
+
"lib/scout/persist.rb",
|
66
|
+
"lib/scout/persist/open.rb",
|
67
|
+
"lib/scout/persist/path.rb",
|
68
|
+
"lib/scout/persist/serialize.rb",
|
69
|
+
"lib/scout/resource.rb",
|
70
|
+
"lib/scout/resource/open.rb",
|
71
|
+
"lib/scout/resource/path.rb",
|
72
|
+
"lib/scout/resource/produce.rb",
|
73
|
+
"lib/scout/resource/produce/rake.rb",
|
74
|
+
"lib/scout/resource/scout.rb",
|
75
|
+
"lib/scout/resource/software.rb",
|
76
|
+
"lib/scout/resource/util.rb",
|
77
|
+
"lib/scout/simple_opt.rb",
|
78
|
+
"lib/scout/simple_opt/accessor.rb",
|
79
|
+
"lib/scout/simple_opt/doc.rb",
|
80
|
+
"lib/scout/simple_opt/get.rb",
|
81
|
+
"lib/scout/simple_opt/parse.rb",
|
82
|
+
"lib/scout/simple_opt/setup.rb",
|
83
|
+
"lib/scout/tmpfile.rb",
|
84
|
+
"scout-essentials.gemspec",
|
85
|
+
"share/color/color_names",
|
86
|
+
"share/color/diverging_colors.hex",
|
87
|
+
"share/software/install_helpers",
|
88
|
+
"test/scout/indiferent_hash/test_case_insensitive.rb",
|
89
|
+
"test/scout/indiferent_hash/test_options.rb",
|
90
|
+
"test/scout/log/test_color.rb",
|
91
|
+
"test/scout/log/test_progress.rb",
|
92
|
+
"test/scout/misc/test_digest.rb",
|
93
|
+
"test/scout/misc/test_filesystem.rb",
|
94
|
+
"test/scout/misc/test_insist.rb",
|
95
|
+
"test/scout/misc/test_system.rb",
|
96
|
+
"test/scout/open/test_lock.rb",
|
97
|
+
"test/scout/open/test_remote.rb",
|
98
|
+
"test/scout/open/test_stream.rb",
|
99
|
+
"test/scout/open/test_util.rb",
|
100
|
+
"test/scout/path/test_find.rb",
|
101
|
+
"test/scout/path/test_util.rb",
|
102
|
+
"test/scout/persist/test_open.rb",
|
103
|
+
"test/scout/persist/test_path.rb",
|
104
|
+
"test/scout/persist/test_serialize.rb",
|
105
|
+
"test/scout/resource/test_path.rb",
|
106
|
+
"test/scout/resource/test_produce.rb",
|
107
|
+
"test/scout/resource/test_software.rb",
|
108
|
+
"test/scout/resource/test_util.rb",
|
109
|
+
"test/scout/simple_opt/test_doc.rb",
|
110
|
+
"test/scout/simple_opt/test_get.rb",
|
111
|
+
"test/scout/simple_opt/test_parse.rb",
|
112
|
+
"test/scout/simple_opt/test_setup.rb",
|
113
|
+
"test/scout/test_cmd.rb",
|
114
|
+
"test/scout/test_concurrent_stream.rb",
|
115
|
+
"test/scout/test_config.rb",
|
116
|
+
"test/scout/test_indiferent_hash.rb",
|
117
|
+
"test/scout/test_log.rb",
|
118
|
+
"test/scout/test_meta_extension.rb",
|
119
|
+
"test/scout/test_misc.rb",
|
120
|
+
"test/scout/test_named_array.rb",
|
121
|
+
"test/scout/test_open.rb",
|
122
|
+
"test/scout/test_path.rb",
|
123
|
+
"test/scout/test_persist.rb",
|
124
|
+
"test/scout/test_resource.rb",
|
125
|
+
"test/scout/test_tmpfile.rb",
|
126
|
+
"test/test_helper.rb"
|
127
|
+
]
|
128
|
+
s.homepage = "http://github.com/mikisvaz/scout-essentials".freeze
|
129
|
+
s.licenses = ["MIT".freeze]
|
130
|
+
s.rubygems_version = "3.4.13".freeze
|
131
|
+
s.summary = "Scout essential tools".freeze
|
132
|
+
|
133
|
+
s.specification_version = 4
|
134
|
+
|
135
|
+
s.add_development_dependency(%q<shoulda>.freeze, [">= 0"])
|
136
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
137
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
138
|
+
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
139
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
140
|
+
s.add_runtime_dependency(%q<term-ansicolor>.freeze, [">= 0"])
|
141
|
+
s.add_runtime_dependency(%q<yaml>.freeze, [">= 0"])
|
142
|
+
end
|
143
|
+
|