scout-essentials 1.6.3 → 1.6.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/.vimproject +5 -0
- data/VERSION +1 -1
- data/lib/scout/annotation/annotated_object.rb +0 -4
- data/lib/scout/annotation/annotation_module.rb +5 -1
- data/lib/scout/annotation/array.rb +9 -1
- data/lib/scout/annotation.rb +6 -2
- data/lib/scout/indiferent_hash/options.rb +4 -3
- data/lib/scout/indiferent_hash.rb +56 -8
- data/lib/scout/log.rb +10 -5
- data/lib/scout/misc/format.rb +3 -3
- data/lib/scout/misc/matching.rb +44 -0
- data/lib/scout/misc.rb +1 -0
- data/lib/scout/named_array.rb +5 -1
- data/lib/scout/open/stream.rb +2 -1
- data/lib/scout/open.rb +2 -2
- data/lib/scout/path/util.rb +11 -0
- data/lib/scout/resource/produce.rb +3 -2
- data/lib/scout/tmpfile.rb +1 -0
- data/scout-essentials.gemspec +6 -5
- data/test/scout/misc/test_matching.rb +9 -0
- data/test/scout/test_indiferent_hash.rb +18 -0
- metadata +5 -4
- data/test/scout/annotation/test_annotated_object.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5c16f695461037137552a5dc43c5135eae7873176ae2bc9495e9c0ed7fdbf0b
|
4
|
+
data.tar.gz: 6bea89686ff4be00f385757cf2d4e96aa15c973253432244eb7c0412c7977365
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10864ea7dc1d73802a5c4bdc4f48f48434f3d610c4efef5df281f0d34b38eae366329673daff86756242ca43cee792ba76c8c8f590d0ed030c0c77c645eb4a58
|
7
|
+
data.tar.gz: 6d2d19fa54ee2ab3c3130310f54feb080713a53f41a69a99debed28e69f127e7e1596eb99a0e715f4a6af5f89af78c86d8c189cc94afef6427c5802962c12c1f
|
data/.vimproject
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.5
|
@@ -34,7 +34,11 @@ module Annotation
|
|
34
34
|
end
|
35
35
|
obj = block if obj.nil?
|
36
36
|
return nil if obj.nil?
|
37
|
-
|
37
|
+
begin
|
38
|
+
obj.extend self unless self === obj
|
39
|
+
rescue TypeError
|
40
|
+
return obj
|
41
|
+
end
|
38
42
|
attrs = self.instance_variable_get("@annotations")
|
39
43
|
|
40
44
|
return obj if attrs.nil? || attrs.empty?
|
@@ -34,7 +34,7 @@ module AnnotatedArray
|
|
34
34
|
|
35
35
|
def each_with_index(&block)
|
36
36
|
super do |item,i|
|
37
|
-
block.call annotate_item(item, i)
|
37
|
+
block.call annotate_item(item, i), i
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -70,6 +70,14 @@ module AnnotatedArray
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
def subset(list)
|
74
|
+
self.annotate(self & list)
|
75
|
+
end
|
76
|
+
|
77
|
+
def remove(list)
|
78
|
+
self.annotate(self - list)
|
79
|
+
end
|
80
|
+
|
73
81
|
%w(compact uniq flatten reverse sort_by).each do |method|
|
74
82
|
|
75
83
|
self.define_method(method) do |*args,&block|
|
data/lib/scout/annotation.rb
CHANGED
@@ -9,8 +9,12 @@ module Annotation
|
|
9
9
|
annotation_types = annotation_types.split("|") if String === annotation_types
|
10
10
|
annotation_types = [annotation_types] unless Array === annotation_types
|
11
11
|
annotation_types.each do |type|
|
12
|
-
|
13
|
-
|
12
|
+
begin
|
13
|
+
type = Kernel.const_get(type) if String === type
|
14
|
+
type.setup(obj, annotation_hash)
|
15
|
+
rescue NameError
|
16
|
+
Log.warn "Annotation #{type} not defined"
|
17
|
+
end
|
14
18
|
end
|
15
19
|
obj
|
16
20
|
end
|
@@ -29,7 +29,9 @@ module IndiferentHash
|
|
29
29
|
|
30
30
|
def self.pull_keys(hash, prefix)
|
31
31
|
IndiferentHash.setup(hash)
|
32
|
-
new = hash.
|
32
|
+
new = hash.delete("#{prefix}_options") if hash.include?("#{prefix}_options")
|
33
|
+
new = {} if new.nil?
|
34
|
+
IndiferentHash.setup(new)
|
33
35
|
prefix = prefix.to_s
|
34
36
|
hash.keys.each do |key|
|
35
37
|
if key.to_s =~ /#{ prefix }_(.*)/
|
@@ -45,8 +47,7 @@ module IndiferentHash
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
end
|
48
|
-
|
49
|
-
IndiferentHash.setup(new)
|
50
|
+
new
|
50
51
|
end
|
51
52
|
|
52
53
|
def self.zip2hash(list1, list2)
|
@@ -17,6 +17,19 @@ module IndiferentHash
|
|
17
17
|
new
|
18
18
|
end
|
19
19
|
|
20
|
+
def deep_merge(other)
|
21
|
+
new = self.dup
|
22
|
+
IndiferentHash.setup(new)
|
23
|
+
other.each do |k,value|
|
24
|
+
if new.include?(k) && IndiferentHash === new[k] && Hash === value
|
25
|
+
new[k] = new[k].deep_merge(value)
|
26
|
+
else
|
27
|
+
new[k] = value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
new
|
31
|
+
end
|
32
|
+
|
20
33
|
def []=(key,value)
|
21
34
|
delete(key)
|
22
35
|
super(key,value)
|
@@ -28,16 +41,22 @@ module IndiferentHash
|
|
28
41
|
|
29
42
|
def [](key)
|
30
43
|
res = super(key)
|
31
|
-
return res unless res.nil? or (_default? and not keys.include? key)
|
32
44
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
when String
|
37
|
-
super(key.to_sym)
|
38
|
-
else
|
39
|
-
res
|
45
|
+
if ! (res.nil? || (_default? and not keys.include?(key)))
|
46
|
+
IndiferentHash.setup(res) if Hash === res
|
47
|
+
return res
|
40
48
|
end
|
49
|
+
|
50
|
+
res = case key
|
51
|
+
when Symbol, Module
|
52
|
+
super(key.to_s)
|
53
|
+
when String
|
54
|
+
super(key.to_sym)
|
55
|
+
else
|
56
|
+
res
|
57
|
+
end
|
58
|
+
IndiferentHash.setup(res) if Hash === res
|
59
|
+
res
|
41
60
|
end
|
42
61
|
|
43
62
|
def values_at(*key_list)
|
@@ -92,5 +111,34 @@ module IndiferentHash
|
|
92
111
|
end
|
93
112
|
IndiferentHash.setup(super(*ext_list))
|
94
113
|
end
|
114
|
+
|
115
|
+
def keys_to_sym!
|
116
|
+
string_keys = keys.select{|k| String === k}
|
117
|
+
string_keys.each do |key|
|
118
|
+
self[key.to_sym] = self.delete(key)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def prety_print
|
123
|
+
Misc.format_definition_list(self, sep: "\n")
|
124
|
+
end
|
125
|
+
|
126
|
+
def except(*list)
|
127
|
+
full_list = list.dup
|
128
|
+
|
129
|
+
list.each do |e|
|
130
|
+
begin
|
131
|
+
if String === e
|
132
|
+
full_list << e.to_sym
|
133
|
+
else
|
134
|
+
full_list << e.to_s
|
135
|
+
end
|
136
|
+
rescue
|
137
|
+
next
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
super(*full_list)
|
142
|
+
end
|
95
143
|
end
|
96
144
|
|
data/lib/scout/log.rb
CHANGED
@@ -252,14 +252,18 @@ module Log
|
|
252
252
|
end
|
253
253
|
|
254
254
|
def self.exception(e)
|
255
|
-
|
255
|
+
return if e.message.include?("NOLOG")
|
256
|
+
last_caller = last_caller caller
|
257
|
+
message = e.message
|
258
|
+
message = Log.fingerprint(message) if String === message && message.length > 1000
|
256
259
|
backtrace = e.backtrace || []
|
260
|
+
backtrace = [] if message.include?("NOSTACK")
|
257
261
|
if ENV["SCOUT_ORIGINAL_STACK"] == 'true'
|
258
|
-
error([e.class.to_s,
|
259
|
-
error("BACKTRACE [#{Process.pid}]: " <<
|
262
|
+
error([e.class.to_s, message].compact * ": " )
|
263
|
+
error("BACKTRACE [#{Process.pid}]: " << last_caller << "\n" + color_stack(backtrace)*"\n")
|
260
264
|
else
|
261
|
-
error("BACKTRACE [#{Process.pid}]: " <<
|
262
|
-
error([e.class.to_s,
|
265
|
+
error("BACKTRACE [#{Process.pid}]: " << last_caller << "\n" + color_stack(backtrace.reverse)*"\n")
|
266
|
+
error([e.class.to_s, message].compact * ": " )
|
263
267
|
end
|
264
268
|
end
|
265
269
|
|
@@ -355,6 +359,7 @@ def ppp(message)
|
|
355
359
|
stack = caller
|
356
360
|
puts "#{Log.color :cyan, "PRINT:"} " << stack.first
|
357
361
|
puts ""
|
362
|
+
message = message.prety_print if message.respond_to?(:prety_print)
|
358
363
|
if message.length > 200 or message.include? "\n"
|
359
364
|
puts Log.color(:cyan, "=>|") << "\n" << message.to_s
|
360
365
|
else
|
data/lib/scout/misc/format.rb
CHANGED
@@ -72,7 +72,7 @@ module Misc
|
|
72
72
|
end*""
|
73
73
|
end
|
74
74
|
|
75
|
-
def self.format_definition_list_item(dt, dd, indent = nil, size = nil, color
|
75
|
+
def self.format_definition_list_item(dt, dd, indent = nil, size = nil, color: :yellow)
|
76
76
|
if size.nil?
|
77
77
|
base_size = MAX_TTY_LINE_WIDTH
|
78
78
|
base_indent = indent || (base_size / 3)
|
@@ -98,12 +98,12 @@ module Misc
|
|
98
98
|
text
|
99
99
|
end
|
100
100
|
|
101
|
-
def self.format_definition_list(defs, indent = nil, size = nil, color
|
101
|
+
def self.format_definition_list(defs, indent = nil, size = nil, color: :yellow, sep: "\n\n")
|
102
102
|
indent ||= 30
|
103
103
|
size ||= (Log.tty_size || MAX_TTY_LINE_WIDTH) - indent
|
104
104
|
entries = []
|
105
105
|
defs.each do |dt,dd|
|
106
|
-
text = format_definition_list_item(dt,dd,indent, size,color)
|
106
|
+
text = format_definition_list_item(dt,dd,indent, size, color: color)
|
107
107
|
entries << text
|
108
108
|
end
|
109
109
|
entries * sep
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Misc
|
2
|
+
def self._convert_match_condition(condition)
|
3
|
+
return true if condition == 'true'
|
4
|
+
return false if condition == 'false'
|
5
|
+
return condition.to_regexp if condition[0] == "/"
|
6
|
+
return [:cmp, $1, $2.to_f] if condition =~ /^([<>]=?)(.*)/
|
7
|
+
return [:invert, _convert_match_condition(condition[1..-1].strip)] if condition[0] == "!"
|
8
|
+
#return {$1 => $2.to_f} if condition =~ /^([<>]=?)(.*)/
|
9
|
+
#return {false => _convert_match_condition(condition[1..-1].strip)} if condition[0] == "!"
|
10
|
+
return condition
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.match_value(value, condition)
|
14
|
+
condition = _convert_match_condition(condition.strip) if String === condition
|
15
|
+
|
16
|
+
case condition
|
17
|
+
when Regexp
|
18
|
+
!! value.match(condition)
|
19
|
+
when NilClass, TrueClass
|
20
|
+
value === TrueClass or (String === value and value.downcase == 'true')
|
21
|
+
when FalseClass
|
22
|
+
value === FalseClass or (String === value and value.downcase == 'false')
|
23
|
+
when String
|
24
|
+
Numeric === value ? value.to_f == condition.to_f : value == condition
|
25
|
+
when Numeric
|
26
|
+
value.to_f == condition.to_f
|
27
|
+
when Array
|
28
|
+
case condition.first
|
29
|
+
when :cmp
|
30
|
+
value.to_f.send(condition[1], condition[2])
|
31
|
+
when :invert
|
32
|
+
! match_value(value, condition[1] )
|
33
|
+
else
|
34
|
+
condition.inject(false){|acc,e| acc = acc ? true : match_value(value, e) }
|
35
|
+
end
|
36
|
+
else
|
37
|
+
raise "Condition not understood: #{Misc.fingerprint condition}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.tokenize(str)
|
42
|
+
str.scan(/"([^"]*)"|'([^']*)'|([^"'\s]+)/).flatten.compact
|
43
|
+
end
|
44
|
+
end
|
data/lib/scout/misc.rb
CHANGED
data/lib/scout/named_array.rb
CHANGED
@@ -42,7 +42,7 @@ module NamedArray
|
|
42
42
|
pos = names.index{|f| f.to_s == field }
|
43
43
|
next pos if pos
|
44
44
|
if field =~ /^\d+$/
|
45
|
-
next
|
45
|
+
next identify_name(names, field.to_i)
|
46
46
|
end
|
47
47
|
next pos if strict
|
48
48
|
pos = names.index{|name| field_match(field, name) }
|
@@ -158,4 +158,8 @@ module NamedArray
|
|
158
158
|
return super(name, *args)
|
159
159
|
end
|
160
160
|
end
|
161
|
+
|
162
|
+
def prety_print
|
163
|
+
Misc.format_definition_list(self.to_hash, sep: "\n")
|
164
|
+
end
|
161
165
|
end
|
data/lib/scout/open/stream.rb
CHANGED
@@ -407,7 +407,8 @@ module Open
|
|
407
407
|
str
|
408
408
|
end
|
409
409
|
|
410
|
-
def self.sort_stream(stream, header_hash: "#", cmd_args:
|
410
|
+
def self.sort_stream(stream, header_hash: "#", cmd_args: nil, memory: false)
|
411
|
+
cmd_args = '-u' if cmd_args.nil?
|
411
412
|
sout = Open.open_pipe do |sin|
|
412
413
|
ConcurrentStream.process_stream(stream) do
|
413
414
|
line = stream.gets
|
data/lib/scout/open.rb
CHANGED
@@ -68,11 +68,11 @@ module Open
|
|
68
68
|
|
69
69
|
options = IndiferentHash.add_defaults options, :noz => false, :mode => 'r'
|
70
70
|
|
71
|
-
mode = IndiferentHash.process_options options, :mode
|
71
|
+
mode, grep, invert_grep, fixed_grep = IndiferentHash.process_options options, :mode, :grep, :invert_grep, :fixed_grep
|
72
72
|
|
73
73
|
options[:noz] = true if mode.include? "w"
|
74
74
|
|
75
|
-
io = file_open(file,
|
75
|
+
io = file_open(file, grep, mode, invert_grep, fixed_grep, options)
|
76
76
|
|
77
77
|
io = unzip(io) if ((String === file and zip?(file)) and not options[:noz]) or options[:zip]
|
78
78
|
io = gunzip(io) if ((String === file and gzip?(file)) and not options[:noz]) or options[:gzip]
|
data/lib/scout/path/util.rb
CHANGED
@@ -82,6 +82,17 @@ module Path
|
|
82
82
|
end.flatten.uniq
|
83
83
|
end
|
84
84
|
|
85
|
+
def get_extension(multiple = false)
|
86
|
+
parts = File.basename(self).split(".")
|
87
|
+
extension = [parts.pop]
|
88
|
+
|
89
|
+
while parts.length < 5
|
90
|
+
extension << [parts.pop]
|
91
|
+
end if multiple
|
92
|
+
|
93
|
+
extension * "."
|
94
|
+
end
|
95
|
+
|
85
96
|
def set_extension(extension)
|
86
97
|
self.annotate(self + ".#{extension}")
|
87
98
|
end
|
@@ -22,7 +22,7 @@ module Resource
|
|
22
22
|
}.last
|
23
23
|
end
|
24
24
|
|
25
|
-
def has_rake(path)
|
25
|
+
def has_rake?(path)
|
26
26
|
!! rake_for(path)
|
27
27
|
end
|
28
28
|
|
@@ -34,6 +34,7 @@ module Resource
|
|
34
34
|
rake_dir = rake_dir.find(:user) if rake_dir.respond_to? :find
|
35
35
|
|
36
36
|
begin
|
37
|
+
Thread.current["resource"] = self
|
37
38
|
if Proc === rakefile
|
38
39
|
ScoutRake.run(nil, rake_dir, task, &rakefile)
|
39
40
|
else
|
@@ -55,7 +56,7 @@ module Resource
|
|
55
56
|
type, content = @resources[path]
|
56
57
|
when (Path === path && @resources && @resources.include?(path.original))
|
57
58
|
type, content = @resources[path.original]
|
58
|
-
when has_rake(path)
|
59
|
+
when has_rake?(path)
|
59
60
|
type = :rake
|
60
61
|
rake_dir, content = rake_for(path)
|
61
62
|
rake_dir = Path.setup(rake_dir.dup, self.pkgdir, self)
|
data/lib/scout/tmpfile.rb
CHANGED
@@ -31,6 +31,7 @@ module TmpFile
|
|
31
31
|
# Creates a random filename in the temporary directory
|
32
32
|
def self.tmp_file(prefix = 'tmp-', max = 1_000_000_000, dir = nil)
|
33
33
|
dir ||= TmpFile.tmpdir
|
34
|
+
dir = dir.find if Path === dir
|
34
35
|
File.expand_path(File.join(dir, random_name(prefix, max)))
|
35
36
|
end
|
36
37
|
|
data/scout-essentials.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: scout-essentials 1.6.
|
5
|
+
# stub: scout-essentials 1.6.5 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "scout-essentials".freeze
|
9
|
-
s.version = "1.6.
|
9
|
+
s.version = "1.6.5".freeze
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Miguel Vazquez".freeze]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2025-01-17"
|
15
15
|
s.description = "Things a scout can use anywhere".freeze
|
16
16
|
s.email = "mikisvaz@gmail.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
@@ -52,6 +52,7 @@ Gem::Specification.new do |s|
|
|
52
52
|
"lib/scout/misc/format.rb",
|
53
53
|
"lib/scout/misc/helper.rb",
|
54
54
|
"lib/scout/misc/insist.rb",
|
55
|
+
"lib/scout/misc/matching.rb",
|
55
56
|
"lib/scout/misc/math.rb",
|
56
57
|
"lib/scout/misc/monitor.rb",
|
57
58
|
"lib/scout/misc/system.rb",
|
@@ -90,7 +91,6 @@ Gem::Specification.new do |s|
|
|
90
91
|
"share/color/color_names",
|
91
92
|
"share/color/diverging_colors.hex",
|
92
93
|
"share/software/install_helpers",
|
93
|
-
"test/scout/annotation/test_annotated_object.rb",
|
94
94
|
"test/scout/annotation/test_array.rb",
|
95
95
|
"test/scout/indiferent_hash/test_case_insensitive.rb",
|
96
96
|
"test/scout/indiferent_hash/test_options.rb",
|
@@ -101,6 +101,7 @@ Gem::Specification.new do |s|
|
|
101
101
|
"test/scout/misc/test_filesystem.rb",
|
102
102
|
"test/scout/misc/test_helper.rb",
|
103
103
|
"test/scout/misc/test_insist.rb",
|
104
|
+
"test/scout/misc/test_matching.rb",
|
104
105
|
"test/scout/misc/test_math.rb",
|
105
106
|
"test/scout/misc/test_system.rb",
|
106
107
|
"test/scout/open/test_lock.rb",
|
@@ -138,7 +139,7 @@ Gem::Specification.new do |s|
|
|
138
139
|
]
|
139
140
|
s.homepage = "http://github.com/mikisvaz/scout-essentials".freeze
|
140
141
|
s.licenses = ["MIT".freeze]
|
141
|
-
s.rubygems_version = "3.5.
|
142
|
+
s.rubygems_version = "3.5.23".freeze
|
142
143
|
s.summary = "Scout essential tools".freeze
|
143
144
|
|
144
145
|
s.specification_version = 4
|
@@ -0,0 +1,9 @@
|
|
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 TestMatches < Test::Unit::TestCase
|
5
|
+
def test_match_value
|
6
|
+
assert Misc.match_value('test', 'test')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
@@ -22,5 +22,23 @@ class TestClass < Test::Unit::TestCase
|
|
22
22
|
assert_equal 2, a["B"]
|
23
23
|
assert_equal 2, a[:b]
|
24
24
|
end
|
25
|
+
|
26
|
+
def test_deep_merge
|
27
|
+
o = {h: {a: 1, b: 2}}
|
28
|
+
n = {h: {c: 3}}
|
29
|
+
|
30
|
+
IndiferentHash.setup(o)
|
31
|
+
o = o.deep_merge(n)
|
32
|
+
|
33
|
+
assert_equal 1, o[:h]["a"]
|
34
|
+
assert_equal 3, o[:h]["c"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_except
|
38
|
+
h = {:a => 1, "b" => 2}
|
39
|
+
IndiferentHash.setup(h)
|
40
|
+
assert_equal [:a], h.except(:b).keys
|
41
|
+
assert_equal ["b"], h.except("a").keys
|
42
|
+
end
|
25
43
|
end
|
26
44
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout-essentials
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shoulda
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/scout/misc/format.rb
|
150
150
|
- lib/scout/misc/helper.rb
|
151
151
|
- lib/scout/misc/insist.rb
|
152
|
+
- lib/scout/misc/matching.rb
|
152
153
|
- lib/scout/misc/math.rb
|
153
154
|
- lib/scout/misc/monitor.rb
|
154
155
|
- lib/scout/misc/system.rb
|
@@ -187,7 +188,6 @@ files:
|
|
187
188
|
- share/color/color_names
|
188
189
|
- share/color/diverging_colors.hex
|
189
190
|
- share/software/install_helpers
|
190
|
-
- test/scout/annotation/test_annotated_object.rb
|
191
191
|
- test/scout/annotation/test_array.rb
|
192
192
|
- test/scout/indiferent_hash/test_case_insensitive.rb
|
193
193
|
- test/scout/indiferent_hash/test_options.rb
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- test/scout/misc/test_filesystem.rb
|
199
199
|
- test/scout/misc/test_helper.rb
|
200
200
|
- test/scout/misc/test_insist.rb
|
201
|
+
- test/scout/misc/test_matching.rb
|
201
202
|
- test/scout/misc/test_math.rb
|
202
203
|
- test/scout/misc/test_system.rb
|
203
204
|
- test/scout/open/test_lock.rb
|
@@ -251,7 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
252
|
- !ruby/object:Gem::Version
|
252
253
|
version: '0'
|
253
254
|
requirements: []
|
254
|
-
rubygems_version: 3.5.
|
255
|
+
rubygems_version: 3.5.23
|
255
256
|
signing_key:
|
256
257
|
specification_version: 4
|
257
258
|
summary: Scout essential tools
|
File without changes
|