scout-essentials 1.6.4 → 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/VERSION +1 -1
- data/lib/scout/annotation/annotated_object.rb +0 -4
- data/lib/scout/annotation.rb +6 -2
- data/lib/scout/indiferent_hash/options.rb +4 -3
- data/lib/scout/indiferent_hash.rb +49 -8
- data/lib/scout/misc/matching.rb +44 -0
- data/lib/scout/misc.rb +1 -0
- data/lib/scout/named_array.rb +1 -1
- data/lib/scout/open/stream.rb +2 -1
- data/lib/scout/path/util.rb +11 -0
- data/lib/scout/resource/produce.rb +2 -2
- data/scout-essentials.gemspec +5 -4
- data/test/scout/misc/test_matching.rb +9 -0
- data/test/scout/test_indiferent_hash.rb +18 -0
- metadata +4 -3
- 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/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.5
|
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)
|
@@ -99,5 +118,27 @@ module IndiferentHash
|
|
99
118
|
self[key.to_sym] = self.delete(key)
|
100
119
|
end
|
101
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
|
102
143
|
end
|
103
144
|
|
@@ -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) }
|
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/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
|
|
@@ -56,7 +56,7 @@ module Resource
|
|
56
56
|
type, content = @resources[path]
|
57
57
|
when (Path === path && @resources && @resources.include?(path.original))
|
58
58
|
type, content = @resources[path.original]
|
59
|
-
when has_rake(path)
|
59
|
+
when has_rake?(path)
|
60
60
|
type = :rake
|
61
61
|
rake_dir, content = rake_for(path)
|
62
62
|
rake_dir = Path.setup(rake_dir.dup, self.pkgdir, self)
|
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",
|
@@ -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
|
File without changes
|