scout-essentials 1.6.2 → 1.6.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a682bf691d2d27784726f6eb108223abc0cc62a3a289f5580ef3ec9a850daffa
4
- data.tar.gz: ac4409c3954aeaa68bfb45844de8701c265b3e896fbe77bb51dfae953ad47035
3
+ metadata.gz: 8ff597b1b0d5a5a8582e92677aa951559d3ddf2f56cec76bbbfd5f0c90ea180e
4
+ data.tar.gz: 298441b06d0c2d048732fa7fb525a51c4ff93a31e39b1882211048f06978c1b9
5
5
  SHA512:
6
- metadata.gz: a9db53026e267d734499b85a2673933c43a7e549497fa76420872dff237fb2858da535fcd654c30153f5b78e4afc9568b884db0ca656f70f1a936d89cff570ab
7
- data.tar.gz: 6868e8baf1d445bfc2aeebee9a0e0cb0c0f9e481e41ef87f3c670d2f9b628445fb8502b7a27a39decb445dabd4ff571145562f16fd0b477ae426d63e1a23d61b
6
+ metadata.gz: 91c63f92b747ea2c39b291430b8a63a7db63bf28465eb66b5d7cceda88f07ceaefef1c7718a589bd5f8f040ff082f9a90232edfa16d4c28a5ba75877ac5a34b9
7
+ data.tar.gz: 10d3e562974232b7fe87954a6970cc9008799e341d2bb01e454406d3ceec5386bb27542dcc8b6622a27fd5382d29320561766b1abfd0467eee939d7c82af0a84
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
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
@@ -41,7 +41,10 @@ module CMD
41
41
  if claim
42
42
  claim.produce
43
43
  else
44
- block.call
44
+ res = block.call
45
+ if Hash === res
46
+ Resource.install res, tool.to_s
47
+ end
45
48
  end
46
49
  end
47
50
  version_txt = ""
@@ -51,7 +51,7 @@ module ConcurrentStream
51
51
  end
52
52
  end
53
53
 
54
- stream.filename = filename.nil? ? stream.inspect.split(":").last[0..-2] : 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
@@ -146,7 +146,7 @@ module Log
146
146
  else
147
147
  begin
148
148
  STDERR.write str
149
- rescue
149
+ rescue IOError
150
150
  end
151
151
  end
152
152
  end
@@ -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)
@@ -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
@@ -28,14 +28,23 @@ module Misc
28
28
  counts
29
29
  end
30
30
 
31
- def self.chunk(array, num)
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 + num - 1
36
- yield array[current..last]
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
@@ -100,8 +100,8 @@ module NamedArray
100
100
 
101
101
  def to_hash
102
102
  hash = {}
103
- self.fields.zip(self) do |field,value|
104
- hash[field] = value
103
+ self.fields.each do |field|
104
+ hash[field] = self[field]
105
105
  end
106
106
  IndiferentHash.setup hash
107
107
  end
@@ -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 current_parts[i].nil?
462
- current_parts[i] = "|" << part
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
@@ -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]
@@ -145,6 +145,8 @@ module Persist
145
145
  Open.marshal(file)
146
146
  when :stream
147
147
  Open.open(file)
148
+ when :path
149
+ Path === file ? file : Path.setup(file)
148
150
  when :file
149
151
  value = Open.read(file)
150
152
  value.sub!(/^\./, File.dirname(file)) if value.start_with?("./")
@@ -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.2 ruby lib
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.2".freeze
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-07-01"
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.ln_s file1, file2
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
@@ -39,5 +39,10 @@ ValueB (Entity type)
39
39
  assert_equal 1, a.a
40
40
  assert_equal 2, a.b
41
41
  end
42
- end
43
42
 
43
+ def test_to_hash
44
+ a = NamedArray.setup([1,2], [:a, :b])
45
+ assert_equal 1, a.to_hash[:a]
46
+ assert_equal 2, a.to_hash[:b]
47
+ end
48
+ 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.2
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-07-01 00:00:00.000000000 Z
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda