lightning 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,122 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ context "function command" do
4
+ def function(*args)
5
+ run_command :function, args
6
+ end
7
+
8
+ def command_should_print(action, fn)
9
+ mock(Commands).save_and_say("#{action} function '#{fn}'")
10
+ end
11
+
12
+ test "list lists functions" do
13
+ mock(Commands).puts Lightning.functions.keys.sort
14
+ function('list')
15
+ end
16
+
17
+ test "list lists functions with --bolt" do
18
+ mock(Commands).puts Lightning.functions.keys.sort
19
+ function('list', '--bolt=app')
20
+ end
21
+
22
+ test "list lists functions with --command" do
23
+ mock(Commands).puts ['less-app']
24
+ function('list', '--command=less')
25
+ end
26
+
27
+ context "create:" do
28
+ test "creates a function" do
29
+ command_should_print 'Created', 'cp-app'
30
+ function 'create', 'cp', 'app'
31
+ config.bolts['app']['functions'][-1].should == {'name'=>'cp-app', 'shell_command'=>'cp'}
32
+ end
33
+
34
+ test "creates a function with an aliased bolt" do
35
+ command_should_print 'Created', 'grep-w'
36
+ function 'create', 'grep', 'w'
37
+ config.bolts['wild_dir']['functions'][-1].should == 'grep'
38
+ end
39
+
40
+ test "creates a function with an aliased global command" do
41
+ command_should_print 'Created', 'v-w'
42
+ function 'create', 'vim', 'wild_dir'
43
+ config.bolts['wild_dir']['functions'][-1].should == 'vim'
44
+ end
45
+
46
+ test "creates a function similar to a global function" do
47
+ command_should_print 'Created', 'vapp'
48
+ function 'create', 'vim', 'app', 'vapp'
49
+ config.bolts['app']['functions'][-1].should == {"name"=>"vapp", "shell_command"=>"vim"}
50
+ end
51
+
52
+ test "creates a function with explicit function name" do
53
+ command_should_print 'Created', 'eap'
54
+ function 'create', 'emacs', 'app', 'eap'
55
+ config.bolts['app']['functions'][-1].should == {"name"=>"eap", "shell_command"=>"emacs"}
56
+ end
57
+
58
+ test "fails to generate a bolt and doesn't create a function" do
59
+ mock(Generator).run('bin', :once=>'bin') { false }
60
+ mock(Commands).create_function(anything, anything, anything).never
61
+ function 'create', 'less', 'bin'
62
+ end
63
+
64
+ test "generates a bolt and creates a function" do
65
+ mock(Generator).run('bin', :once=>'bin') { true }
66
+ mock(Commands).create_function(anything, anything, anything)
67
+ function 'create', 'less', 'bin'
68
+ end
69
+
70
+ test "prints error if trying to create a function with an existing name" do
71
+ mock(Commands).puts(/'less-app'.*exists/)
72
+ function 'create', 'less', 'app'
73
+ end
74
+ end
75
+
76
+ # deletes functions created in create context
77
+ context "delete:" do
78
+ # reloads bolts/functions
79
+ before_all { Lightning.functions = nil; Lightning.bolts.delete_if { true } }
80
+
81
+ def function_count(bolt)
82
+ config.bolts[bolt]['functions'].size
83
+ end
84
+
85
+ context "deletes" do
86
+ before { @previous_count = function_count('app') }
87
+ after { function_count('app').should == @previous_count - 1 }
88
+
89
+ test "a function" do
90
+ command_should_print 'Deleted', 'cp-app'
91
+ function 'delete', 'cp-app'
92
+ end
93
+
94
+ test "a function with an aliased global command" do
95
+ command_should_print 'Deleted', 'v-app'
96
+ function 'delete', 'v-app'
97
+ end
98
+
99
+ test "a function with explicit name" do
100
+ command_should_print 'Deleted', 'eap'
101
+ function 'delete', 'eap'
102
+ end
103
+ end
104
+
105
+ test "deletes a function with an aliased bolt" do
106
+ @previous_count = function_count('wild_dir')
107
+ command_should_print 'Deleted', 'grep-w'
108
+ function 'delete', 'grep-w'
109
+ function_count('wild_dir').should == @previous_count - 1
110
+ end
111
+
112
+ test "prints error if global function" do
113
+ mock(Commands).puts /Can't.*'grep-app'/, anything
114
+ function 'delete', 'grep-app'
115
+ end
116
+
117
+ test "prints error for nonexistent function" do
118
+ mock(Commands).puts /Can't.*'zzz'/
119
+ function 'delete', 'zzz'
120
+ end
121
+ end
122
+ end
@@ -79,7 +79,7 @@ context "Function" do
79
79
  translate 'a1', @map['a1']
