trick_bag 0.68.0 → 0.69.0
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 +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.
|