cldwalker-lightning 0.1.2 → 0.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/LICENSE.txt +1 -1
- data/README.markdown +35 -4
- data/Rakefile +68 -0
- data/VERSION.yml +4 -0
- data/lib/lightning.rb +1 -1
- data/lib/lightning/bolt.rb +7 -5
- data/lib/lightning/completion.rb +15 -2
- data/lib/lightning/{path_map.rb → completion_map.rb} +6 -4
- data/lib/lightning/config.rb +10 -4
- data/lightning.yml.example +2 -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/{lightning_config_test.rb → config_test.rb} +3 -3
- data/test/lightning_test.rb +1 -1
- data/test/test_helper.rb +4 -1
- metadata +9 -7
- data/test/lightning_bolt_test.rb +0 -27
- data/test/lightning_completion_test.rb +0 -23
- data/test/lightning_path_map_test.rb +0 -30
data/LICENSE.txt
CHANGED
data/README.markdown
CHANGED
@@ -13,14 +13,31 @@ you type or complete
|
|
13
13
|
|
14
14
|
bash> rvim irb.rb
|
15
15
|
|
16
|
-
Uneasy about what lightning will execute? Test it out with a -test flag
|
16
|
+
Uneasy about what lightning will execute? Test/print it out with a -test flag
|
17
17
|
|
18
18
|
bash> rvim -test irb.rb
|
19
19
|
rvim '/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/irb.rb'
|
20
20
|
|
21
|
+
Want to autocomplete but don't remember how the basename starts? Just use a ruby regular expression:
|
22
|
+
|
23
|
+
# *'s are converted to .*'s for convience sakes
|
24
|
+
bash> rvim *dialog [TAB TAB]
|
25
|
+
canvasprintdialog.rb
|
26
|
+
extfileselectiondialog.rb
|
27
|
+
dialog.rb//System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/tk
|
28
|
+
fileselectiondialog.rb
|
29
|
+
dialog.rb//System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/tkextlib/bwidget
|
30
|
+
finddialog.rb
|
31
|
+
|
32
|
+
#re-edit your line to narrow down your completion to one entry
|
33
|
+
bash> rvim ca*dialog [TAB TAB]
|
34
|
+
|
35
|
+
#once the basename completes, you can execute your command
|
36
|
+
bash> rvim canvasprintdialog.rb
|
37
|
+
|
21
38
|
As you can see, you only need to autocomplete the basenames of paths and lightning will resolve their
|
22
|
-
full paths. rvim is a lightning command configured to autocomplete a certain group of paths for vim.
|
23
|
-
In
|
39
|
+
full paths. In these examples, rvim is a lightning command configured to autocomplete a certain group of paths for vim.
|
40
|
+
In my case, rvim is configured to complete my ruby core and standard library files.
|
24
41
|
|
25
42
|
|
26
43
|
Install
|
@@ -60,6 +77,12 @@ Since the globbable paths are interpreted by ruby's Dir.glob(), you can:
|
|
60
77
|
|
61
78
|
`ri Dir.glob` for more examples.
|
62
79
|
|
80
|
+
Aliases
|
81
|
+
=======
|
82
|
+
|
83
|
+
Lightning supports custom aliases for any path, globally and per command. So if there is some
|
84
|
+
path that you access often but that's still too slow with completion, alias it away!
|
85
|
+
|
63
86
|
Configuration
|
64
87
|
=====================
|
65
88
|
|
@@ -70,7 +93,15 @@ Configuration options are:
|
|
70
93
|
* generated\_file: Location of shell script file generated from config. Defaults to
|
71
94
|
~/.lightning\_completions.
|
72
95
|
* ignore\_paths: List of paths to globally ignore when listing completions.
|
96
|
+
* complete\_regex: true or false (default is true)
|
97
|
+
Turns on/off Ruby regular expression matching when completing. One convience
|
98
|
+
is that a '*' is converted to '.*' ie glob-like behavior.
|
99
|
+
|
100
|
+
Note: Realize your regular expression normally just match the basename. However, since duplicates
|
101
|
+
list their full paths, their full paths are subject to regex matching.
|
73
102
|
* shell: Specifies shell script generator used for generating completions. Defaults to bash.
|
103
|
+
* aliases: A hash (pairs) of custom aliases pointing to full paths. These aliases will be globally
|
104
|
+
recognized by any lightning command.
|
74
105
|
* commands: A list of lightning commands. A lightning command is just a shell function
|
75
106
|
which executes a specified shell function with a defined set of paths to autocomplete on.
|
76
107
|
A command consists of the following options/keys:
|
@@ -80,6 +111,7 @@ Configuration options are:
|
|
80
111
|
* description: Description which is placed as a comment in the generated shell script.
|
81
112
|
* paths (required): A list of globbable paths, whose basenames are autocompleted. You can also
|
82
113
|
pass this a path name that has been defined in the paths option.
|
114
|
+
* aliases: A hash (pairs) of custom aliases and full paths only for this command.
|
83
115
|
|
84
116
|
* paths: This takes a hash (pairs) of path names and globbable paths. This should be used when
|
85
117
|
you have a group of paths that are used in multiple commands. When doing that, you would specify
|
@@ -124,6 +156,5 @@ I had to do something.
|
|
124
156
|
Todo/Ideas
|
125
157
|
==========
|
126
158
|
|
127
|
-
* Aliases for common autocompletions.
|
128
159
|
* Allow lightning commands to only path-resolve one of multiple arguments given.
|
129
160
|
* Command interface to easily add/remove current directory or globs from a command
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
begin
|
5
|
+
require 'rcov/rcovtask'
|
6
|
+
|
7
|
+
Rcov::RcovTask.new do |t|
|
8
|
+
t.libs << 'test'
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
|
+
t.rcov_opts = ["-T -x '/Library/Ruby/*'"]
|
11
|
+
t.verbose = true
|
12
|
+
end
|
13
|
+
rescue LoadError
|
14
|
+
puts "Rcov not available. Install it for rcov-related tasks with: sudo gem install rcov"
|
15
|
+
end
|
16
|
+
|
17
|
+
begin
|
18
|
+
require 'jeweler'
|
19
|
+
Jeweler::Tasks.new do |s|
|
20
|
+
s.name = "lightning"
|
21
|
+
s.executables = ["lightning-complete", "lightning-full_path", "lightning-install"]
|
22
|
+
s.summary = "Path completions for your shell that will let you navigate like lightning."
|
23
|
+
s.email = "gabriel.horner@gmail.com"
|
24
|
+
s.homepage = "http://github.com/cldwalker/lightning"
|
25
|
+
s.description = "Path completions for your shell that will let you navigate like lightning."
|
26
|
+
s.authors = ["Gabriel Horner"]
|
27
|
+
s.files = FileList["Rakefile", "VERSION.yml", "lightning_completions.example", "lightning.yml.example","README.markdown", "LICENSE.txt", "{bin,lib,test}/**/*"]
|
28
|
+
s.has_rdoc = true
|
29
|
+
s.extra_rdoc_files = ["README.markdown", "LICENSE.txt"]
|
30
|
+
end
|
31
|
+
|
32
|
+
rescue LoadError
|
33
|
+
puts "Jeweler not available. Install it for jeweler-related tasks with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
34
|
+
end
|
35
|
+
|
36
|
+
Rake::TestTask.new do |t|
|
37
|
+
t.libs << 'lib'
|
38
|
+
t.pattern = 'test/**/*_test.rb'
|
39
|
+
t.verbose = false
|
40
|
+
end
|
41
|
+
|
42
|
+
Rake::RDocTask.new do |rdoc|
|
43
|
+
rdoc.rdoc_dir = 'rdoc'
|
44
|
+
rdoc.title = 'test'
|
45
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
46
|
+
rdoc.rdoc_files.include('README*')
|
47
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
48
|
+
end
|
49
|
+
|
50
|
+
namespace :dev do
|
51
|
+
desc "Generates completion, modifies it for local development"
|
52
|
+
task :reload=>:generate_completions do
|
53
|
+
file = 'lightning_completions'
|
54
|
+
string = File.read(file)
|
55
|
+
string.sub!(/^LBIN_PATH/,'#LBIN_PATH')
|
56
|
+
string.sub!(/^#LBIN_PATH/,'LBIN_PATH')
|
57
|
+
File.open(file,'w') {|f| f.write(string) }
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "Generates local completion file to be sourced by your shell"
|
61
|
+
task :generate_completions do
|
62
|
+
$:.unshift 'lib'
|
63
|
+
require 'lightning'
|
64
|
+
Lightning::Generator.generate_completions 'lightning_completions'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
task :default => :test
|
data/VERSION.yml
ADDED
data/lib/lightning.rb
CHANGED
data/lib/lightning/bolt.rb
CHANGED
@@ -7,11 +7,13 @@ class Lightning
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def completions
|
10
|
-
|
10
|
+
completion_map.keys
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
@
|
13
|
+
def completion_map
|
14
|
+
@completion_map ||= Lightning::CompletionMap.new(self.paths,
|
15
|
+
:global_aliases=>Lightning.config[:aliases],
|
16
|
+
:aliases=>Lightning.config_command(Lightning.current_command)['aliases'])
|
15
17
|
end
|
16
18
|
|
17
19
|
def resolve_completion(basename)
|
@@ -21,11 +23,11 @@ class Lightning
|
|
21
23
|
# if (regex = Lightning.config_command(Lightning.current_command)['completion_regex'])
|
22
24
|
# basename = basename[/#{regex}/]
|
23
25
|
# end
|
24
|
-
|
26
|
+
completion_map[basename] || ''
|
25
27
|
end
|
26
28
|
|
27
29
|
def paths
|
28
30
|
@paths ||= Lightning.config[:paths][key] || []
|
29
31
|
end
|
30
32
|
end
|
31
|
-
end
|
33
|
+
end
|
data/lib/lightning/completion.rb
CHANGED
@@ -12,10 +12,23 @@ class Lightning
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def matches
|
15
|
-
|
16
|
-
|
15
|
+
if Lightning.config[:complete_regex]
|
16
|
+
begin
|
17
|
+
possible_completions.grep(/#{blob_to_regex(typed)}/)
|
18
|
+
rescue RegexpError
|
19
|
+
['Error: Invalid regular expression']
|
20
|
+
end
|
21
|
+
else
|
22
|
+
possible_completions.select do |e|
|
23
|
+
e[0, typed.length] == typed
|
24
|
+
end
|
17
25
|
end
|
18
26
|
end
|
27
|
+
|
28
|
+
#just converts * to .* to make a glob-like regex
|
29
|
+
def blob_to_regex(string)
|
30
|
+
string.gsub(/^\*|([^\.])\*/) {|e| $1 ? $1 + ".*" : ".*" }
|
31
|
+
end
|
19
32
|
|
20
33
|
def typed
|
21
34
|
# @text_typed[/\s(.+?)$/, 1] || ''
|
@@ -1,20 +1,22 @@
|
|
1
1
|
#This class maps completions to their full paths for the given blobs
|
2
2
|
class Lightning
|
3
|
-
class
|
3
|
+
class CompletionMap
|
4
4
|
attr_accessor :map
|
5
|
+
attr_reader :alias_map
|
5
6
|
|
6
7
|
def initialize(*globs)
|
7
|
-
|
8
|
+
options = globs[-1].is_a?(Hash) ? globs.pop : {}
|
8
9
|
globs.flatten!
|
9
10
|
@map = create_map_for_globs(globs)
|
11
|
+
@alias_map = (options[:global_aliases] || {}).merge(options[:aliases] || {})
|
10
12
|
end
|
11
13
|
|
12
14
|
def [](completion)
|
13
|
-
@map[completion]
|
15
|
+
@map[completion] || @alias_map[completion]
|
14
16
|
end
|
15
17
|
|
16
18
|
def keys
|
17
|
-
@map.keys
|
19
|
+
(@map.keys + @alias_map.keys).uniq
|
18
20
|
end
|
19
21
|
|
20
22
|
#should return hash
|
data/lib/lightning/config.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module Lightning::Config
|
2
|
+
attr_accessor :config_file
|
2
3
|
def load_config
|
3
4
|
@config = setup_config
|
4
5
|
end
|
@@ -7,16 +8,21 @@ module Lightning::Config
|
|
7
8
|
@config ||= setup_config
|
8
9
|
end
|
9
10
|
|
11
|
+
def config=(value)
|
12
|
+
@config = value
|
13
|
+
end
|
14
|
+
|
10
15
|
def setup_config
|
11
16
|
hash = read_config_file
|
12
17
|
configure_commands_and_paths(hash)
|
13
18
|
hash
|
14
19
|
end
|
15
20
|
|
16
|
-
def read_config_file(
|
17
|
-
default_config = {:shell=>'bash', :generated_file=>File.expand_path(File.join('~', '.lightning_completions'))
|
18
|
-
|
19
|
-
|
21
|
+
def read_config_file(file=nil)
|
22
|
+
default_config = {:shell=>'bash', :generated_file=>File.expand_path(File.join('~', '.lightning_completions')),
|
23
|
+
:complete_regex=>true}
|
24
|
+
@config_file = file || @config_file || (File.exists?('lightning.yml') ? 'lightning.yml' : File.expand_path(File.join("~",".lightning.yml")))
|
25
|
+
hash = YAML::load(File.new(@config_file))
|
20
26
|
default_config.merge(hash.symbolize_keys)
|
21
27
|
end
|
22
28
|
|
data/lightning.yml.example
CHANGED
@@ -44,6 +44,8 @@ commands:
|
|
44
44
|
paths:
|
45
45
|
- /Library/Ruby/Site/1.8/**/
|
46
46
|
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/**/
|
47
|
+
aliases:
|
48
|
+
r1: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8
|
47
49
|
|
48
50
|
- name : oa
|
49
51
|
map_to : open -a
|
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
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
class
|
3
|
+
class Lightning::ConfigTest < Test::Unit::TestCase
|
4
4
|
context "A config" do
|
5
5
|
before(:all) {
|
6
6
|
@config = Lightning.read_config_file(File.dirname(__FILE__) + '/lightning.yml')
|
@@ -15,7 +15,7 @@ class LightningConfigTest < Test::Unit::TestCase
|
|
15
15
|
end
|
16
16
|
|
17
17
|
should "have read supported keys" do
|
18
|
-
supported_keys = [:generated_file, :commands, :ignore_paths, :paths, :shell]
|
18
|
+
supported_keys = [:generated_file, :commands, :ignore_paths, :paths, :shell, :complete_regex]
|
19
19
|
assert_arrays_equal supported_keys, @config.keys
|
20
20
|
end
|
21
21
|
|
data/test/lightning_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -3,8 +3,11 @@ require 'test/unit'
|
|
3
3
|
require 'context' #gem install jeremymcanally-context -s http://gems.github.com
|
4
4
|
require 'stump' #gem install jeremymcanally-stump -s http://gems.github.com
|
5
5
|
require 'pending' #gem install jeremymcanally-pending -s http://gems.github.com
|
6
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__)
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
7
|
require 'lightning'
|
8
|
+
#set up valid global config file
|
9
|
+
Lightning.config_file = File.join(File.dirname(__FILE__), 'lightning.yml')
|
10
|
+
|
8
11
|
|
9
12
|
class Test::Unit::TestCase
|
10
13
|
def assert_arrays_equal(a1, a2)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cldwalker-lightning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Horner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-28 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,6 +25,8 @@ extra_rdoc_files:
|
|
25
25
|
- README.markdown
|
26
26
|
- LICENSE.txt
|
27
27
|
files:
|
28
|
+
- Rakefile
|
29
|
+
- VERSION.yml
|
28
30
|
- lightning_completions.example
|
29
31
|
- lightning.yml.example
|
30
32
|
- README.markdown
|
@@ -36,16 +38,16 @@ files:
|
|
36
38
|
- lib/lightning/bolt.rb
|
37
39
|
- lib/lightning/bolts.rb
|
38
40
|
- lib/lightning/completion.rb
|
41
|
+
- lib/lightning/completion_map.rb
|
39
42
|
- lib/lightning/config.rb
|
40
43
|
- lib/lightning/core_extensions.rb
|
41
44
|
- lib/lightning/generator.rb
|
42
|
-
- lib/lightning/path_map.rb
|
43
45
|
- lib/lightning.rb
|
46
|
+
- test/bolt_test.rb
|
47
|
+
- test/completion_map_test.rb
|
48
|
+
- test/completion_test.rb
|
49
|
+
- test/config_test.rb
|
44
50
|
- test/lightning.yml
|
45
|
-
- test/lightning_bolt_test.rb
|
46
|
-
- test/lightning_completion_test.rb
|
47
|
-
- test/lightning_config_test.rb
|
48
|
-
- test/lightning_path_map_test.rb
|
49
51
|
- test/lightning_test.rb
|
50
52
|
- test/test_helper.rb
|
51
53
|
has_rdoc: true
|
data/test/lightning_bolt_test.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class LightningBoltTest < Test::Unit::TestCase
|
4
|
-
context "Bolt" do
|
5
|
-
before(:each) do
|
6
|
-
@path_map = {'path1'=>'/dir/path1','path2'=>'/dir/path2'}
|
7
|
-
@bolt = Lightning::Bolt.new('blah')
|
8
|
-
@bolt.path_map.map = @path_map
|
9
|
-
end
|
10
|
-
|
11
|
-
test "fetches correct completions" do
|
12
|
-
assert_equal @bolt.completions, @path_map.keys
|
13
|
-
end
|
14
|
-
|
15
|
-
test "resolves completion" do
|
16
|
-
assert_equal @path_map['path1'], @bolt.resolve_completion('path1')
|
17
|
-
end
|
18
|
-
|
19
|
-
test "resolves completion with test flag" do
|
20
|
-
assert_equal @path_map['path1'], @bolt.resolve_completion('-test path1')
|
21
|
-
end
|
22
|
-
|
23
|
-
test "creates path_map only once" do
|
24
|
-
assert_equal @bolt.path_map.object_id, @bolt.path_map.object_id
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class LightningCompletionTest < 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
|
-
}
|
9
|
-
test "from script matches correctly" do
|
10
|
-
assert_arrays_equal Lightning::Completion.complete('cd-test a', @key), %w{at ap}
|
11
|
-
end
|
12
|
-
|
13
|
-
test "for basic case matches correctly" do
|
14
|
-
@completion = Lightning::Completion.new('cd-test a', @key)
|
15
|
-
assert_arrays_equal @completion.matches, %w{at ap}
|
16
|
-
end
|
17
|
-
|
18
|
-
test "with test flag matches correctly" do
|
19
|
-
@completion = Lightning::Completion.new('cd-test -test a', @key)
|
20
|
-
assert_arrays_equal @completion.matches, %w{at ap}
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class LightningPathMapTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
context "PathMap" do
|
6
|
-
def create_map(path_hash)
|
7
|
-
Dir.stub!(:glob) { path_hash.values }
|
8
|
-
@path_map = Lightning::PathMap.new('blah')
|
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, @path_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'), @path_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, @path_map.map
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|