cli-console 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cli-console.gemspec +1 -0
- data/lib/cli-console.rb +37 -21
- data/lib/cli-console/version.rb +1 -1
- data/spec/cli-console_spec.rb +66 -10
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff85b32926069f72276b38416a049e475ed749f8
|
4
|
+
data.tar.gz: ad1350a5d8fd0dcd079bae9b3c3953c083d797b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5067a9e8d9b11a595d1406e1f8c1e7c131e5c01102e8dfad2330e1402f7f921ecf4ecf1925b6ef036704a0a802e80baf4c82717f8232f04d7bdd53d09c68b88
|
7
|
+
data.tar.gz: 6e35101ccded3b310cdb9525deb6cc6b1277c52d7018161b7554b87d640cea377823ba280877dbc29f446d651d06f9132de965ec95f88e4c4e92d2c6ecc4e093
|
data/cli-console.gemspec
CHANGED
data/lib/cli-console.rb
CHANGED
@@ -55,7 +55,7 @@ module CLI
|
|
55
55
|
# @param commandLongDescription [String] long description about command
|
56
56
|
# @param commandUsage [String] usage information about command
|
57
57
|
# @return [Array] command information
|
58
|
-
def addCommand(commandName, command, commandDescription='', commandLongDescription = nil, commandUsage = nil)
|
58
|
+
def addCommand(commandName, command, commandDescription = '', commandLongDescription = nil, commandUsage = nil)
|
59
59
|
commandLongDescription = command.owner.get_description(command.name) if commandLongDescription == nil
|
60
60
|
commandUsage = command.owner.get_usage(command.name) if commandUsage == nil
|
61
61
|
@Commands[commandName] = [command, commandDescription, commandLongDescription, commandUsage]
|
@@ -67,7 +67,7 @@ module CLI
|
|
67
67
|
# @param commandLongDescription [String] long description about command
|
68
68
|
# @param commandUsage [String] usage information about command
|
69
69
|
# @return [Array] command information
|
70
|
-
def addExitCommand(commandName, commandDescription='', commandLongDescription = nil, commandUsage = nil)
|
70
|
+
def addExitCommand(commandName, commandDescription = '', commandLongDescription = nil, commandUsage = nil)
|
71
71
|
commandLongDescription = 'Exit...' unless commandLongDescription
|
72
72
|
commandUsage = ['exit'] unless commandUsage
|
73
73
|
@Commands[commandName] = [method(:end), commandDescription, commandLongDescription, commandUsage]
|
@@ -79,7 +79,7 @@ module CLI
|
|
79
79
|
# @param commandLongDescription [String] long description about command
|
80
80
|
# @param commandUsage [String] usage information about command
|
81
81
|
# @return [Array] command information
|
82
|
-
def addHelpCommand(commandName, commandDescription='', commandLongDescription = nil, commandUsage = nil)
|
82
|
+
def addHelpCommand(commandName, commandDescription = '', commandLongDescription = nil, commandUsage = nil)
|
83
83
|
commandLongDescription = 'Display Help for <command>' unless commandLongDescription
|
84
84
|
commandUsage = ['help <command>'] unless commandUsage
|
85
85
|
@Commands[commandName] = [method(:help), commandDescription, commandLongDescription, commandUsage]
|
@@ -92,7 +92,7 @@ module CLI
|
|
92
92
|
# @param commandLongDescription [String] long description about alias
|
93
93
|
# @param commandUsage [String] usage information about alias
|
94
94
|
# @return [Array] alias information
|
95
|
-
def addAlias(aliasName, commandNameParms, commandDescription=nil, commandLongDescription = nil, commandUsage = nil)
|
95
|
+
def addAlias(aliasName, commandNameParms, commandDescription = nil, commandLongDescription = nil, commandUsage = nil)
|
96
96
|
@Aliases[aliasName] = [commandNameParms, commandDescription, commandLongDescription, commandUsage]
|
97
97
|
end
|
98
98
|
|
@@ -104,7 +104,7 @@ module CLI
|
|
104
104
|
h.whitespace = :strip_and_collapse
|
105
105
|
h.validate = nil
|
106
106
|
h.readline = @UseReadline
|
107
|
-
h.completion = @Commands.keys
|
107
|
+
h.completion = @Commands.keys + @Aliases.keys
|
108
108
|
end
|
109
109
|
@LastCommand = '' if (not @LastCommand.to_s.empty? and @LastCommand[0] == '#')
|
110
110
|
return @LastCommand
|
@@ -128,23 +128,39 @@ module CLI
|
|
128
128
|
matches.each do |value|
|
129
129
|
text = value[0].to_s
|
130
130
|
text += ' - '+value[1][1].to_s unless value[1][1].to_s.empty?
|
131
|
-
@IO.indent(1, text
|
131
|
+
@IO.indent(1, text)
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
# Parses commandString into Array of words
|
136
|
+
# @param commandString [String]
|
137
|
+
# @return [Array] command words
|
138
|
+
def self.parseCommandString(commandString)
|
139
|
+
commandWords = []
|
140
|
+
return commandWords unless commandString
|
141
|
+
|
142
|
+
pattern = %r{
|
143
|
+
(?<command> [^\s"']+ ){0}
|
144
|
+
(?<exceptDoubleQuotes> [^"\\]*(?:\\.[^"\\]*)* ){0}
|
145
|
+
(?<exceptSingleQuotes> [^'\\]*(?:\\.[^'\\]*)* ){0}
|
146
|
+
\g<command>|"\g<exceptDoubleQuotes>"|'\g<exceptSingleQuotes>'
|
147
|
+
}x
|
148
|
+
|
149
|
+
commandString.scan(pattern) do |m|
|
150
|
+
commandWords << m[0] unless m[0].nil?
|
151
|
+
commandWords << m[1].gsub('\"','"') unless m[1].nil?
|
152
|
+
commandWords << m[2].gsub('\\\'','\'') unless m[2].nil?
|
153
|
+
end
|
154
|
+
commandWords
|
155
|
+
end
|
156
|
+
|
135
157
|
# Executes command with parameters
|
136
158
|
# @param commandString [String]
|
137
159
|
# @return command result or error number
|
138
160
|
def processCommand(commandString)
|
139
161
|
return 0 if commandString.to_s.empty?
|
140
|
-
commandWords =
|
141
|
-
commandString.scan(/([^\s"']+)|"([^"]*)"|'([^']*)'/) do |m|
|
142
|
-
commandWords << m[0] unless m[0].nil?
|
143
|
-
commandWords << m[1] unless m[1].nil?
|
144
|
-
commandWords << m[2] unless m[2].nil?
|
145
|
-
end
|
162
|
+
commandWords = Console::parseCommandString(commandString)
|
146
163
|
command = commandWords.shift.downcase
|
147
|
-
|
148
164
|
if (not @Commands.key?(command) and not @Aliases.key?(command))
|
149
165
|
matches = commandMatch(command)
|
150
166
|
if matches.length == 1
|
@@ -195,13 +211,13 @@ module CLI
|
|
195
211
|
end
|
196
212
|
end
|
197
213
|
command = getCommand( formatString % currentValues )
|
198
|
-
@IO.indent_level+=1
|
214
|
+
@IO.indent_level += 1
|
199
215
|
result = processCommand(command)
|
200
|
-
@IO.indent_level-=1
|
216
|
+
@IO.indent_level -= 1
|
201
217
|
return 0 if result == @ExitCode
|
202
218
|
rescue Exception => e
|
203
219
|
showException(e)
|
204
|
-
@IO.indent_level=indent_level
|
220
|
+
@IO.indent_level = indent_level
|
205
221
|
end
|
206
222
|
end
|
207
223
|
-1
|
@@ -209,7 +225,7 @@ module CLI
|
|
209
225
|
|
210
226
|
# Displays seperator line
|
211
227
|
def printSeperator
|
212
|
-
@IO.say(@Seperator
|
228
|
+
@IO.say(@Seperator * @SepCount)
|
213
229
|
end
|
214
230
|
|
215
231
|
# Displays help about command
|
@@ -219,7 +235,7 @@ module CLI
|
|
219
235
|
printSeperator
|
220
236
|
if not @Commands[command][3].to_a.empty?
|
221
237
|
@IO.indent do |io|
|
222
|
-
@Commands[command][3].each { |c| io.say c}
|
238
|
+
@Commands[command][3].each { |c| io.say c }
|
223
239
|
io.newline
|
224
240
|
end
|
225
241
|
end
|
@@ -235,13 +251,13 @@ module CLI
|
|
235
251
|
|
236
252
|
# Shows message to inform how to get more information about command
|
237
253
|
# @param helpCommand [String] command for which display message
|
238
|
-
def command_usage(helpCommand='help')
|
254
|
+
def command_usage(helpCommand = 'help')
|
239
255
|
@IO.say("You can type \"#{helpCommand} <command>\" for more info")
|
240
256
|
end
|
241
257
|
|
242
258
|
# Shows help information about command
|
243
259
|
# @param params [Array] command for which show help
|
244
|
-
def help(params=[])
|
260
|
+
def help(params = [])
|
245
261
|
if not params.to_a.empty?
|
246
262
|
command = params[0].downcase
|
247
263
|
if (not @Commands.key?(command) and not @Aliases.key?(command))
|
@@ -295,7 +311,7 @@ module CLI
|
|
295
311
|
|
296
312
|
# @param params [Array] unused
|
297
313
|
# @return [Fixnum]
|
298
|
-
def end(params=[])
|
314
|
+
def end(params = [])
|
299
315
|
@ExitCode
|
300
316
|
end
|
301
317
|
end
|
data/lib/cli-console/version.rb
CHANGED
data/spec/cli-console_spec.rb
CHANGED
@@ -30,6 +30,39 @@ describe CLI::Console do
|
|
30
30
|
console.addAlias('quit','exit')
|
31
31
|
end
|
32
32
|
|
33
|
+
describe '.parseCommandString' do
|
34
|
+
it 'should parse correctly simple command' do
|
35
|
+
CLI::Console::parseCommandString('command param1 param2').should eq(['command', 'param1', 'param2'])
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should parse command with double quotes' do
|
39
|
+
CLI::Console::parseCommandString('command "param1 extra" param2').should eq(['command', 'param1 extra', 'param2'])
|
40
|
+
CLI::Console::parseCommandString('command "param1" "param2 extra"').should eq(['command', 'param1', 'param2 extra'])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should parse command with single quotes' do
|
44
|
+
CLI::Console::parseCommandString('command \'param1 extra\' param2').should eq(['command', 'param1 extra', 'param2'])
|
45
|
+
CLI::Console::parseCommandString('command \'param1\' \'param2 extra\'').should eq(['command', 'param1', 'param2 extra'])
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should parse command with mixed quotes' do
|
49
|
+
CLI::Console::parseCommandString('command "param1 \'extra double\'" param2').should eq(['command', 'param1 \'extra double\'', 'param2'])
|
50
|
+
CLI::Console::parseCommandString('command "param1" "param2 \'double extra\'"').should eq(['command', 'param1', 'param2 \'double extra\''])
|
51
|
+
CLI::Console::parseCommandString('command \'param1 "extra double"\' param2').should eq(['command', 'param1 "extra double"', 'param2'])
|
52
|
+
CLI::Console::parseCommandString('command \'param1\' \'param2 "double extra"\'').should eq(['command', 'param1', 'param2 "double extra"'])
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should parse command with escaped quotes' do
|
56
|
+
CLI::Console::parseCommandString('command "param with \" quote"').should eq(['command', 'param with " quote'])
|
57
|
+
CLI::Console::parseCommandString('command \'param with \\\' quote\'').should eq(['command', 'param with \' quote'])
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should parse command with escaped quotes in quotes' do
|
61
|
+
CLI::Console::parseCommandString('command "param1 \'extra \"double double\"\'" param2').should eq(['command', 'param1 \'extra "double double"\'', 'param2'])
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
33
66
|
describe '#initialize' do
|
34
67
|
it 'should return cli-console instance' do
|
35
68
|
console.should be_kind_of(CLI::Console)
|
@@ -72,17 +105,40 @@ describe CLI::Console do
|
|
72
105
|
end
|
73
106
|
|
74
107
|
describe '#processCommand' do
|
75
|
-
|
108
|
+
before do
|
76
109
|
init
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
console.processCommand('
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
console.processCommand('
|
85
|
-
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should return zero' do
|
113
|
+
console.processCommand('').should eq(0)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should be ambiguous command' do
|
117
|
+
console.processCommand('tr').should eq(-3)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should throw exception' do
|
121
|
+
console.processCommand('try more').should eq(-1)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should quit' do
|
125
|
+
console.processCommand('q').should eq(console.ExitCode)
|
126
|
+
console.processCommand('quit').should eq(console.ExitCode)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should show help' do
|
130
|
+
console.processCommand('help').should be_nil
|
131
|
+
console.processCommand('help try').should be_nil
|
132
|
+
console.processCommand('help e').should be_nil
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'should show help for method and alias' do
|
136
|
+
console.processCommand('help tr').should be_kind_of(Array)
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should execute succesfully' do
|
140
|
+
console.processCommand('help not').should be_nil
|
141
|
+
|
86
142
|
end
|
87
143
|
end
|
88
144
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli-console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dāvis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: highline
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.6.16
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.6.16
|
69
83
|
description: Basic library for making interactive command-line applications much easier
|
70
84
|
email:
|
71
85
|
- davispuh@gmail.com
|
@@ -113,3 +127,4 @@ summary: Create CLI applications easily
|
|
113
127
|
test_files:
|
114
128
|
- spec/cli-console_spec.rb
|
115
129
|
- spec/spec_helper.rb
|
130
|
+
has_rdoc:
|