lightning 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +13 -0
- data/LICENSE.txt +22 -0
- data/README.rdoc +150 -0
- data/Rakefile +69 -0
- data/VERSION.yml +4 -0
- data/bin/lightning-complete +13 -0
- data/bin/lightning-full_path +18 -0
- data/bin/lightning-install +7 -0
- data/lib/lightning.rb +68 -0
- data/lib/lightning/bolt.rb +33 -0
- data/lib/lightning/bolts.rb +12 -0
- data/lib/lightning/commands.rb +92 -0
- data/lib/lightning/completion.rb +43 -0
- data/lib/lightning/completion_map.rb +59 -0
- data/lib/lightning/config.rb +72 -0
- data/lib/lightning/generator.rb +48 -0
- data/lightning.yml.example +87 -0
- data/lightning_completions.example +147 -0
- data/test/bolt_test.rb +36 -0
- data/test/completion_map_test.rb +58 -0
- data/test/completion_test.rb +49 -0
- data/test/config_test.rb +62 -0
- data/test/lightning.yml +39 -0
- data/test/lightning_test.rb +58 -0
- data/test/test_helper.rb +24 -0
- metadata +87 -0
data/test/bolt_test.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Lightning::BoltTest < Test::Unit::TestCase
|
4
|
+
context "Bolt" do
|
5
|
+
before(:each) do
|
6
|
+
@completion_map = {'path1'=>'/dir/path1','path2'=>'/dir/path2'}
|
7
|
+
@bolt = Lightning::Bolt.new('blah')
|
8
|
+
@bolt.completion_map.map = @completion_map
|
9
|
+
end
|
10
|
+
|
11
|
+
test "fetches correct completions" do
|
12
|
+
assert_equal @bolt.completions, @completion_map.keys
|
13
|
+
end
|
14
|
+
|
15
|
+
test "resolves completion" do
|
16
|
+
assert_equal @completion_map['path1'], @bolt.resolve_completion('path1')
|
17
|
+
end
|
18
|
+
|
19
|
+
test "resolves completion with test flag" do
|
20
|
+
assert_equal @completion_map['path1'], @bolt.resolve_completion('-test path1')
|
21
|
+
end
|
22
|
+
|
23
|
+
test "creates completion_map only once" do
|
24
|
+
assert_equal @bolt.completion_map.object_id, @bolt.completion_map.object_id
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
test "Bolt's completion_map sets up alias map with options" do
|
29
|
+
old_config = Lightning.config
|
30
|
+
Lightning.stub!(:current_command, :return=>'blah')
|
31
|
+
Lightning.config = {:aliases=>{'path1'=>'/dir1/path1'}, :commands=>[{'name'=>'blah'}], :paths=>{}}
|
32
|
+
@bolt = Lightning::Bolt.new('blah')
|
33
|
+
assert_equal({'path1'=>'/dir1/path1'}, @bolt.completion_map.alias_map)
|
34
|
+
Lightning.config = old_config
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Lightning::CompletionMapTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "CompletionMap" do
|
6
|
+
def create_map(path_hash, new_options={})
|
7
|
+
Dir.stub!(:glob) { path_hash.values }
|
8
|
+
@completion_map = Lightning::CompletionMap.new('blah', new_options)
|
9
|
+
end
|
10
|
+
|
11
|
+
test "creates basic map" do
|
12
|
+
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
13
|
+
create_map(expected_map)
|
14
|
+
assert_equal expected_map, @completion_map.map
|
15
|
+
end
|
16
|
+
|
17
|
+
test "ignores paths from Lightning.ignore_paths" do
|
18
|
+
Lightning.stub!(:ignore_paths, :return=>['path1'])
|
19
|
+
expected_map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
20
|
+
create_map(expected_map)
|
21
|
+
assert_equal expected_map.slice('path2'), @completion_map.map
|
22
|
+
end
|
23
|
+
|
24
|
+
test "creates map with duplicates" do
|
25
|
+
expected_map = {"path1//dir3"=>"/dir3/path1", "path2"=>"/dir1/path2", "path1//dir1"=>"/dir1/path1", "path1//dir2"=>"/dir2/path1"}
|
26
|
+
create_map(expected_map)
|
27
|
+
assert_equal expected_map, @completion_map.map
|
28
|
+
end
|
29
|
+
|
30
|
+
test "fetches correct path completion" do
|
31
|
+
map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
32
|
+
create_map(map)
|
33
|
+
assert_equal '/dir1/path1', @completion_map['path1']
|
34
|
+
end
|
35
|
+
|
36
|
+
test "creates alias map" do
|
37
|
+
create_map({}, :aliases=>{'path3'=>'/dir1/path3'}, :global_aliases=>{'path2'=>'/dir1/path2'})
|
38
|
+
assert_equal({"path2"=>"/dir1/path2", "path3"=>"/dir1/path3"}, @completion_map.alias_map)
|
39
|
+
end
|
40
|
+
|
41
|
+
test "fetches correct alias completion" do
|
42
|
+
create_map({}, :aliases=>{'path3'=>'/dir1/path3'})
|
43
|
+
assert_equal '/dir1/path3', @completion_map['path3']
|
44
|
+
end
|
45
|
+
|
46
|
+
test "fetches correct global alias completion" do
|
47
|
+
map = {"path1"=>"/dir1/path1", "path2"=>"/dir1/path2"}
|
48
|
+
create_map(map, :global_aliases=>{'path3'=>'/dir1/path3'})
|
49
|
+
assert_equal '/dir1/path3', @completion_map['path3']
|
50
|
+
end
|
51
|
+
|
52
|
+
test "keys include aliases" do
|
53
|
+
map = {"path2"=>"/dir1/path2"}
|
54
|
+
create_map(map, :global_aliases=>{'path3'=>'/dir1/path3'})
|
55
|
+
assert_arrays_equal ['path2','path3'], @completion_map.keys
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Lightning::CompletionTest < Test::Unit::TestCase
|
4
|
+
context "Completion" do
|
5
|
+
before(:each) {
|
6
|
+
@key = 'blah';
|
7
|
+
Lightning.bolts[@key].stub!(:completions, :return=>%w{at ap blah})
|
8
|
+
Lightning.config[:complete_regex] = true
|
9
|
+
}
|
10
|
+
test "from script matches" do
|
11
|
+
Lightning.config[:complete_regex] = false
|
12
|
+
assert_arrays_equal %w{at ap}, Lightning::Completion.complete('cd-test a', @key)
|
13
|
+
end
|
14
|
+
|
15
|
+
test "for basic case matches" do
|
16
|
+
Lightning.config[:complete_regex] = false
|
17
|
+
@completion = Lightning::Completion.new('cd-test a', @key)
|
18
|
+
assert_arrays_equal %w{at ap}, @completion.matches
|
19
|
+
end
|
20
|
+
|
21
|
+
test "with test flag matches" do
|
22
|
+
Lightning.config[:complete_regex] = false
|
23
|
+
@completion = Lightning::Completion.new('cd-test -test a', @key)
|
24
|
+
assert_arrays_equal %w{at ap}, @completion.matches
|
25
|
+
end
|
26
|
+
|
27
|
+
test "with complete_regex on matches" do
|
28
|
+
Lightning.config[:complete_regex] = true
|
29
|
+
@completion = Lightning::Completion.new('cd-test *', @key)
|
30
|
+
assert_arrays_equal %w{at ap blah}, @completion.matches
|
31
|
+
end
|
32
|
+
|
33
|
+
test "with invalid regex is rescued" do
|
34
|
+
Lightning.config[:complete_regex] = true
|
35
|
+
@completion = Lightning::Completion.new('cd-test []', @key)
|
36
|
+
assert !@completion.matches.grep(/Error/).empty?
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
test "blob_to_regex converts * to .*" do
|
41
|
+
@lc = Lightning::Completion.new('blah', @key)
|
42
|
+
assert_equal '.*a.*blah', @lc.blob_to_regex('*a*blah')
|
43
|
+
end
|
44
|
+
|
45
|
+
test "blob_to_regex doesn't modify .*" do
|
46
|
+
@lc = Lightning::Completion.new('blah', @key)
|
47
|
+
assert_equal '.*blah.*', @lc.blob_to_regex('.*blah.*')
|
48
|
+
end
|
49
|
+
end
|
data/test/config_test.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Lightning::ConfigTest < Test::Unit::TestCase
|
4
|
+
context "A config" do
|
5
|
+
before(:all) {
|
6
|
+
@config = Lightning::Config.create
|
7
|
+
}
|
8
|
+
|
9
|
+
should "be a hash" do
|
10
|
+
assert @config.is_a?(Hash)
|
11
|
+
end
|
12
|
+
|
13
|
+
should "have keys that are symbols" do
|
14
|
+
assert @config.keys.all? {|e| e.is_a?(Symbol)}
|
15
|
+
end
|
16
|
+
|
17
|
+
should "have read supported keys" do
|
18
|
+
supported_keys = [:generated_file, :commands, :ignore_paths, :paths, :shell, :complete_regex]
|
19
|
+
assert_arrays_equal supported_keys, @config.keys
|
20
|
+
end
|
21
|
+
|
22
|
+
should "have a generated_file key which is a string" do
|
23
|
+
assert @config[:generated_file].is_a?(String)
|
24
|
+
end
|
25
|
+
|
26
|
+
should "have a commands key which is an array" do
|
27
|
+
assert @config[:commands].is_a?(Array)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "have a command with valid keys" do
|
31
|
+
assert @config[:commands][0].slice('name', 'map_to', 'description').values.all? {|e| e.is_a?(String)}
|
32
|
+
assert @config[:commands][0]['paths'].is_a?(Array)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "have a paths key which is a hash" do
|
36
|
+
assert @config[:paths].is_a?(Hash)
|
37
|
+
end
|
38
|
+
|
39
|
+
should "have an ignore_paths key which is an array" do
|
40
|
+
assert @config[:ignore_paths].is_a?(Array)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context ":configure_commands_and_paths" do
|
45
|
+
test "generates bolt key if none exists" do
|
46
|
+
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1'}]}
|
47
|
+
assert ! Lightning::Config.configure_commands_and_paths(config)[:commands][0]['bolt_key'].nil?
|
48
|
+
end
|
49
|
+
|
50
|
+
test "adds generated bolt key to config.paths if it didn't exist" do
|
51
|
+
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1', 'paths'=>['*']}]}
|
52
|
+
new_config = Lightning::Config.configure_commands_and_paths(config)
|
53
|
+
bolt_key = new_config[:commands][0]['bolt_key']
|
54
|
+
assert new_config[:paths].has_key?(bolt_key)
|
55
|
+
end
|
56
|
+
|
57
|
+
test "adds reference to bolt key if command.paths is a string" do
|
58
|
+
config = {:commands=>[{'name'=>'c1', 'map_to'=>'s1', 'paths'=>'blah'}]}
|
59
|
+
assert_equal 'blah', Lightning::Config.configure_commands_and_paths(config)[:commands][0]['bolt_key']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/test/lightning.yml
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
generated_file: lightning_completions
|
3
|
+
|
4
|
+
ignore_paths:
|
5
|
+
- .DS_Store
|
6
|
+
- .git
|
7
|
+
|
8
|
+
#only oa command is currently used
|
9
|
+
commands:
|
10
|
+
- name : oa
|
11
|
+
map_to : open -a
|
12
|
+
description : open mac applications
|
13
|
+
paths:
|
14
|
+
- /Applications/*.app
|
15
|
+
- /Applications/Utilities/*.app
|
16
|
+
|
17
|
+
- name : gcd
|
18
|
+
map_to : cd
|
19
|
+
paths: gem
|
20
|
+
|
21
|
+
- name : rcd
|
22
|
+
map_to : cd
|
23
|
+
description : ruby core directories
|
24
|
+
paths:
|
25
|
+
- /Library/Ruby/Site/1.8/**/
|
26
|
+
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/**/
|
27
|
+
|
28
|
+
paths:
|
29
|
+
# to obtain your own paths to your ruby gems:
|
30
|
+
# `gem environment path`.split(":").map {|e| e +"/gems/*" }
|
31
|
+
gem:
|
32
|
+
- /Users/bozo/.gem/ruby/1.8/gems/*
|
33
|
+
- /Library/Ruby/Gems/1.8/gems/*
|
34
|
+
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/*
|
35
|
+
|
36
|
+
gem_rdoc:
|
37
|
+
- /Users/bozo/.gem/ruby/1.8/doc/*
|
38
|
+
- /Library/Ruby/Gems/1.8/doc/*
|
39
|
+
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/doc/*
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class LightningTest < Test::Unit::TestCase
|
4
|
+
context "Generator" do
|
5
|
+
before(:all) do
|
6
|
+
@config_file = File.dirname(__FILE__) + '/lightning_completions'
|
7
|
+
Lightning.config[:generated_file] = @config_file
|
8
|
+
Lightning::Generator.generate_completions
|
9
|
+
end
|
10
|
+
after(:all) { FileUtils.rm_f(Lightning.config[:generated_file]) }
|
11
|
+
|
12
|
+
test "generates file in expected location" do
|
13
|
+
assert File.exists?(@config_file)
|
14
|
+
end
|
15
|
+
|
16
|
+
#this depends on oa
|
17
|
+
test "generates expected output for a command" do
|
18
|
+
generated_command = <<-EOS.gsub(/^\s{6}/,'')
|
19
|
+
#open mac applications
|
20
|
+
oa () {
|
21
|
+
if [ -z "$1" ]; then
|
22
|
+
echo "No arguments given"
|
23
|
+
return
|
24
|
+
fi
|
25
|
+
FULL_PATH="`${LBIN_PATH}lightning-full_path oa $@`"
|
26
|
+
if [ $1 == '-test' ]; then
|
27
|
+
CMD="open -a '$FULL_PATH'"
|
28
|
+
echo $CMD
|
29
|
+
else
|
30
|
+
open -a "$FULL_PATH"
|
31
|
+
fi
|
32
|
+
}
|
33
|
+
complete -o default -C "${LBIN_PATH}lightning-complete oa" oa
|
34
|
+
EOS
|
35
|
+
output = File.read(@config_file)
|
36
|
+
assert output.include?(generated_command)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "Lightning" do
|
41
|
+
test "complete() returns correctly for valid command" do
|
42
|
+
Lightning::Completion.stub!(:complete, :return=>'blah')
|
43
|
+
assert_equal 'blah', Lightning.complete('oa', 'blah')
|
44
|
+
end
|
45
|
+
|
46
|
+
test "complete() reports error for invalid command" do
|
47
|
+
assert ! Lightning.complete('invalid','invalid').grep(/Error/).empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
test "translate() returns errorless for valid command" do
|
51
|
+
assert Lightning.translate('oa', 'blah').grep(/Error/).empty?
|
52
|
+
end
|
53
|
+
|
54
|
+
test "translate() reports error for invalid command" do
|
55
|
+
assert ! Lightning.translate('invalid', 'blah').grep(/Error/).empty?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'context' #gem install jeremymcanally-context -s http://gems.github.com
|
4
|
+
require 'stump' #gem install jeremymcanally-stump -s http://gems.github.com
|
5
|
+
#require 'pending' #gem install jeremymcanally-pending -s http://gems.github.com
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
|
+
require 'lightning'
|
8
|
+
#set up valid global config file
|
9
|
+
Lightning::Config.config_file = File.join(File.dirname(__FILE__), 'lightning.yml')
|
10
|
+
|
11
|
+
|
12
|
+
class Test::Unit::TestCase
|
13
|
+
def assert_arrays_equal(a1, a2)
|
14
|
+
assert_equal a1.map {|e| e.to_s}.sort, a2.map{|e| e.to_s}.sort
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
#from ActiveSupport
|
20
|
+
class Hash
|
21
|
+
def slice(*keys)
|
22
|
+
reject { |key,| !keys.include?(key) }
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lightning
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gabriel Horner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-23 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Lightning creates shell commands that each autocomplete to a configured group of files and directories. Autocompleting is quick since you only need to type the basename and can even use regex completion.
|
17
|
+
email: gabriel.horner@gmail.com
|
18
|
+
executables:
|
19
|
+
- lightning-complete
|
20
|
+
- lightning-full_path
|
21
|
+
- lightning-install
|
22
|
+
extensions: []
|
23
|
+
|
24
|
+
extra_rdoc_files:
|
25
|
+
- LICENSE.txt
|
26
|
+
- README.rdoc
|
27
|
+
files:
|
28
|
+
- CHANGELOG.rdoc
|
29
|
+
- LICENSE.txt
|
30
|
+
- README.rdoc
|
31
|
+
- Rakefile
|
32
|
+
- VERSION.yml
|
33
|
+
- bin/lightning-complete
|
34
|
+
- bin/lightning-full_path
|
35
|
+
- bin/lightning-install
|
36
|
+
- lib/lightning.rb
|
37
|
+
- lib/lightning/bolt.rb
|
38
|
+
- lib/lightning/bolts.rb
|
39
|
+
- lib/lightning/commands.rb
|
40
|
+
- lib/lightning/completion.rb
|
41
|
+
- lib/lightning/completion_map.rb
|
42
|
+
- lib/lightning/config.rb
|
43
|
+
- lib/lightning/generator.rb
|
44
|
+
- lightning.yml.example
|
45
|
+
- lightning_completions.example
|
46
|
+
- test/bolt_test.rb
|
47
|
+
- test/completion_map_test.rb
|
48
|
+
- test/completion_test.rb
|
49
|
+
- test/config_test.rb
|
50
|
+
- test/lightning.yml
|
51
|
+
- test/lightning_test.rb
|
52
|
+
- test/test_helper.rb
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: http://github.com/cldwalker/lightning
|
55
|
+
licenses: []
|
56
|
+
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options:
|
59
|
+
- --charset=UTF-8
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project: tagaholic
|
77
|
+
rubygems_version: 1.3.5
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Path completions for your shell that will let you navigate like lightning.
|
81
|
+
test_files:
|
82
|
+
- test/bolt_test.rb
|
83
|
+
- test/completion_map_test.rb
|
84
|
+
- test/completion_test.rb
|
85
|
+
- test/config_test.rb
|
86
|
+
- test/lightning_test.rb
|
87
|
+
- test/test_helper.rb
|