scout-essentials 1.6.2 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/scout/annotation/array.rb +10 -0
- data/lib/scout/cmd.rb +4 -1
- data/lib/scout/concurrent_stream.rb +5 -1
- data/lib/scout/log.rb +1 -1
- data/lib/scout/misc/digest.rb +0 -9
- data/lib/scout/misc/format.rb +1 -3
- data/lib/scout/misc/helper.rb +12 -3
- data/lib/scout/named_array.rb +2 -2
- data/lib/scout/open/stream.rb +8 -3
- data/lib/scout/open/util.rb +6 -1
- data/lib/scout/open.rb +3 -3
- data/lib/scout/persist/serialize.rb +2 -0
- data/scout-essentials.gemspec +3 -3
- data/test/scout/misc/test_helper.rb +5 -0
- data/test/scout/open/test_stream.rb +28 -0
- data/test/scout/open/test_util.rb +16 -1
- data/test/scout/test_named_array.rb +6 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ff597b1b0d5a5a8582e92677aa951559d3ddf2f56cec76bbbfd5f0c90ea180e
|
4
|
+
data.tar.gz: 298441b06d0c2d048732fa7fb525a51c4ff93a31e39b1882211048f06978c1b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91c63f92b747ea2c39b291430b8a63a7db63bf28465eb66b5d7cceda88f07ceaefef1c7718a589bd5f8f040ff082f9a90232edfa16d4c28a5ba75877ac5a34b9
|
7
|
+
data.tar.gz: 10d3e562974232b7fe87954a6970cc9008799e341d2bb01e454406d3ceec5386bb27542dcc8b6622a27fd5382d29320561766b1abfd0467eee939d7c82af0a84
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.3
|
@@ -9,6 +9,7 @@ module AnnotatedArray
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def annotate_item(obj, position = nil)
|
12
|
+
return obj if obj.nil?
|
12
13
|
obj = obj.dup if obj.frozen?
|
13
14
|
obj.extend AnnotatedArray if Array === obj
|
14
15
|
obj.extend AnnotatedArrayItem
|
@@ -37,6 +38,15 @@ module AnnotatedArray
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
41
|
+
def select(&block)
|
42
|
+
selected = []
|
43
|
+
each do |item|
|
44
|
+
selected << item if block.call(item)
|
45
|
+
end
|
46
|
+
|
47
|
+
self.annotate(selected)
|
48
|
+
end
|
49
|
+
|
40
50
|
def each(&block)
|
41
51
|
i = 0
|
42
52
|
super do |item|
|
data/lib/scout/cmd.rb
CHANGED
@@ -51,7 +51,7 @@ module ConcurrentStream
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
stream.filename = filename
|
54
|
+
stream.filename = filename if filename
|
55
55
|
|
56
56
|
stream.lock = lock unless lock.nil?
|
57
57
|
|
@@ -60,6 +60,10 @@ module ConcurrentStream
|
|
60
60
|
stream
|
61
61
|
end
|
62
62
|
|
63
|
+
def filename
|
64
|
+
@filename || self.inspect.split(":").last[0..-2]
|
65
|
+
end
|
66
|
+
|
63
67
|
def annotate(stream)
|
64
68
|
ConcurrentStream.setup(stream, :threads => threads, :pids => pids, :callback => callback, :abort_callback => abort_callback, :filename => filename, :autojoin => autojoin, :lock => lock)
|
65
69
|
stream
|
data/lib/scout/log.rb
CHANGED
data/lib/scout/misc/digest.rb
CHANGED
@@ -6,15 +6,6 @@ module Misc
|
|
6
6
|
obj.digest_str
|
7
7
|
else
|
8
8
|
case obj
|
9
|
-
when Path
|
10
|
-
case
|
11
|
-
when File.directory?(obj)
|
12
|
-
"Directory MD5: #{digest_str(Dir.glob(File.join(obj, "*")))}"
|
13
|
-
when obj.located? && File.exist?(obj)
|
14
|
-
"File MD5: #{Misc.digest_file(obj)}"
|
15
|
-
else
|
16
|
-
'\'' << obj << '\''
|
17
|
-
end
|
18
9
|
when String
|
19
10
|
if Path.is_filename?(obj) && Open.exists?(obj)
|
20
11
|
if File.directory?(obj)
|
data/lib/scout/misc/format.rb
CHANGED
@@ -36,9 +36,7 @@ module Misc
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
MAX_TTY_LINE_WIDTH = 100
|
39
|
+
MAX_TTY_LINE_WIDTH = 160
|
42
40
|
def self.format_paragraph(text, size = nil, indent = nil, offset = nil)
|
43
41
|
size ||= Log.tty_size || MAX_TTY_LINE_WIDTH
|
44
42
|
size = MAX_TTY_LINE_WIDTH if size > MAX_TTY_LINE_WIDTH
|
data/lib/scout/misc/helper.rb
CHANGED
@@ -28,14 +28,23 @@ module Misc
|
|
28
28
|
counts
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
# Divides the array into chunks of size +size+ by taking
|
32
|
+
# consecutive elements. If a block is given it runs it
|
33
|
+
# instead of returning the chunks
|
34
|
+
def self.chunk(array, size)
|
32
35
|
total = array.length
|
33
36
|
current = 0
|
37
|
+
res = [] unless block_given?
|
34
38
|
while current < total
|
35
|
-
last = current +
|
36
|
-
|
39
|
+
last = current + size - 1
|
40
|
+
if block_given?
|
41
|
+
yield array[current..last]
|
42
|
+
else
|
43
|
+
res << array[current..last]
|
44
|
+
end
|
37
45
|
current = last + 1
|
38
46
|
end
|
47
|
+
block_given? ? nil : res
|
39
48
|
end
|
40
49
|
|
41
50
|
# Divides the array into +num+ chunks of the same size by placing one
|
data/lib/scout/named_array.rb
CHANGED
data/lib/scout/open/stream.rb
CHANGED
@@ -440,7 +440,7 @@ module Open
|
|
440
440
|
# StringIO.new stream.read.split("\n").sort.uniq * "\n"
|
441
441
|
#end
|
442
442
|
|
443
|
-
def self.collapse_stream(s, line: nil, sep: "\t", header: nil, &block)
|
443
|
+
def self.collapse_stream(s, line: nil, sep: "\t", header: nil, compact: false, &block)
|
444
444
|
sep ||= "\t"
|
445
445
|
Open.open_pipe do |sin|
|
446
446
|
|
@@ -458,8 +458,13 @@ module Open
|
|
458
458
|
current_key = key
|
459
459
|
when current_key == key
|
460
460
|
parts.each_with_index do |part,i|
|
461
|
-
if
|
462
|
-
|
461
|
+
next if compact and part.nil? || part.empty?
|
462
|
+
if current_parts[i].nil? || current_parts[i].empty?
|
463
|
+
if compact
|
464
|
+
current_parts[i] = part.dup
|
465
|
+
else
|
466
|
+
current_parts[i] = "|" << part
|
467
|
+
end
|
463
468
|
else
|
464
469
|
current_parts[i] = current_parts[i] << "|" << part
|
465
470
|
end
|
data/lib/scout/open/util.rb
CHANGED
@@ -11,7 +11,7 @@ module Open
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.grep(stream, grep, invert = false, fixed = nil)
|
14
|
+
def self.grep(stream, grep, invert = false, fixed = nil, options = {})
|
15
15
|
case
|
16
16
|
when Array === grep
|
17
17
|
TmpFile.with_file(grep * "\n", false) do |f|
|
@@ -242,6 +242,11 @@ module Open
|
|
242
242
|
nil
|
243
243
|
end
|
244
244
|
|
245
|
+
def self.link_dir(source, target)
|
246
|
+
Log.debug "Copy with hard-links #{Log.fingerprint source}->#{Log.fingerprint target}"
|
247
|
+
FileUtils.cp_lr(source, target)
|
248
|
+
end
|
249
|
+
|
245
250
|
def self.list(file)
|
246
251
|
file = file.produce_and_find if Path === file
|
247
252
|
Open.read(file).split("\n")
|
data/lib/scout/open.rb
CHANGED
@@ -31,13 +31,13 @@ module Open
|
|
31
31
|
File.open(file, mode)
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.file_open(file, grep = false, mode = 'r', invert_grep = false, options = {})
|
34
|
+
def self.file_open(file, grep = false, mode = 'r', invert_grep = false, fixed_grep = true, options = {})
|
35
35
|
Open.mkdir File.dirname(file) if mode.include? 'w'
|
36
36
|
|
37
37
|
stream = get_stream(file, mode, options)
|
38
38
|
|
39
39
|
if grep
|
40
|
-
grep(stream, grep, invert_grep)
|
40
|
+
grep(stream, grep, invert_grep, fixed_grep)
|
41
41
|
else
|
42
42
|
stream
|
43
43
|
end
|
@@ -72,7 +72,7 @@ module Open
|
|
72
72
|
|
73
73
|
options[:noz] = true if mode.include? "w"
|
74
74
|
|
75
|
-
io = file_open(file, options[:grep], mode, options[:invert_grep], options)
|
75
|
+
io = file_open(file, options[:grep], mode, options[:invert_grep], options[: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/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.3 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.3".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 = "2024-
|
14
|
+
s.date = "2024-10-04"
|
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 = [
|
@@ -6,6 +6,11 @@ class TestMiscHelper < Test::Unit::TestCase
|
|
6
6
|
assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
7
7
|
end
|
8
8
|
|
9
|
+
def test_chunk
|
10
|
+
assert_equal %w(1 2), Misc.chunk(%w(1 2 3 4 5 6 7 8 9),2)[0]
|
11
|
+
end
|
12
|
+
|
13
|
+
|
9
14
|
def test_ordered_divide
|
10
15
|
assert_equal 5, Misc.ordered_divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
11
16
|
end
|
@@ -393,6 +393,34 @@ row2 aa bb cc
|
|
393
393
|
s = StringIO.new text
|
394
394
|
assert Open.collapse_stream(s, sep: " ").read =~ /\|cc$/
|
395
395
|
end
|
396
|
+
|
397
|
+
def test_collapse_stream_compact
|
398
|
+
text=<<-EOF
|
399
|
+
row1 A B C
|
400
|
+
row1 a b c
|
401
|
+
row2 BB CC
|
402
|
+
row2 aa bb cc
|
403
|
+
row2 aaa ccc
|
404
|
+
EOF
|
405
|
+
|
406
|
+
s = StringIO.new text
|
407
|
+
stream = Open.collapse_stream(s, sep: "\t", compact: false)
|
408
|
+
txt = stream.read
|
409
|
+
assert_include txt, "A|a"
|
410
|
+
assert_include txt, "B|b"
|
411
|
+
assert_include txt, "C|c"
|
412
|
+
assert_include txt, "|aa"
|
413
|
+
|
414
|
+
s = StringIO.new text
|
415
|
+
stream = Open.collapse_stream(s, sep: "\t", compact: true)
|
416
|
+
txt = stream.read
|
417
|
+
assert_include txt, "A|a"
|
418
|
+
assert_include txt, "B|b"
|
419
|
+
assert_include txt, "C|c"
|
420
|
+
assert_not_include txt, "|aa\t"
|
421
|
+
assert_not_include txt, "bb|"
|
422
|
+
end
|
423
|
+
|
396
424
|
#
|
397
425
|
#
|
398
426
|
# def test_paste_stream
|
@@ -63,10 +63,25 @@ class TestOpenUtil < Test::Unit::TestCase
|
|
63
63
|
file1 = directory.subdir1.file
|
64
64
|
file2 = directory.subdir2.file
|
65
65
|
Open.write(file1, "TEST")
|
66
|
-
Open.
|
66
|
+
Open.ln_h file1, file2
|
67
|
+
assert_equal "TEST", Open.read(file2)
|
68
|
+
Open.write(file1, "TEST2")
|
69
|
+
assert_equal "TEST2", Open.read(file2)
|
70
|
+
assert_equal File.stat(file1).ino, File.stat(file2).ino
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_ln_recursive
|
75
|
+
TmpFile.with_file do |directory|
|
76
|
+
Path.setup(directory)
|
77
|
+
file1 = directory.subdir1.file
|
78
|
+
file2 = directory.subdir2.file
|
79
|
+
Open.write(file1, "TEST")
|
80
|
+
Open.link_dir directory.subdir1, directory.subdir2
|
67
81
|
assert_equal "TEST", Open.read(file2)
|
68
82
|
Open.write(file1, "TEST2")
|
69
83
|
assert_equal "TEST2", Open.read(file2)
|
84
|
+
assert_equal File.stat(file1).ino, File.stat(file2).ino
|
70
85
|
end
|
71
86
|
end
|
72
87
|
end
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shoulda
|