80
80
  end
81
81
 
82
- after_all { Lightning.config[:aliases] = {}}
82
+ after_all { config[:aliases] = {}}
83
83
 
84
84
  context "function attributes:" do
85
85
  test "post_path added after each translation" do
@@ -2,72 +2,104 @@ require File.join(File.dirname(__FILE__), 'test_helper')
2
2
 
3
3
  context "Generator" do
4
4
 
5
- def temporary_config_file
6
- old_config = Lightning.config
7
- old_config_file = Lightning::Config.config_file
8
- new_config_file = File.dirname(__FILE__) + '/another_lightning.yml'
9
- Lightning::Config.config_file = new_config_file
10
- yield(new_config_file)
11
- Lightning::Config.config_file = old_config_file
12
- Lightning.config = old_config
13
- FileUtils.rm_f new_config_file
14
- end
15
-
16
5
  def generate(*args)
17
- args[-1].is_a?(Hash) ? args.pop : {}
18
- Generator.run args, {}
6
+ Generator.run *args
19
7
  end
20
8
 
21
- test "generates default generators when none given" do
22
- stub.instance_of(Generator).call_generator { [] }
23
- temporary_config_file do |config_file|
9
+ context "#run" do
10
+ def temporary_config_file
11
+ old_config = config
12
+ old_config_file = Lightning::Config.config_file
13
+ new_config_file = File.dirname(__FILE__) + '/another_lightning.yml'
14
+ Lightning::Config.config_file = new_config_file
15
+ yield(new_config_file)
16
+ Lightning::Config.config_file = old_config_file
17
+ Lightning.config = old_config
18
+ FileUtils.rm_f new_config_file
19
+ end
20
+
21
+ test "generates default generators when none given" do
22
+ stub.instance_of(Generator).call_generator { [] }
23
+ temporary_config_file do |config_file|
24
+ generate
25
+ conf = YAML::load_file(config_file)
26
+ Generator::DEFAULT_GENERATORS.all? {|e| conf[:bolts].key?(e) }.should == true
27
+ end
28
+ end
29
+
30
+ test "generates given generators" do
31
+ mock.instance_of(Generator).generate_bolts('gem'=>'gem')
32
+ generate ['gem']
33
+ end
34
+
35
+ test "handles unexpected error while generating bolts" do
36
+ mock.instance_of(Generator).generate_bolts(anything) { raise "Totally unexpected" }
37
+ mock($stderr).puts(/Error: Totally/)
24
38
  generate
25
- config = YAML::load_file(config_file)
26
- Generator::DEFAULT_GENERATORS.all? {|e| config[:bolts].key?(e) }.should == true
27
39
  end
28
40
  end
29
41
 
30
- test "generates given generators" do
31
- mock.instance_of(Generator).generate_bolts('gem'=>'gem')
32
- generate 'gem'
33
- end
42
+ context "#generate_bolts" do
43
+ test "prints error for invalid generator" do
44
+ mock($stdout).puts /'bad' failed.*exist/
45
+ generate ['bad']
46
+ end
34
47
 
