ppl 1.17.2 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ppl/application/bootstrap.rb +9 -0
- data/lib/ppl/application/shell.rb +2 -0
- data/lib/ppl/command/completion.rb +37 -0
- data/lib/ppl/error/completion_not_found.rb +4 -0
- data/lib/ppl.rb +3 -1
- data/ppl.gemspec +2 -2
- data/spec/ppl/application/bootstrap_spec.rb +17 -0
- data/spec/ppl/application/shell_spec.rb +8 -0
- data/spec/ppl/command/completion_spec.rb +47 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a9d02380f3d44f146c22dd0e466d98ae56ac97d
|
4
|
+
data.tar.gz: e85bf61f41a01927c72450f761563ad9669c5fdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f325d2c01e00c070edac9f3c6066185bf13bb20c7c25f1c659534485a833e28b7b5b6c7a25b42fe016f33b417800df2567a7ae591b8736a49027cc1cdada069
|
7
|
+
data.tar.gz: a388cc2f1f2af9c50afa01da54ac54994c9d2b25f290a75e07bc041b8f9c4051c27697fc997bdaec46d2739c920d7d610eeb814261610c90525ac1e30b1c9cca
|
@@ -27,6 +27,14 @@ class Ppl::Application::Bootstrap
|
|
27
27
|
bday
|
28
28
|
end
|
29
29
|
|
30
|
+
register :command_completion do
|
31
|
+
completion = Ppl::Command::Completion.new
|
32
|
+
directory = File.dirname(File.dirname(File.dirname(File.dirname(__FILE__))))
|
33
|
+
directory = File.join(directory, "completions")
|
34
|
+
completion.completions_directory = Dir.new(directory)
|
35
|
+
completion
|
36
|
+
end
|
37
|
+
|
30
38
|
register :command_email do
|
31
39
|
email = Ppl::Command::Email.new
|
32
40
|
email.storage = storage_adapter
|
@@ -162,6 +170,7 @@ class Ppl::Application::Bootstrap
|
|
162
170
|
suite.add_command command_add
|
163
171
|
suite.add_command command_age
|
164
172
|
suite.add_command command_bday
|
173
|
+
suite.add_command command_completion
|
165
174
|
suite.add_command command_email
|
166
175
|
suite.add_command command_help
|
167
176
|
suite.add_command command_init
|
@@ -11,6 +11,8 @@ class Ppl::Application::Shell
|
|
11
11
|
command = select_command(input)
|
12
12
|
prepare_command(command, input)
|
13
13
|
outcome = execute_command(command, input, output)
|
14
|
+
rescue Ppl::Error::CompletionNotFound
|
15
|
+
output.error("ppl: No completion function available for '#{$!}'")
|
14
16
|
rescue Ppl::Error::ContactNotFound
|
15
17
|
output.error("ppl: Contact '#{$!}' not found")
|
16
18
|
rescue OptionParser::InvalidOption, OptionParser::MissingArgument, Ppl::Error::IncorrectUsage
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
class Ppl::Command::Completion < Ppl::Application::Command
|
3
|
+
|
4
|
+
name "completion"
|
5
|
+
description "Output shell completion function"
|
6
|
+
|
7
|
+
attr_writer :completions_directory
|
8
|
+
|
9
|
+
def options(parser, options)
|
10
|
+
parser.banner = "usage: ppl completion <shell>"
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute(input, output)
|
14
|
+
shell_name = require_shell_name(input)
|
15
|
+
location = require_completion_existence(shell_name)
|
16
|
+
output.line(File.read(location))
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def require_shell_name(input)
|
22
|
+
if input.arguments.first.nil?
|
23
|
+
raise Ppl::Error::IncorrectUsage, "No shell specified"
|
24
|
+
end
|
25
|
+
input.arguments.shift
|
26
|
+
end
|
27
|
+
|
28
|
+
def require_completion_existence(shell_name)
|
29
|
+
path = File.join(@completions_directory.path, shell_name)
|
30
|
+
if !File.exists? path
|
31
|
+
raise Ppl::Error::CompletionNotFound, shell_name
|
32
|
+
end
|
33
|
+
path
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
data/lib/ppl.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module Ppl
|
3
3
|
|
4
|
-
Version = "1.
|
4
|
+
Version = "1.18.0"
|
5
5
|
|
6
6
|
module Adapter
|
7
7
|
end
|
@@ -63,11 +63,13 @@ require "ppl/command/shell"
|
|
63
63
|
require "ppl/command/url"
|
64
64
|
require "ppl/command/version"
|
65
65
|
require "ppl/command/external"
|
66
|
+
require "ppl/command/completion"
|
66
67
|
|
67
68
|
require "ppl/entity/address_book"
|
68
69
|
require "ppl/entity/contact"
|
69
70
|
require "ppl/entity/postal_address"
|
70
71
|
|
72
|
+
require "ppl/error/completion_not_found"
|
71
73
|
require "ppl/error/contact_not_found"
|
72
74
|
require "ppl/error/incorrect_usage"
|
73
75
|
|
data/ppl.gemspec
CHANGED
@@ -23,6 +23,20 @@ describe Ppl::Application::Bootstrap do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe "#command_completion" do
|
27
|
+
it "should return a Ppl::Command::Completion" do
|
28
|
+
@bootstrap.command_completion.should be_a(Ppl::Command::Completion)
|
29
|
+
end
|
30
|
+
it "should inject a completions directory" do
|
31
|
+
Ppl::Command::Completion.stub(:new) do
|
32
|
+
completion = double(Ppl::Command::Completion)
|
33
|
+
completion.should_receive(:completions_directory=)
|
34
|
+
completion
|
35
|
+
end
|
36
|
+
@bootstrap.command_completion
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
26
40
|
describe "#command_email" do
|
27
41
|
it "should return a Ppl::Command::Email" do
|
28
42
|
@bootstrap.command_email.should be_a(Ppl::Command::Email)
|
@@ -405,6 +419,9 @@ describe Ppl::Application::Bootstrap do
|
|
405
419
|
it "should contain the 'bday' command" do
|
406
420
|
@bootstrap.command_suite.find_command("bday").should_not be nil
|
407
421
|
end
|
422
|
+
it "should contain the 'completion' command" do
|
423
|
+
@bootstrap.command_suite.find_command("completion").should_not be nil
|
424
|
+
end
|
408
425
|
it "should contain the 'email' command" do
|
409
426
|
@bootstrap.command_suite.find_command("email").should_not be nil
|
410
427
|
end
|
@@ -91,6 +91,14 @@ describe Ppl::Application::Shell do
|
|
91
91
|
@shell.run(@input, @output)
|
92
92
|
end
|
93
93
|
|
94
|
+
it "should handle CompletionNotFound errors nicely" do
|
95
|
+
@command.stub(:options)
|
96
|
+
@command.should_receive(:execute) { raise Ppl::Error::CompletionNotFound, "example" }
|
97
|
+
@router.should_receive(:route).and_return(@command)
|
98
|
+
@output.should_receive(:error).with("ppl: No completion function available for 'example'")
|
99
|
+
@shell.run(@input, @output)
|
100
|
+
end
|
101
|
+
|
94
102
|
end
|
95
103
|
|
96
104
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
describe Ppl::Command::Completion do
|
3
|
+
|
4
|
+
before(:each) do
|
5
|
+
@command = Ppl::Command::Completion.new
|
6
|
+
@input = Ppl::Application::Input.new
|
7
|
+
@output = double(Ppl::Application::Output)
|
8
|
+
@directory = double(Dir)
|
9
|
+
@command.completions_directory = @directory
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#name" do
|
13
|
+
it "should be 'completion'" do
|
14
|
+
@command.name.should eq "completion"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#execute" do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@directory.stub(:path).and_return("")
|
22
|
+
File.stub(:exists?).and_return(true)
|
23
|
+
File.stub(:read)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should raise an error if no shell is specified" do
|
27
|
+
@input.arguments = []
|
28
|
+
expect{@command.execute(@input, @output)}.to raise_error(Ppl::Error::IncorrectUsage)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should raise an error if the shell is not recognised" do
|
32
|
+
@input.arguments = ["invalidshell"]
|
33
|
+
File.should_receive(:exists?).with("/invalidshell").and_return(false)
|
34
|
+
expect{@command.execute(@input, @output)}.to raise_error(Ppl::Error::CompletionNotFound)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should read the function from disk and print it to stdout" do
|
38
|
+
@input.arguments = ["zsh"]
|
39
|
+
File.should_receive(:read).and_return("completion function")
|
40
|
+
@output.should_receive(:line).with("completion function")
|
41
|
+
@command.execute(@input, @output)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ppl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henry Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|
@@ -177,6 +177,7 @@ files:
|
|
177
177
|
- lib/ppl/command/age.rb
|
178
178
|
- lib/ppl/command/attribute.rb
|
179
179
|
- lib/ppl/command/bday.rb
|
180
|
+
- lib/ppl/command/completion.rb
|
180
181
|
- lib/ppl/command/email.rb
|
181
182
|
- lib/ppl/command/external.rb
|
182
183
|
- lib/ppl/command/help.rb
|
@@ -197,6 +198,7 @@ files:
|
|
197
198
|
- lib/ppl/entity/address_book.rb
|
198
199
|
- lib/ppl/entity/contact.rb
|
199
200
|
- lib/ppl/entity/postal_address.rb
|
201
|
+
- lib/ppl/error/completion_not_found.rb
|
200
202
|
- lib/ppl/error/contact_not_found.rb
|
201
203
|
- lib/ppl/error/incorrect_usage.rb
|
202
204
|
- lib/ppl/format/address_book.rb
|
@@ -246,6 +248,7 @@ files:
|
|
246
248
|
- spec/ppl/command/age_spec.rb
|
247
249
|
- spec/ppl/command/attribute_spec.rb
|
248
250
|
- spec/ppl/command/bday_spec.rb
|
251
|
+
- spec/ppl/command/completion_spec.rb
|
249
252
|
- spec/ppl/command/email_spec.rb
|
250
253
|
- spec/ppl/command/external_spec.rb
|
251
254
|
- spec/ppl/command/help_spec.rb
|