mini_readline 0.6.3 → 0.6.4
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/README.md +12 -1
- data/lib/mini_readline.rb +5 -3
- data/lib/mini_readline/options.rb +4 -0
- data/lib/mini_readline/read_line.rb +8 -0
- data/lib/mini_readline/read_line/edit/edit_window/sync_window.rb +7 -1
- data/lib/mini_readline/version.rb +1 -1
- data/tests/mini_readline_tests.rb +42 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cfcf3f362557c6f4ab5ec93418b4ca44ae54a07
|
4
|
+
data.tar.gz: cf0b61fd89ff2bb18d1b8b9a3d06d343e8e2d896
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 709d6bac30409e21669602e21cc55d0caa9ff198b9599ddfdcc73cbe45f6b6acb4ccc4655e894314af175fc01679b57fa2ca299b4cdf149a3eb11080654952b8
|
7
|
+
data.tar.gz: 6cb9c33a15db38317a2a7d933cc61acf4f01d83d996d739316821ac21de9eb6eaf3b9865d0701be63971756c69629f9860e1179757cec830001b8966b93e955f
|
data/README.md
CHANGED
@@ -126,7 +126,7 @@ MiniReadline.readline('>', false)
|
|
126
126
|
```
|
127
127
|
While it does require some small changes, the latter form is the preferred one.
|
128
128
|
|
129
|
-
##### Module Aliasing
|
129
|
+
##### Module Aliasing [Deprecated]
|
130
130
|
|
131
131
|
For enhanced compatibility, the mini_readline gem has the ability to alias
|
132
132
|
itself as the readline gem. This ability is subject to the following list
|
@@ -173,6 +173,10 @@ porting to switch to the mini_readline gem.
|
|
173
173
|
For the most part, compatible mode exists to make that porting process an
|
174
174
|
easier one.
|
175
175
|
|
176
|
+
**IMPORTANT NOTE: The module aliasing feature is now deprecated. For now there
|
177
|
+
will be no change, soon warnings will ensue, then errors. Look for this
|
178
|
+
feature to go away by version 0.7.0 unless some feedback is received.**
|
179
|
+
|
176
180
|
### Native Mode
|
177
181
|
|
178
182
|
In native mode, instances of the Readline class are used to get user input.
|
@@ -251,6 +255,10 @@ BASE_OPTIONS = {
|
|
251
255
|
:no_blanks => true, #No empty lines in history.
|
252
256
|
:no_dups => true, #No duplicate lines in history.
|
253
257
|
|
258
|
+
:secret_mask => nil, #No secret password mask. Use the
|
259
|
+
#string "*" to use stars or " "
|
260
|
+
#for invisible secrets.
|
261
|
+
|
254
262
|
:term => nil, #Filled in by raw_term.rb
|
255
263
|
#MiniReadline::RawTerm
|
256
264
|
|
@@ -278,6 +286,9 @@ more details.
|
|
278
286
|
* :eoi_detect is used to control the end of input detection logic. If disabled,
|
279
287
|
eoi inputs are treated as unmapped. If enabled, they raise a MiniReadlineEOI
|
280
288
|
exception.
|
289
|
+
* :secret_mask is a masking character to be used for sensitive input like a
|
290
|
+
password or missile launch code. This should be exactly one character long.
|
291
|
+
Typical values are "*" or " ".
|
281
292
|
* :term is the interactive source of data, the console by default. The raw
|
282
293
|
terminal console driver automatically adapts to the system environment
|
283
294
|
(Windows or Other) so that correct operation is normally achieved with no
|
data/lib/mini_readline.rb
CHANGED
@@ -20,12 +20,14 @@ module MiniReadline
|
|
20
20
|
private_constant :History
|
21
21
|
private_constant :NoHistory
|
22
22
|
|
23
|
-
#
|
24
|
-
|
23
|
+
#Get the shared instance of Readline.
|
24
|
+
def self.get_reader
|
25
|
+
@reader ||= Readline.new()
|
26
|
+
end
|
25
27
|
|
26
28
|
#The (limited) compatibility module function.
|
27
29
|
def self.readline(prompt = "", history = nil)
|
28
|
-
|
30
|
+
get_reader.readline(prompt: prompt, history: history)
|
29
31
|
end
|
30
32
|
|
31
33
|
end
|
@@ -22,6 +22,10 @@ module MiniReadline
|
|
22
22
|
:no_blanks => true, #No empty lines in history.
|
23
23
|
:no_dups => true, #No duplicate lines in history.
|
24
24
|
|
25
|
+
:secret_mask => nil, #No secret password mask. Use the
|
26
|
+
#string "*" to use stars or " "
|
27
|
+
#for invisible secrets.
|
28
|
+
|
25
29
|
:term => nil, #Filled in by raw_term.rb
|
26
30
|
#MiniReadline::RawTerm
|
27
31
|
|
@@ -62,6 +62,7 @@ module MiniReadline
|
|
62
62
|
@options.merge!(options)
|
63
63
|
(@term = @options[:term]).initialize_parms
|
64
64
|
set_prompt(@options[:prompt])
|
65
|
+
verify_mask(@options[:secret_mask])
|
65
66
|
end
|
66
67
|
|
67
68
|
#Set up the prompt.
|
@@ -81,6 +82,13 @@ module MiniReadline
|
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
85
|
+
#Verify the secret mask
|
86
|
+
def verify_mask(secret)
|
87
|
+
if secret && secret.length != 1
|
88
|
+
fail "Secret mask must be nil or a single character string."
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
84
92
|
#No warnings please!
|
85
93
|
def suppress_warnings
|
86
94
|
@old_stderr = $stderr
|
@@ -35,7 +35,13 @@ module MiniReadline
|
|
35
35
|
|
36
36
|
#Compute what should be on the screen.
|
37
37
|
def build_screen_image(edit_buffer)
|
38
|
-
edit_buffer[left_margin..right_margin]
|
38
|
+
working_region = edit_buffer[left_margin..right_margin]
|
39
|
+
|
40
|
+
if (mask = @options[:secret_mask])
|
41
|
+
mask[0] * working_region.length
|
42
|
+
else
|
43
|
+
working_region
|
44
|
+
end.ljust(active_width)
|
39
45
|
end
|
40
46
|
|
41
47
|
#Bring the screen into agreement with the image.
|
@@ -73,6 +73,40 @@ class MiniReadlineTester < Minitest::Test
|
|
73
73
|
assert_equal("quit", result)
|
74
74
|
end
|
75
75
|
|
76
|
+
def test_reading_a_password
|
77
|
+
puts
|
78
|
+
puts "To finish this test, enter the word: password"
|
79
|
+
|
80
|
+
edit = MiniReadline::Readline.new
|
81
|
+
|
82
|
+
result = ''
|
83
|
+
|
84
|
+
loop do
|
85
|
+
result = edit.readline(prompt: ">", secret_mask: "*").chomp
|
86
|
+
puts result.inspect
|
87
|
+
break unless result != "password"
|
88
|
+
end
|
89
|
+
|
90
|
+
assert_equal("password", result)
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_reading_blanked
|
94
|
+
puts
|
95
|
+
puts "To finish this test, enter the word: password"
|
96
|
+
|
97
|
+
edit = MiniReadline::Readline.new
|
98
|
+
|
99
|
+
result = ''
|
100
|
+
|
101
|
+
loop do
|
102
|
+
result = edit.readline(prompt: ">", secret_mask: " ").chomp
|
103
|
+
puts result.inspect
|
104
|
+
break unless result != "password"
|
105
|
+
end
|
106
|
+
|
107
|
+
assert_equal("password", result)
|
108
|
+
end
|
109
|
+
|
76
110
|
def test_array_complete
|
77
111
|
puts "\nPlease select an approved fruit."
|
78
112
|
|
@@ -151,6 +185,14 @@ class MiniReadlineTester < Minitest::Test
|
|
151
185
|
assert_raises(RuntimeError) {edit.readline(opts)}
|
152
186
|
end
|
153
187
|
|
188
|
+
def test_mask_verification
|
189
|
+
opts = {prompt: ">", secret_mask: ""}
|
190
|
+
edit = MiniReadline::Readline.new()
|
191
|
+
assert_raises(RuntimeError) {edit.readline(opts)}
|
154
192
|
|
193
|
+
opts = {prompt: ">", secret_mask: "xx"}
|
194
|
+
edit = MiniReadline::Readline.new()
|
195
|
+
assert_raises(RuntimeError) {edit.readline(opts)}
|
196
|
+
end
|
155
197
|
|
156
198
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_readline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|