interact 0.4.3 → 0.4.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.
- data/lib/interact/interactive.rb +40 -5
- data/lib/interact/version.rb +1 -1
- metadata +4 -4
data/lib/interact/interactive.rb
CHANGED
@@ -245,15 +245,22 @@ module Interactive
|
|
245
245
|
[true, options[:default]]
|
246
246
|
end
|
247
247
|
elsif choices = options[:choices]
|
248
|
-
matches = choices.select { |x|
|
248
|
+
matches = choices.select { |x|
|
249
|
+
choice_completion(x, options).start_with? ans
|
250
|
+
}
|
249
251
|
|
250
252
|
if matches.size == 1
|
251
253
|
[true, matches.first]
|
252
254
|
elsif choices and ans =~ /^\s*\d+\s*$/ and \
|
253
|
-
res = choices.to_a[ans.to_i - 1]
|
255
|
+
ans.to_i - 1 >= 0 and res = choices.to_a[ans.to_i - 1]
|
254
256
|
[true, res]
|
255
257
|
elsif matches.size > 1
|
256
|
-
|
258
|
+
matches_list = matches.collect { |m|
|
259
|
+
show_choice(m, options)
|
260
|
+
}.join " or "
|
261
|
+
|
262
|
+
puts "Please disambiguate: #{matches_list}?"
|
263
|
+
|
257
264
|
[false, nil]
|
258
265
|
else
|
259
266
|
puts "Unknown answer, please try again!"
|
@@ -268,8 +275,30 @@ module Interactive
|
|
268
275
|
return unless options[:indexed]
|
269
276
|
|
270
277
|
choices.each_with_index do |o, i|
|
271
|
-
puts "#{i + 1}: #{o}"
|
278
|
+
puts "#{i + 1}: #{show_choice(o, options)}"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def show_choice(choice, options = {})
|
283
|
+
display = options[:display] || proc(&:to_s)
|
284
|
+
display.call(choice)
|
285
|
+
end
|
286
|
+
|
287
|
+
def choice_completion(choice, options = {})
|
288
|
+
complete = options[:complete] || options[:display] || proc(&:to_s)
|
289
|
+
complete.call(choice)
|
290
|
+
end
|
291
|
+
|
292
|
+
def common_prefix(*strs)
|
293
|
+
longest = strs.sort_by(&:size).last
|
294
|
+
longest.size.times do |i|
|
295
|
+
sub = longest[0..(-1 - i)]
|
296
|
+
if strs.all? { |s| s.start_with?(sub) }
|
297
|
+
return sub
|
298
|
+
end
|
272
299
|
end
|
300
|
+
|
301
|
+
""
|
273
302
|
end
|
274
303
|
|
275
304
|
def handler(which, state)
|
@@ -286,7 +315,11 @@ module Interactive
|
|
286
315
|
when :tab
|
287
316
|
matches =
|
288
317
|
if choices = state.options[:choices]
|
289
|
-
choices.
|
318
|
+
choices.collect { |c|
|
319
|
+
choice_completion(c, state.options)
|
320
|
+
}.select { |c|
|
321
|
+
c.start_with? ans
|
322
|
+
}
|
290
323
|
else
|
291
324
|
matching_paths(ans)
|
292
325
|
end
|
@@ -295,6 +328,8 @@ module Interactive
|
|
295
328
|
ans = state.answer = matches[0].dup
|
296
329
|
state.display(ans[pos .. -1])
|
297
330
|
else
|
331
|
+
ans = state.answer = common_prefix(*matches)
|
332
|
+
state.display(ans[pos .. -1])
|
298
333
|
print("\a") # bell
|
299
334
|
end
|
300
335
|
|
data/lib/interact/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interact
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 4
|
10
|
+
version: 0.4.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Suraci
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-07-14 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rake
|