35
- # test "prints nonexistant generators while continuing with good generators" do
36
- # stub.instance_of(Generator).underling.stub(send) { {} } #`
37
- # capture_stdout {
38
- # generate :gem, :bad
39
- # }.should =~ /^Generator 'bad' failed/
40
- # end
41
-
42
- test "handles unexpected error while generating bolts" do
43
- mock.instance_of(Generator).generate_bolts(anything) { raise "Totally unexpected" }
44
- mock($stderr).puts(/Error: Totally/)
45
- generate :gem
46
- end
48
+ test "handles valid and invalid generators" do
49
+ mock($stdout).puts /'bad' failed.*exist/
50
+ mock(config).save
51
+ generate ['wild', 'bad']
52
+ end
53
+
54
+ context "generates" do
55
+ before_all {
56
+ @old_bolts = config[:bolts]
57
+ config[:bolts]['overwrite'] = {'globs'=>['overwrite me']}
58
+ Generators.send(:define_method, :user_bolt) { ['glob1', 'glob2'] }
59
+ Generators.send(:define_method, :overwrite) { ['overwritten'] }
60
+ mock(config).save
61
+ generate ['wild', 'user_bolt', 'overwrite']
62
+ }
63
+
64
+ test "a default bolt" do
65
+ config[:bolts]['wild']['globs'].should == ['**/*']
66
+ end
67
+
68
+ test "a user-specified bolt" do
69
+ config[:bolts]['user_bolt']['globs'].should == ['glob1', 'glob2']
70
+ end
47
71
 
48
- context "generates" do
49
- before_all {
50
- Lightning.config[:bolts]['overwrite'] = {'globs'=>['overwrite me']}
51
- Generators.send(:define_method, :user_bolt) { ['glob1', 'glob2'] }
52
- Generators.send(:define_method, :overwrite) { ['overwritten'] }
53
- mock(Lightning.config).save
54
- generate 'wild', 'user_bolt', 'overwrite'
55
- }
56
-
57
- test "a default bolt" do
58
- Lightning.config[:bolts]['wild']['globs'].should == ['**/*']
72
+ test "and overwrites existing bolts" do
73
+ config[:bolts]['overwrite']['globs'].should == ["overwritten"]
74
+ end
75
+
76
+ test "and preserves bolts that aren't being generated" do
77
+ config[:bolts]['app'].class.should == Hash
78
+ end
79
+
80
+ after_all { config[:bolts] = @old_bolts }
59
81
  end
82
+ end
83
+
84
+ context "#run with :once" do
85
+ before_all { @old_bolts = config[:bolts] }
60
86
 
61
- test "a user-specified bolt" do
62
- Lightning.config[:bolts]['user_bolt']['globs'].should == ['glob1', 'glob2']
87
+ test "and :test generates a test run" do
88
+ mock($stdout).puts ['**/*']
89
+ generate 'wild', :once=>nil, :test=>true
63
90
  end
64
91
 
65
- test "and overwrites existing bolts" do
66
- Lightning.config[:bolts]['overwrite']['globs'].should == ["overwritten"]
92
+ test "generates a valid bolt" do
93
+ mock($stdout).puts /Generated following/, [" **/*"]
94
+ mock(config).save
95
+ generate 'wild', :once=>nil
67
96
  end
68
97
 
69
- test "and preserves bolts that aren't being generated" do
70
- Lightning.config[:bolts]['app'].class.should == Hash
98
+ test "and explicit generator generates a valid bolt" do
99
+ mock($stdout).puts /Generated following/, [" **/*"]
100
+ mock(config).save
101
+ generate 'blah', :once=>'wild'
71
102
  end
103
+ after_all { config[:bolts] = @old_bolts }
72
104
  end
73
105
  end
@@ -6,6 +6,10 @@ ignore_paths:
6
6
  - .git
7
7
 
8
8
  bolts:
9
+ wild_dir:
10
+ globs:
11
+ - **/
12
+ alias: w
9
13
  app:
10
14
  global: true
