prompt 1.1.0 → 1.2.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.
- data/CHANGELOG.md +9 -0
- data/README.md +36 -12
- data/examples/file_manager +12 -6
- data/examples/mud +6 -3
- data/lib/prompt/application.rb +1 -1
- data/lib/prompt/dsl.rb +9 -1
- data/lib/prompt/parameter.rb +3 -2
- data/lib/prompt/prompt_module.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,15 @@
|
|
2
2
|
|
3
3
|
This is updated when a new version is pushed to http://rubygems.org
|
4
4
|
|
5
|
+
## 1.2.0 (Apr 21, 2012)
|
6
|
+
|
7
|
+
* DSL change: Command descriptions can be provided using `desc`. You can still
|
8
|
+
pass the description as an argument to `command`, but will be deprecated
|
9
|
+
in a future version. (thanks @kowsik)
|
10
|
+
* Partially-typed strings are now passed when calling a parameter's block. You
|
11
|
+
can use this to more efficiently build the list of completions. This is
|
12
|
+
especially useful for things like database queries or other remote API calls.
|
13
|
+
|
5
14
|
## 1.1.0 (Apr 18, 2012)
|
6
15
|
|
7
16
|
* Format help command so that descriptions are always aligned
|
data/README.md
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# Prompt
|
2
|
-
|
3
1
|
## What is this?
|
4
2
|
|
5
3
|
Prompt makes it easy to build slick command-line applications with Tab Completion, Command History, and Built-in Help
|
@@ -8,7 +6,7 @@ Prompt makes it easy to build slick command-line applications with Tab Completio
|
|
8
6
|
|
9
7
|
gem install prompt
|
10
8
|
|
11
|
-
##
|
9
|
+
## Overview
|
12
10
|
|
13
11
|
Commands are defined with a Sinatra-inspired DSL:
|
14
12
|
|
@@ -20,17 +18,20 @@ group "Move"
|
|
20
18
|
|
21
19
|
param :direction, "A cardinal direction", %w(north east south west)
|
22
20
|
|
23
|
-
|
21
|
+
desc "Walk in the specified direction"
|
22
|
+
command "go :direction" do |direction|
|
24
23
|
puts "You walked #{direction} and were eaten by a grue."
|
25
24
|
end
|
26
25
|
|
27
26
|
group "Interact"
|
28
27
|
|
29
|
-
|
28
|
+
desc "Look around"
|
29
|
+
command "look" do
|
30
30
|
puts "You're in a dark room."
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
desc "Say something"
|
34
|
+
command "say :something" do |something|
|
34
35
|
puts "You say '#{something}'"
|
35
36
|
end
|
36
37
|
|
@@ -68,18 +69,31 @@ The `help` command is built-in. It will print all of the commands that you've d
|
|
68
69
|
> help
|
69
70
|
Console commands
|
70
71
|
|
71
|
-
help
|
72
|
-
help -v
|
73
|
-
exit
|
72
|
+
help List all commands
|
73
|
+
help -v List all commands, including parameters
|
74
|
+
exit Exit the console
|
74
75
|
|
75
76
|
Move
|
76
77
|
|
77
|
-
go <direction>
|
78
|
+
go <direction> Walk in the specified direction
|
78
79
|
|
79
80
|
Interact
|
80
81
|
|
81
|
-
look
|
82
|
-
say <something>
|
82
|
+
look Look around
|
83
|
+
say <something> Say something
|
84
|
+
|
85
|
+
## Describing commands
|
86
|
+
|
87
|
+
You can provide a description for a command before defining it. Descriptions
|
88
|
+
are displayed next to each comand in the built-in help.
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
desc "Look around"
|
92
|
+
command "look" do
|
93
|
+
...
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
83
97
|
|
84
98
|
## Grouping commands
|
85
99
|
|
@@ -141,6 +155,16 @@ param :file, "JPG file" do
|
|
141
155
|
end
|
142
156
|
```
|
143
157
|
|
158
|
+
A dynamic parameter's block may optionally take the partially-typed word as
|
159
|
+
a parameter, to further limit the completions.
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
param :username do |starting_with|
|
163
|
+
# slow DB query
|
164
|
+
User.where("username LIKE '?%'", starting_with).map(&:username)
|
165
|
+
end
|
166
|
+
```
|
167
|
+
|
144
168
|
## Configuration options
|
145
169
|
|
146
170
|
The default prompt `"> "` can be changed before starting the console, or while it's running.
|
data/examples/file_manager
CHANGED
@@ -11,18 +11,21 @@ end
|
|
11
11
|
@pwd = File.expand_path Dir.pwd
|
12
12
|
change_prompt @pwd
|
13
13
|
|
14
|
-
|
14
|
+
desc "Directory"
|
15
|
+
param :dir do
|
15
16
|
Dir.entries(@pwd).select do |e|
|
16
17
|
File.directory?(File.join(@pwd, e))
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
+
desc "Change directory"
|
22
|
+
command "cd :dir" do |dir|
|
21
23
|
@pwd = File.expand_path File.join(@pwd, dir)
|
22
24
|
change_prompt @pwd
|
23
25
|
end
|
24
26
|
|
25
|
-
|
27
|
+
desc "List files"
|
28
|
+
command "ls" do
|
26
29
|
puts @pwd
|
27
30
|
Dir.entries(@pwd).select do |e|
|
28
31
|
path = File.join(@pwd, e)
|
@@ -34,17 +37,20 @@ command "ls", "List files" do
|
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
|
-
|
40
|
+
desc "Print current directory"
|
41
|
+
command "pwd" do
|
38
42
|
puts @pwd
|
39
43
|
end
|
40
44
|
|
41
|
-
|
45
|
+
desc "File"
|
46
|
+
param :file do
|
42
47
|
Dir.entries(@pwd).select do |e|
|
43
48
|
File.file?(File.join(@pwd, e))
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
|
-
|
52
|
+
desc "Copy one or more files to dest"
|
53
|
+
command "cp *file :dir" do |files, dir|
|
48
54
|
puts "Copying #{files.length} file(s) to #{dir}"
|
49
55
|
# doesn't actually do it...
|
50
56
|
end
|
data/examples/mud
CHANGED
@@ -11,7 +11,8 @@ group "Move"
|
|
11
11
|
|
12
12
|
param :direction, "A cardinal direction", %w(north east south west)
|
13
13
|
|
14
|
-
|
14
|
+
desc "Walk in the specified direction"
|
15
|
+
command "go :direction" do |direction|
|
15
16
|
puts "You walked #{direction}"
|
16
17
|
@moves += 1
|
17
18
|
if @moves > GRUE
|
@@ -22,7 +23,8 @@ end
|
|
22
23
|
|
23
24
|
group "Interact"
|
24
25
|
|
25
|
-
|
26
|
+
desc "Look around"
|
27
|
+
command "look" do
|
26
28
|
if @moves < GRUE
|
27
29
|
puts "You're in a nice, well-lit room"
|
28
30
|
else
|
@@ -30,7 +32,8 @@ command "look", "Look around" do
|
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
33
|
-
|
35
|
+
desc "Say something"
|
36
|
+
command "say *something" do |something|
|
34
37
|
puts "You say '#{something.join(" ")}'"
|
35
38
|
end
|
36
39
|
|
data/lib/prompt/application.rb
CHANGED
data/lib/prompt/dsl.rb
CHANGED
@@ -12,18 +12,26 @@ module Prompt
|
|
12
12
|
end
|
13
13
|
Prompt.application.select_group(name)
|
14
14
|
end
|
15
|
+
|
16
|
+
def desc text
|
17
|
+
@@last_desc = text
|
18
|
+
end
|
15
19
|
|
16
20
|
def group desc
|
17
21
|
Prompt.application.select_group(desc)
|
18
22
|
end
|
19
23
|
|
20
24
|
def command(name, desc = nil, &block)
|
25
|
+
desc ||= @@last_desc
|
26
|
+
@@last_desc = nil
|
21
27
|
words = DSLHelper.words(name, @parameters || [])
|
22
28
|
command = Command.new(words, desc, &block)
|
23
29
|
Prompt.application.add_command(command)
|
24
30
|
end
|
25
31
|
|
26
|
-
def param(name, desc, values = nil, &block)
|
32
|
+
def param(name, desc = nil, values = nil, &block)
|
33
|
+
desc ||= @@last_desc
|
34
|
+
@@last_desc = nil
|
27
35
|
@parameters = [] unless defined? @parameters
|
28
36
|
raise "parameter :#{name} is already defined" if @parameters.find {|v| v.name == name}
|
29
37
|
@parameters << if block
|
data/lib/prompt/parameter.rb
CHANGED
@@ -9,15 +9,16 @@ module Prompt
|
|
9
9
|
@desc = desc
|
10
10
|
@values = values || []
|
11
11
|
@proc = block if block_given?
|
12
|
+
@cached_values = {}
|
12
13
|
end
|
13
14
|
|
14
15
|
def clear_cached_values
|
15
|
-
@cached_values =
|
16
|
+
@cached_values = {}
|
16
17
|
end
|
17
18
|
|
18
19
|
def completions(starting_with = "")
|
19
20
|
all = if @proc
|
20
|
-
@cached_values ||= @proc.call
|
21
|
+
@cached_values[starting_with] ||= @proc.call(starting_with)
|
21
22
|
else
|
22
23
|
@values
|
23
24
|
end
|
data/lib/prompt/prompt_module.rb
CHANGED
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: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-21 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Prompt makes it easy to build slick command-line applications with tab
|
15
15
|
completion, command history, and built-in help
|