fancy_gets 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/fancy_gets.gemspec +1 -1
- data/lib/fancy_gets.rb +23 -26
- data/lib/fancy_gets/version.rb +1 -1
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 51c96b67bf9c4b86e5a928042a1ef0923d720cedc3e75dc659bd58910c284e8c
|
4
|
+
data.tar.gz: 222b64256299e56e23c0829b2fb7a855d6d4f38cd158926040d661deb0121583
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 573430996f606e869215ceb26ed019753192d9344d5c182027e22a9b9b09167eedc8938d994a0cdfbc64f8e3f6f1c9d4c57ff6eb1dc50d216632270c79ad78da
|
7
|
+
data.tar.gz: ece58b484fcf7fbf88c16f94d00a3868743c9218f5b0069cb9eaf12fb29d252aa0259945e3e8cf61641053a033829918d99be835a0c499336e73887dc5fd038e
|
data/fancy_gets.gemspec
CHANGED
@@ -35,6 +35,6 @@ It's all here. Enjoy!}
|
|
35
35
|
spec.require_paths = ["lib"]
|
36
36
|
|
37
37
|
spec.add_development_dependency "bundler", "~> 1.12"
|
38
|
-
spec.add_development_dependency "rake", "~>
|
38
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
39
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
40
40
|
end
|
data/lib/fancy_gets.rb
CHANGED
@@ -40,10 +40,10 @@ module FancyGets
|
|
40
40
|
def self.gets_internal_core(is_list, is_password, word_objects = nil, chosen = nil, prefix = "> ", postfix = " <", info = nil, height = nil, on_change = nil, on_select = nil)
|
41
41
|
# OK -- second parameter, is_password, means is_multiple when is_list is true
|
42
42
|
is_multiple = is_list & is_password
|
43
|
-
|
43
|
+
if word_objects && !is_list
|
44
44
|
word_objects.sort! {|wo1, wo2| wo1.to_s <=> wo2.to_s}
|
45
45
|
end
|
46
|
-
words = word_objects
|
46
|
+
words = word_objects&.map(&:to_s) || []
|
47
47
|
if is_multiple
|
48
48
|
chosen ||= [0] unless is_multiple
|
49
49
|
else
|
@@ -56,8 +56,8 @@ module FancyGets
|
|
56
56
|
end
|
57
57
|
position = 0
|
58
58
|
# Up and down arrows break with height of 3 or less
|
59
|
-
height = words.length unless
|
60
|
-
winheight = IO.console.winsize.first - 3
|
59
|
+
height = words.length unless height&.is_a?(Numeric) && height >= 4
|
60
|
+
winheight = (IO.console || STDOUT).winsize.first - 3
|
61
61
|
height = words.length if height > words.length
|
62
62
|
height = winheight if height > winheight
|
63
63
|
offset = 0
|
@@ -109,7 +109,7 @@ module FancyGets
|
|
109
109
|
# Put the response into the info line, as long as it's short enough!
|
110
110
|
new_info.gsub!("\n", " ")
|
111
111
|
new_info_length = uncolor.call(new_info).length
|
112
|
-
console_width = IO.console.winsize.last
|
112
|
+
console_width = (IO.console || STDOUT).winsize.last
|
113
113
|
# Might have to trim if it's a little too wide
|
114
114
|
new_info = new_info[0...console_width] if console_width < new_info_length
|
115
115
|
# Arrow down to the info line
|
@@ -131,9 +131,9 @@ module FancyGets
|
|
131
131
|
print (new_info_length > word_length ? "\b" : (27.chr + 91.chr + 67.chr)) * (new_info_length - word_length).abs
|
132
132
|
end
|
133
133
|
|
134
|
-
handle_on_select = lambda do |
|
134
|
+
handle_on_select = lambda do |selected|
|
135
135
|
if on_select.is_a? Proc
|
136
|
-
response = on_select.call({chosen: chosen,
|
136
|
+
response = on_select.call({chosen: chosen, selected: selected})
|
137
137
|
new_info = nil
|
138
138
|
if response.is_a? Hash
|
139
139
|
chosen = response[:chosen] || chosen
|
@@ -141,9 +141,7 @@ module FancyGets
|
|
141
141
|
elsif response.is_a? String
|
142
142
|
new_info = response
|
143
143
|
end
|
144
|
-
|
145
|
-
write_info.call(new_info)
|
146
|
-
end
|
144
|
+
write_info.call(new_info) if new_info
|
147
145
|
end
|
148
146
|
end
|
149
147
|
|
@@ -256,7 +254,7 @@ module FancyGets
|
|
256
254
|
chosen[i] = word_objects.index(item)
|
257
255
|
end
|
258
256
|
end
|
259
|
-
chosen.
|
257
|
+
chosen.compact.uniq
|
260
258
|
else
|
261
259
|
if word_objects.include?(chosen)
|
262
260
|
chosen = [word_objects.index(chosen)]
|
@@ -356,7 +354,18 @@ module FancyGets
|
|
356
354
|
arrow_down.call if is_list
|
357
355
|
when 65 # - up
|
358
356
|
arrow_up.call if is_list
|
359
|
-
when 51 # -
|
357
|
+
when 51 # - Start of a possible delete forwards?
|
358
|
+
if STDIN.getch.ord == 126 # - Delete (forwards)
|
359
|
+
if !is_list && position < string.length
|
360
|
+
string = string[0...position] + string[position + 1..-1]
|
361
|
+
if words.empty?
|
362
|
+
print "#{is_password ? "*" * (string.length - position) : string[position..-1]} #{"\b" * (string.length - position + 1)}"
|
363
|
+
else
|
364
|
+
prev_sugg = sugg
|
365
|
+
print "#{string[position..-1]}#{write_sugg.call}"
|
366
|
+
end
|
367
|
+
end
|
368
|
+
end
|
360
369
|
else
|
361
370
|
# puts "ESC 91 #{ch}"
|
362
371
|
end
|
@@ -376,16 +385,6 @@ module FancyGets
|
|
376
385
|
print "\b#{string[position..-1]}#{write_sugg.call}"
|
377
386
|
end
|
378
387
|
end
|
379
|
-
when 126 # Delete (forwards)
|
380
|
-
if !is_list && position < string.length
|
381
|
-
string = string[0...position] + string[position + 1..-1]
|
382
|
-
if words.empty?
|
383
|
-
print "#{is_password ? "*" * (string.length - position) : string[position..-1]} #{"\b" * (string.length - position + 1)}"
|
384
|
-
else
|
385
|
-
prev_sugg = sugg
|
386
|
-
print "#{string[position..-1]}#{write_sugg.call}"
|
387
|
-
end
|
388
|
-
end
|
389
388
|
else # Insert character
|
390
389
|
if is_list
|
391
390
|
case ch
|
@@ -407,7 +406,7 @@ module FancyGets
|
|
407
406
|
if response.is_a? Hash
|
408
407
|
is_rejected = response[:is_rejected]
|
409
408
|
# If they told us exactly what the choices should now be, make that happen
|
410
|
-
if
|
409
|
+
if response && response[:chosen].is_a?(Enumerable)
|
411
410
|
chosen = response[:chosen].map {|choice| word_objects.index(choice)}
|
412
411
|
is_rejected = true
|
413
412
|
end
|
@@ -415,9 +414,7 @@ module FancyGets
|
|
415
414
|
elsif response.is_a? String
|
416
415
|
new_info = response
|
417
416
|
end
|
418
|
-
|
419
|
-
write_info.call(new_info)
|
420
|
-
end
|
417
|
+
write_info.call(new_info) if new_info
|
421
418
|
end
|
422
419
|
unless is_rejected
|
423
420
|
if does_include
|
data/lib/fancy_gets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fancy_gets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,7 +85,7 @@ licenses:
|
|
85
85
|
- MIT
|
86
86
|
metadata:
|
87
87
|
allowed_push_host: https://rubygems.org
|
88
|
-
post_install_message:
|
88
|
+
post_install_message:
|
89
89
|
rdoc_options: []
|
90
90
|
require_paths:
|
91
91
|
- lib
|
@@ -100,9 +100,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
|
-
|
104
|
-
|
105
|
-
signing_key:
|
103
|
+
rubygems_version: 3.2.3
|
104
|
+
signing_key:
|
106
105
|
specification_version: 4
|
107
106
|
summary: Enhanced gets with listbox, auto-complete, and password support
|
108
107
|
test_files: []
|