11
15
  functions:
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ context "shell_command command" do
4
+ def shell_command(*args)
5
+ run_command :shell_command, args
6
+ end
7
+
8
+ test "lists shell commands" do
9
+ mock(Commands).puts config.global_commands.sort
10
+ shell_command('list')
11
+ end
12
+
13
+ context "create" do
14
+ test "prints error if command alias already exists" do
15
+ mock(Commands).puts(/Alias/)
16
+ shell_command 'create', 'cd'
17
+ end
18
+
19
+ test "creates a shell command" do
20
+ mock(Commands).save_and_say /^Created.*'man'/
21
+ shell_command 'create', 'man'
22
+ config.shell_commands['man'].should == 'man'
23
+ end
24
+
25
+ test "creates a shell command with alias" do
26
+ mock(Commands).save_and_say /Created.*'man'/
27
+ shell_command 'create', 'man', 'm'
28
+ config.shell_commands['man'].should == 'm'
29
+ end
30
+ end
31
+
32
+ test "delete deletes a shell command" do
33
+ mock(Commands).save_and_say /Deleted.*'man'/
34
+ config.shell_commands['man'].should.not.be.empty
35
+ shell_command 'delete', 'man'
36
+ config.shell_commands['man'].should.be.nil
37
+ end
38
+
39
+ test "delete prints error if nonexistent shell command" do
40
+ mock(Commands).puts /Can't.*'doy'/
41
+ shell_command 'delete', 'doy'
42
+ end
43
+ end
@@ -6,6 +6,10 @@ Lightning::Config.config_file = File.join(File.dirname(__FILE__), 'lightning.yml
6
6
  include Lightning
7
7
 
8
8
  module Helpers
9
+ def config
10
+ Lightning.config
11
+ end
12
+
9
13
  def run_command(command, args=[])
10
14
  Commands.run([command] + args)
11
15
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 1
9
- version: 0.3.1
8
+ - 2
9
+ version: 0.3.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gabriel Horner
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-09 00:00:00 -04:00
17
+ date: 2010-04-13 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
21
- description: Lightning is a commandline framework that changes how you use paths in your filesystem. Lightning generates shell functions which wrap any command with the ability to autocomplete and interpret paths simply by their basenames. With these functions you don't have to ever type the full path to any file for any command again.
21
+ description: Lightning is a commandline framework that lets users wrap commands with shell functions that are able to refer to any filesystem path by its basename. To achieve this, a group of paths to be translated are defined with shell globs. These shell globs, known as a lightning _bolt_, are then applied to commands to produce functions. In addition to translating basenames to full paths, lightning _functions_ can autocomplete these basenames, resolve conflicts if they have the same name, leave any non-basename arguments untouched, and autocomplete directories above and below a basename.
22
22
  email: gabriel.horner@gmail.com
23
23
  executables:
24
24
  - lightning
@@ -56,15 +56,21 @@ files:
56
56
  - lib/lightning/generators/ruby.rb
57
57
  - lib/lightning/util.rb
58
58
  - lib/lightning/version.rb
59
+ - man/lightning.1
60
+ - man/lightning.1.ronn
61
+ - test/bolt_commands_test.rb
59
62
  - test/bolt_test.rb
60
63
  - test/builder_test.rb
61
64
  - test/commands_test.rb
62
65
  - test/completion_map_test.rb
63
66
  - test/completion_test.rb
64
67
  - test/config_test.rb
68
+ - test/core_commands_test.rb
69
+ - test/function_commands_test.rb
65
70
  - test/function_test.rb
66
71
  - test/generator_test.rb
67
72
  - test/lightning.yml
73
+ - test/shell_command_commands_test.rb
68
74
  - test/test_helper.rb
69
75
  has_rdoc: yard
70
76
  homepage: http://tagaholic.me/lightning
@@ -73,7 +79,7 @@ licenses: []
73
79
  post_install_message:
74
80
  rdoc_options:
75
81
  - --title
76
- - Lightning 0.3.1 Documentation
82
+ - Lightning 0.3.2 Documentation
77
83
  require_paths:
78
84
  - lib
79
85
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -98,12 +104,16 @@ signing_key:
98
104
  specification_version: 3
99
105
  summary: Lightning is a commandline framework that generates shell functions which wrap around commands to autocomplete and translate full paths by their basenames.
100
106
  test_files:
107
+ - test/bolt_commands_test.rb
101
108
  - test/bolt_test.rb
102
109
  - test/builder_test.rb
103
110
  - test/commands_test.rb
104
111
  - test/completion_map_test.rb
105
112
  - test/completion_test.rb
106
113
  - test/config_test.rb
114
+ - test/core_commands_test.rb
115
+ - test/function_commands_test.rb
107
116
  - test/function_test.rb
108
117
  - test/generator_test.rb
118
+ - test/shell_command_commands_test.rb
109
119
  - test/test_helper.rb