trick_bag 0.68.0 → 0.69.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/RELEASE_NOTES.md +5 -0
- data/lib/trick_bag/enumerables/buffered_enumerable.rb +18 -13
- data/lib/trick_bag/filesystem/filesystem.rb +6 -7
- data/lib/trick_bag/io/temp_files.rb +18 -18
- data/lib/trick_bag/io/text_mode_status_updater.rb +0 -2
- data/lib/trick_bag/networking/ssh_output_reader.rb +5 -1
- data/lib/trick_bag/version.rb +1 -1
- data/spec/trick_bag/enumerables/buffered_enumerable_spec.rb +10 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8c964fe06a56296126af07267b11108fcb6e8722b73a7faece5a1e9dee83081e
|
4
|
+
data.tar.gz: abac32f4c508b3d8c1eb05ef53561f2d6e173d680310fc4adfbe5f6cf5a303dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40d8c1188804504e01e339f13287b0803461ee425fce82e55221c74576e1ef4eadf08a5c0049f5924ea820ca11a1039c2adf98d3eed14968dbceb33904026683
|
7
|
+
data.tar.gz: d675e3eb74bb6f28e8ea329a47992c2803ff526ad54eab9ffbd0344d7b12c0b5d6d7ac88c1d1ec603f4c844db9cc984a8ff376e217b5581627a2798e3e750e8f
|
data/RELEASE_NOTES.md
CHANGED
@@ -8,10 +8,10 @@ module Enumerables
|
|
8
8
|
# fetches them in chunks.
|
9
9
|
#
|
10
10
|
# This class knows nothing about how to fetch anything; that behavior is provided
|
11
|
-
# by either subclassing this class, or calling .
|
12
|
-
# a
|
11
|
+
# by either subclassing this class, or calling .create_with_callables and passing
|
12
|
+
# a callable that knows how to do that.
|
13
13
|
#
|
14
|
-
# Also supported is an optional fetch notification, a method or
|
14
|
+
# Also supported is an optional fetch notification, a method or callable that will
|
15
15
|
# be called whenever a fetch is done. This can be useful to update counters,
|
16
16
|
# provide user feedback (e.g. a progress bar), etc.
|
17
17
|
#
|
@@ -19,8 +19,8 @@ module Enumerables
|
|
19
19
|
# one immediately after another, and the responses can be collected as a group,
|
20
20
|
# for improved performance.
|
21
21
|
#
|
22
|
-
# The fetch method and fetcher
|
23
|
-
# to avoid the need to allow the
|
22
|
+
# The fetch method and fetcher callable modify the instance's data array directly,
|
23
|
+
# to avoid the need to allow the callable to modify the data array reference,
|
24
24
|
# needlessly copying arrays,
|
25
25
|
# and to eliminate the need for garbage collecting many array objects
|
26
26
|
# (though the latter is rarely important).
|
@@ -37,20 +37,25 @@ class BufferedEnumerable
|
|
37
37
|
attr_access :public, :private, :chunk_count, :fetch_count, :yield_count
|
38
38
|
|
39
39
|
|
40
|
-
# Creates an instance with
|
40
|
+
# Creates an instance with callables for fetch and fetch notify behaviors.
|
41
|
+
# Callables are usually lambdas but can be any object responding to the method name `call`.
|
41
42
|
# @param chunk_size the maximum number of objects to be buffered
|
42
|
-
# @param fetcher
|
43
|
-
# @param fetch_notifier
|
44
|
-
def self.
|
43
|
+
# @param fetcher callable to be called to fetch to fill the buffer
|
44
|
+
# @param fetch_notifier callable to be called to when a fetch is done
|
45
|
+
def self.create_with_callables(chunk_size, fetcher, fetch_notifier = nil)
|
45
46
|
instance = self.new(chunk_size)
|
46
47
|
instance.fetcher = fetcher
|
47
48
|
instance.fetch_notifier = fetch_notifier
|
48
49
|
instance
|
49
50
|
end
|
51
|
+
class << self
|
52
|
+
alias_method :create_with_lambdas, :create_with_callables
|
53
|
+
end
|
54
|
+
|
50
55
|
|
51
|
-
# @param fetcher
|
56
|
+
# @param fetcher callable to be called to fetch to fill the buffer
|
52
57
|
# @param chunk_size the maximum number of objects to be buffered
|
53
|
-
# @param fetch_notifier
|
58
|
+
# @param fetch_notifier callable to be called to when a fetch is done
|
54
59
|
# in case the caller wants to receive notification, update counters, etc.
|
55
60
|
# It's passed the array of objects just fetched, whose size may be
|
56
61
|
# less than chunk size.
|
@@ -63,14 +68,14 @@ class BufferedEnumerable
|
|
63
68
|
end
|
64
69
|
|
65
70
|
|
66
|
-
# Unless you use self.
|
71
|
+
# Unless you use self.create_with_callables to create your instance,
|
67
72
|
# you'll need to override this method in your subclass.
|
68
73
|
def fetch
|
69
74
|
fetcher.(data, chunk_size) if fetcher
|
70
75
|
end
|
71
76
|
|
72
77
|
|
73
|
-
# Unless you use self.
|
78
|
+
# Unless you use self.create_with_callables to create your instance,
|
74
79
|
# you'll need to override this method in your subclass.
|
75
80
|
def fetch_notify
|
76
81
|
fetch_notifier.(data) if fetch_notifier
|
@@ -6,16 +6,14 @@ module Filesystem
|
|
6
6
|
# @return true if the passed file is being run as a script, else false
|
7
7
|
# @param __file__ - !!! __FILE__ must be passed as the __file__ argument for this to work correctly !!!
|
8
8
|
#
|
9
|
+
# When the file's behavior needs to differ when running as a script and _not_ running as a script,
|
10
|
+
# this method can be called to report which of the two states it is.
|
11
|
+
#
|
9
12
|
# Sometimes we want to see if a given file is being run as a script, as opposed to loaded
|
10
13
|
# by other Ruby code. For example, the script at https://github.com/keithrbennett/macwifi/blob/master/bin/mac-wifi
|
11
14
|
# is normally run as a script (either by running the file directly, or by running the executable's
|
12
15
|
# binstub installed by the gem), but it can also be loaded so that the model can be used by custom code.
|
13
|
-
#
|
14
|
-
# When the file's behavior needs to differ when running as a script and _not_ running as a script,
|
15
|
-
# this method can be called to report which of the two states it is.
|
16
|
-
#
|
17
|
-
# An example of differing behavior is also in the case of `mac-wifi`. When run as a script,
|
18
|
-
# it parses the command line and executes a task, sending text to stdout.
|
16
|
+
# When run as a script, it parses the command line and executes a task, sending text to stdout.
|
19
17
|
def running_as_script?(__file__)
|
20
18
|
|
21
19
|
# Here is some sample state, when running a file as a gem executable:
|
@@ -36,7 +34,8 @@ module Filesystem
|
|
36
34
|
basename = File.basename($0)
|
37
35
|
gem_paths.any? do |path|
|
38
36
|
($0 == File.join(path, 'bin', basename)) \
|
39
|
-
|
37
|
+
&& \
|
38
|
+
(path == File.expand_path(File.join(__file__, '..', '..', '..', '..')))
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
@@ -4,28 +4,28 @@ module TrickBag
|
|
4
4
|
module Io
|
5
5
|
module TempFiles
|
6
6
|
|
7
|
-
|
7
|
+
module_function
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
# For the easy creation and deletion of a temp file populated with text,
|
10
|
+
# wrapped around the code block you provide.
|
11
|
+
#
|
12
|
+
# @param text the text to write to the temporary file
|
13
|
+
# @param file_prefix optional prefix for the temporary file's name
|
14
|
+
# @yield filespec of the temporary file
|
15
|
+
def file_containing(text, file_prefix = '')
|
16
|
+
raise "This method must be called with a code block." unless block_given?
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
yield(filespec)
|
25
|
-
ensure
|
26
|
-
File.delete filespec if filespec && File.exist?(filespec)
|
18
|
+
filespec = nil
|
19
|
+
begin
|
20
|
+
Tempfile.open(file_prefix) do |file|
|
21
|
+
file << text
|
22
|
+
filespec = file.path
|
27
23
|
end
|
24
|
+
yield(filespec)
|
25
|
+
ensure
|
26
|
+
File.delete(filespec) if filespec && File.exist?(filespec)
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
31
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module TrickBag
|
2
2
|
module Io
|
3
3
|
|
4
|
-
# Provides an updatable and customizable status/information line in a terminal,
|
5
|
-
# typically used to display progress.
|
6
4
|
# Updates the terminal line with text, erasing the original content and displaying at the same place.
|
7
5
|
# Uses ANSI escape sequences for cursor positioning and clearing
|
8
6
|
# (see http://www.oldlinux.org/Linux.old/Ref-docs/ASCII/ANSI%20Escape%20Sequences.htm).
|
@@ -116,7 +116,9 @@ class SshOutputReader
|
|
116
116
|
end
|
117
117
|
|
118
118
|
|
119
|
-
|
119
|
+
# This is an eample of use of the class that will be run if the file is run explicitly
|
120
|
+
# i.e.: ruby ssh_output_reader.rb
|
121
|
+
# This should be moved somewhere else.
|
120
122
|
if $0 == __FILE__
|
121
123
|
|
122
124
|
Thread.abort_on_exception = true
|
@@ -147,6 +149,8 @@ echo 3
|
|
147
149
|
sleep 1
|
148
150
|
echo 4'
|
149
151
|
|
152
|
+
# TODO: Clean this up!
|
153
|
+
|
150
154
|
# reader = SshOutputReader.new('localhost', command)
|
151
155
|
# reader.run
|
152
156
|
# puts "All reader stdout:\n" + reader.all_stdout
|
data/lib/trick_bag/version.rb
CHANGED
@@ -6,7 +6,7 @@ module Enumerables
|
|
6
6
|
|
7
7
|
describe BufferedEnumerable do
|
8
8
|
|
9
|
-
context 'when created with
|
9
|
+
context 'when created with callables' do
|
10
10
|
# Returns an object that returns chunks of incrementing integers.
|
11
11
|
let(:fetcher) do
|
12
12
|
object = 0
|
@@ -27,15 +27,15 @@ module Enumerables
|
|
27
27
|
object_count += fetched_objects.size
|
28
28
|
end
|
29
29
|
|
30
|
-
e = BufferedEnumerable.
|
30
|
+
e = BufferedEnumerable.create_with_callables(4, fetcher, fetch_notifier).to_enum
|
31
31
|
(1..10).each { |n| expect(e.next).to eq(n) }
|
32
32
|
expect(chunk_fetch_calls).to eq(3)
|
33
33
|
expect(object_count).to eq(12)
|
34
34
|
end
|
35
35
|
|
36
|
-
specify '
|
36
|
+
specify 'create_with_callables can be called without specifying a fetch_notifier' do
|
37
37
|
be = nil
|
38
|
-
f1 = -> { be = BufferedEnumerable.
|
38
|
+
f1 = -> { be = BufferedEnumerable.create_with_callables(4, fetcher).to_enum }
|
39
39
|
expect(f1).not_to raise_error
|
40
40
|
f2 = -> { (1..10).each { be.next } }
|
41
41
|
expect(f2).not_to raise_error
|
@@ -43,6 +43,12 @@ module Enumerables
|
|
43
43
|
end
|
44
44
|
|
45
45
|
|
46
|
+
specify 'create with old method name create_with_lambdas still works' do
|
47
|
+
buffered_enumerable = BufferedEnumerable.create_with_lambdas(4, ->() {}, ->() {})
|
48
|
+
expect(buffered_enumerable.class).to eq(BufferedEnumerable)
|
49
|
+
end
|
50
|
+
|
51
|
+
|
46
52
|
context "when instantiating a subclass" do
|
47
53
|
specify 'the values and number of fetches are correct' do
|
48
54
|
create_test_class = ->() do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trick_bag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.69.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Bennett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: os
|
@@ -224,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
224
|
version: '0'
|
225
225
|
requirements: []
|
226
226
|
rubyforge_project:
|
227
|
-
rubygems_version: 2.6
|
227
|
+
rubygems_version: 2.7.6
|
228
228
|
signing_key:
|
229
229
|
specification_version: 4
|
230
230
|
summary: Miscellaneous general useful tools.
|