prompt 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,10 @@
2
2
 
3
3
  This is updated when a new version is pushed to http://rubygems.org
4
4
 
5
+ ## 1.0.0 (Apr 10, 2012)
6
+
7
+ * Display suggestions when command is not found
8
+
5
9
  ## 0.2.0 (Mar 17, 2012)
6
10
 
7
11
  * Exit immediately on Ctrl-C
@@ -38,6 +38,10 @@ module Prompt
38
38
  all_completions(args[0,last_idx], word_starting_with)
39
39
  end
40
40
 
41
+ def commands
42
+ @command_groups.map(&:commands).flatten(1)
43
+ end
44
+
41
45
  private
42
46
 
43
47
  def index_of_last_word line
@@ -54,10 +58,6 @@ module Prompt
54
58
  end
55
59
  end
56
60
 
57
- def commands
58
- @command_groups.map(&:commands).flatten(1)
59
- end
60
-
61
61
  def all_completions(args, partial_arg)
62
62
  commands.select { |c| c.could_match? args }.map do |c|
63
63
  c.completions(args.length, partial_arg)
@@ -15,13 +15,17 @@ module Prompt
15
15
  def self.start(history_file = nil)
16
16
  # Store the state of the terminal
17
17
  stty_save = `stty -g`.chomp
18
- # and restore it when exiting
18
+ # ...and restore it when exiting
19
19
  at_exit do
20
20
  system('stty', stty_save)
21
21
  save_history history_file if history_file
22
22
  end
23
23
 
24
- trap('INT') { puts; exit }
24
+ # Exit immediately on Ctrl-C
25
+ trap('INT') do
26
+ puts
27
+ exit
28
+ end
25
29
 
26
30
  Readline.completion_proc = CompletionProc
27
31
 
@@ -33,7 +37,7 @@ module Prompt
33
37
  next if words == []
34
38
  Prompt.application.exec words
35
39
  rescue CommandNotFound
36
- STDERR.puts "Command not found: #{line}"
40
+ command_not_found line
37
41
  end
38
42
  end
39
43
  end
@@ -55,6 +59,19 @@ module Prompt
55
59
  end
56
60
  end
57
61
 
62
+ def self.command_not_found line
63
+ words = self.split line
64
+ suggestions = Prompt.application.commands.select { |cmd| cmd.could_match? words }
65
+ if suggestions.empty?
66
+ puts "Command not found"
67
+ else
68
+ puts "Command not found. Did you mean one of these?"
69
+ suggestions.each do |cmd|
70
+ puts " #{cmd.usage}"
71
+ end
72
+ end
73
+ end
74
+
58
75
  private
59
76
 
60
77
  S_QUOTED_ARG = /'([^']*)'/
@@ -1,5 +1,5 @@
1
1
  module Prompt
2
- VERSION = "0.2.0"
2
+ VERSION = "1.0.0"
3
3
 
4
4
  class << self
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prompt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-17 00:00:00.000000000 Z
12
+ date: 2012-04-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Prompt makes it easy to build slick command-line applications with Tab
15
- Completion, Command History, and Built-in Help
14
+ description: Prompt makes it easy to build slick command-line applications with tab
15
+ completion, command history, and built-in help
16
16
  email: mike@sticknet.net
17
17
  executables: []
18
18
  extensions: []
@@ -64,5 +64,5 @@ rubyforge_project:
64
64
  rubygems_version: 1.8.11
65
65
  signing_key:
66
66
  specification_version: 3
67
- summary: A small framework that makes it easy to build slick command-line applications
67
+ summary: A micro framework that makes it easy to build slick command-line applications
68
68
  test_files: []