vpm 0.0.1 → 0.0.2
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/.gitignore +1 -0
- data/.rvmrc +1 -0
- data/Gemfile.lock +13 -5
- data/README.md +13 -11
- data/Rakefile +26 -6
- data/bin/vpm +1 -1
- data/lib/transaction.rb +27 -0
- data/lib/vpm.rb +52 -16
- data/lib/vpm/command_options.rb +15 -0
- data/lib/vpm/command_options/abstract_command_options.rb +25 -0
- data/lib/vpm/command_options/install.rb +18 -0
- data/lib/vpm/command_options/list.rb +9 -0
- data/lib/vpm/commands.rb +18 -0
- data/lib/vpm/commands/install.rb +37 -0
- data/lib/vpm/commands/install_all_plugins.rb +8 -0
- data/lib/vpm/commands/invalid_command.rb +10 -0
- data/lib/vpm/commands/list.rb +8 -0
- data/lib/vpm/commands/setup.rb +63 -0
- data/lib/vpm/git.rb +17 -0
- data/lib/vpm/manifest_parser.rb +19 -1
- data/lib/vpm/plugin.rb +29 -5
- data/lib/vpm/plugins.rb +55 -0
- data/lib/vpm/runner.rb +55 -0
- data/lib/vpm/tasks.rb +7 -0
- data/lib/vpm/tasks/clone_pathogen.rb +13 -0
- data/lib/vpm/tasks/create_autoload_dir.rb +5 -0
- data/lib/vpm/tasks/create_bundle_dir.rb +5 -0
- data/lib/vpm/tasks/create_directory.rb +16 -0
- data/lib/vpm/tasks/create_our_rc_file.rb +16 -0
- data/lib/vpm/tasks/inject_our_load_script.rb +28 -0
- data/lib/vpm/tasks/move_pathogen_file.rb +17 -0
- data/lib/vpm/version.rb +1 -1
- data/spec/commands/install_spec.rb +10 -0
- data/spec/manifest_parser_spec.rb +3 -13
- data/spec/plugins_spec.rb +41 -0
- data/spec/spec_helper.rb +2 -4
- data/spec/tasks/create_bundle_dir_spec.rb +26 -0
- data/spec/tasks/create_directory_spec.rb +33 -0
- data/spec/tasks/create_our_rc_file_spec.rb +31 -0
- data/spec/tasks/inject_our_load_script_spec.rb +39 -0
- data/spec/tasks/move_pathogen_file_spec.rb +42 -0
- data/spec/transaction_spec.rb +65 -0
- data/vpm.gemspec +6 -4
- metadata +63 -17
- data/lib/vpm/git_plugin.rb +0 -22
- data/spec/git_plugin_spec.rb +0 -12
- data/spec/vpm_test.rb +0 -13
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CreateDirectory do
|
4
|
+
before do
|
5
|
+
@dir = File.expand_path "temp"
|
6
|
+
@task = CreateDirectory.new @dir
|
7
|
+
end
|
8
|
+
|
9
|
+
context "#perform" do
|
10
|
+
it "creates the directory if it doesn't already exist" do
|
11
|
+
Dir.exists?(@dir).should be_false
|
12
|
+
@task.perform
|
13
|
+
Dir.exists?(@dir).should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "works even if the directory already exists" do
|
17
|
+
Dir.exists?(@dir).should be_true
|
18
|
+
@task.perform
|
19
|
+
Dir.exists?(@dir).should be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#undo" do
|
24
|
+
it "removes #{@dir} if this task created it" do
|
25
|
+
FileUtils.rmdir @dir
|
26
|
+
Dir.exists?(@dir).should be_false
|
27
|
+
@task.perform
|
28
|
+
Dir.exists?(@dir).should be_true
|
29
|
+
@task.undo
|
30
|
+
Dir.exists?(@dir).should be_false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CreateOurRCFile do
|
4
|
+
before do
|
5
|
+
@task = CreateOurRCFile.new
|
6
|
+
end
|
7
|
+
|
8
|
+
context "#perform" do
|
9
|
+
it "creates the file if it doesn't exist" do
|
10
|
+
File.exists?(VPM.vpmrc_path).should be_false
|
11
|
+
@task.perform
|
12
|
+
File.exists?(VPM.vpmrc_path).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "inserts the call to pathogen#infect into the file" do
|
16
|
+
@task.perform
|
17
|
+
File.open(VPM.vpmrc_path, "r") do |file|
|
18
|
+
file.read.should include "call pathogen#infect()"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#undo" do
|
24
|
+
it "removes the rc file" do
|
25
|
+
@task.perform
|
26
|
+
File.exists?(VPM.vpmrc_path).should be_true
|
27
|
+
@task.undo
|
28
|
+
File.exists?(VPM.vpmrc_path).should be_false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe InjectOurLoadScript do
|
4
|
+
context "#perform" do
|
5
|
+
it "sources our file at the top of the user's vimrc" do
|
6
|
+
Dir.mktmpdir do |temp_dir|
|
7
|
+
@task = InjectOurLoadScript.new(temp_dir)
|
8
|
+
FileUtils.touch File.expand_path(VPM.vimrc_path)
|
9
|
+
File.read(VPM.vimrc_path).should_not include "source #{VPM.vpmrc_path}"
|
10
|
+
@task.perform
|
11
|
+
File.read(VPM.vimrc_path).start_with?("source #{VPM.vpmrc_path}").should be_true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "retains exactly the same text as the old file" do
|
16
|
+
Dir.mktmpdir do |temp_dir|
|
17
|
+
@task = InjectOurLoadScript.new(temp_dir)
|
18
|
+
File.open(VPM.vimrc_path, "w") {|file| file.puts "test\nother"}
|
19
|
+
File.read(VPM.vimrc_path).should_not include "source #{VPM.vpmrc_path}"
|
20
|
+
@task.perform
|
21
|
+
File.read(VPM.vimrc_path).should == "source #{VPM.vpmrc_path}\ntest\nother\n"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "#undo" do
|
27
|
+
it "replaces the old file" do
|
28
|
+
Dir.mktmpdir do |temp_dir|
|
29
|
+
@task = InjectOurLoadScript.new(temp_dir)
|
30
|
+
File.open(VPM.vimrc_path, "w") {|file| file.print "test\nother"}
|
31
|
+
File.read(VPM.vimrc_path).should_not include "source #{VPM.vpmrc_path}"
|
32
|
+
@task.perform
|
33
|
+
File.read(VPM.vimrc_path).should == "source #{VPM.vpmrc_path}\ntest\nother\n"
|
34
|
+
@task.undo
|
35
|
+
File.read(VPM.vimrc_path).should == "test\nother"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MovePathogenFile do
|
4
|
+
before do
|
5
|
+
@temp_dir = File.expand_path "temp"
|
6
|
+
@source_path = File.join(@temp_dir, "pathogen", "autoload", "pathogen.vim")
|
7
|
+
FileUtils.mkdir_p File.join(@temp_dir, "pathogen", "autoload")
|
8
|
+
FileUtils.touch @source_path
|
9
|
+
@autoload_path = File.join(VPM.vim_dir_path, "autoload")
|
10
|
+
@destination_path = File.join(@autoload_path, "pathogen.vim")
|
11
|
+
FileUtils.mkdir_p @autoload_path
|
12
|
+
@task = MovePathogenFile.new @temp_dir
|
13
|
+
end
|
14
|
+
|
15
|
+
context "#perform" do
|
16
|
+
it "moves the pathogen.vim file from its current location to vim's autoload directory" do
|
17
|
+
File.exists?(@destination_path).should be_false
|
18
|
+
@task.perform
|
19
|
+
File.exists?(@destination_path).should be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#undo" do
|
24
|
+
it "removes pathogen.vim if the task installed it" do
|
25
|
+
FileUtils.rm @destination_path
|
26
|
+
File.exists?(@destination_path).should be_false
|
27
|
+
@task.perform
|
28
|
+
File.exists?(@destination_path).should be_true
|
29
|
+
@task.undo
|
30
|
+
File.exists?(@destination_path).should be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
it "does not remove the file if it already existed" do
|
34
|
+
FileUtils.touch @destination_path
|
35
|
+
File.exists?(@destination_path).should be_true
|
36
|
+
@task.perform
|
37
|
+
File.exists?(@destination_path).should be_true
|
38
|
+
@task.undo
|
39
|
+
File.exists?(@destination_path).should be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Transaction do
|
4
|
+
context "#perform" do
|
5
|
+
before do
|
6
|
+
@transaction = Transaction.new
|
7
|
+
@task_one = double "Task One"
|
8
|
+
@task_two = double "Task Two"
|
9
|
+
@transaction << @task_one
|
10
|
+
@transaction << @task_two
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'runs each task when the transaction is peformed' do
|
14
|
+
@task_one.should_receive("perform").and_return true
|
15
|
+
@task_two.should_receive("perform").and_return true
|
16
|
+
@transaction.perform
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'undoes every task that has been run so far if any of them return false' do
|
20
|
+
@task_one.should_receive("perform").and_return true
|
21
|
+
@task_one.should_receive "undo"
|
22
|
+
@task_two.should_receive("perform").and_return false
|
23
|
+
@task_two.should_receive "undo"
|
24
|
+
@transaction.perform
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'skips any tasks following a failing one' do
|
28
|
+
@task_one.should_receive("perform").and_return false
|
29
|
+
@task_one.should_receive "undo"
|
30
|
+
@task_two.should_not_receive "peform"
|
31
|
+
@transaction.perform
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'undoes the tasks in the opposite order they were performed' do
|
35
|
+
@transaction = Transaction.new
|
36
|
+
result = []
|
37
|
+
@task_one = Object.new
|
38
|
+
@task_two = Object.new
|
39
|
+
@task_one.stub(:perform).and_return true
|
40
|
+
@task_one.stub(:undo) do result << "task one" end
|
41
|
+
@task_two.stub(:perform).and_return false
|
42
|
+
@task_two.stub(:undo) do result << "task two" end
|
43
|
+
@transaction << @task_one
|
44
|
+
@transaction << @task_two
|
45
|
+
@transaction.perform
|
46
|
+
result.should == ["task two", "task one"]
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'undoes all of the tasks if one raises an execption' do
|
50
|
+
@task_one.should_receive("perform").and_return true
|
51
|
+
@task_one.should_receive "undo"
|
52
|
+
@task_two.should_receive("perform") { raise "an error" }
|
53
|
+
@task_two.should_receive "undo"
|
54
|
+
expect { @transaction.perform }.to raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'rethrows exceptions raised by a task' do
|
58
|
+
@task_one.should_receive("perform").and_return true
|
59
|
+
@task_one.should_receive "undo"
|
60
|
+
@task_two.should_receive("perform") { raise "an error" }
|
61
|
+
@task_two.should_receive "undo"
|
62
|
+
expect { @transaction.perform }.to raise_error
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/vpm.gemspec
CHANGED
@@ -5,10 +5,11 @@ require "vpm/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "vpm"
|
7
7
|
s.version = VPM::VERSION
|
8
|
-
s.authors = ["Jingwen Owen Ou"]
|
8
|
+
s.authors = ["Jingwen Owen Ou", "Michael Baker"]
|
9
9
|
s.email = ["jingweno@gmail.com"]
|
10
|
-
s.homepage = ""
|
11
|
-
s.summary = %q{An awesome utility for managing
|
10
|
+
s.homepage = "https://github.com/jingweno/vpm"
|
11
|
+
s.summary = %q{An awesome utility for managing Vim plugins}
|
12
|
+
s.description = %q{An awesome utility for managing Vim plugins}
|
12
13
|
|
13
14
|
s.rubyforge_project = "vpm"
|
14
15
|
|
@@ -19,6 +20,7 @@ Gem::Specification.new do |s|
|
|
19
20
|
|
20
21
|
# specify any dependencies here; for example:
|
21
22
|
s.add_development_dependency "rake"
|
22
|
-
s.add_development_dependency "
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
s.add_development_dependency "fakefs"
|
23
25
|
# s.add_runtime_dependency "rest-client"
|
24
26
|
end
|
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jingwen Owen Ou
|
9
|
+
- Michael Baker
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
13
|
+
date: 2012-01-21 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rake
|
16
|
-
requirement: &
|
17
|
+
requirement: &2154096600 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
@@ -21,10 +22,10 @@ dependencies:
|
|
21
22
|
version: '0'
|
22
23
|
type: :development
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
+
version_requirements: *2154096600
|
25
26
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
27
|
+
name: rspec
|
28
|
+
requirement: &2154096180 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
30
|
requirements:
|
30
31
|
- - ! '>='
|
@@ -32,8 +33,19 @@ dependencies:
|
|
32
33
|
version: '0'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
|
36
|
+
version_requirements: *2154096180
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: fakefs
|
39
|
+
requirement: &2154095760 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *2154095760
|
48
|
+
description: An awesome utility for managing Vim plugins
|
37
49
|
email:
|
38
50
|
- jingweno@gmail.com
|
39
51
|
executables:
|
@@ -42,22 +54,50 @@ extensions: []
|
|
42
54
|
extra_rdoc_files: []
|
43
55
|
files:
|
44
56
|
- .gitignore
|
57
|
+
- .rvmrc
|
45
58
|
- Gemfile
|
46
59
|
- Gemfile.lock
|
47
60
|
- README.md
|
48
61
|
- Rakefile
|
49
62
|
- bin/vpm
|
63
|
+
- lib/transaction.rb
|
50
64
|
- lib/vpm.rb
|
51
|
-
- lib/vpm/
|
65
|
+
- lib/vpm/command_options.rb
|
66
|
+
- lib/vpm/command_options/abstract_command_options.rb
|
67
|
+
- lib/vpm/command_options/install.rb
|
68
|
+
- lib/vpm/command_options/list.rb
|
69
|
+
- lib/vpm/commands.rb
|
70
|
+
- lib/vpm/commands/install.rb
|
71
|
+
- lib/vpm/commands/install_all_plugins.rb
|
72
|
+
- lib/vpm/commands/invalid_command.rb
|
73
|
+
- lib/vpm/commands/list.rb
|
74
|
+
- lib/vpm/commands/setup.rb
|
75
|
+
- lib/vpm/git.rb
|
52
76
|
- lib/vpm/manifest_parser.rb
|
53
77
|
- lib/vpm/plugin.rb
|
78
|
+
- lib/vpm/plugins.rb
|
79
|
+
- lib/vpm/runner.rb
|
80
|
+
- lib/vpm/tasks.rb
|
81
|
+
- lib/vpm/tasks/clone_pathogen.rb
|
82
|
+
- lib/vpm/tasks/create_autoload_dir.rb
|
83
|
+
- lib/vpm/tasks/create_bundle_dir.rb
|
84
|
+
- lib/vpm/tasks/create_directory.rb
|
85
|
+
- lib/vpm/tasks/create_our_rc_file.rb
|
86
|
+
- lib/vpm/tasks/inject_our_load_script.rb
|
87
|
+
- lib/vpm/tasks/move_pathogen_file.rb
|
54
88
|
- lib/vpm/version.rb
|
55
|
-
- spec/
|
89
|
+
- spec/commands/install_spec.rb
|
56
90
|
- spec/manifest_parser_spec.rb
|
91
|
+
- spec/plugins_spec.rb
|
57
92
|
- spec/spec_helper.rb
|
58
|
-
- spec/
|
93
|
+
- spec/tasks/create_bundle_dir_spec.rb
|
94
|
+
- spec/tasks/create_directory_spec.rb
|
95
|
+
- spec/tasks/create_our_rc_file_spec.rb
|
96
|
+
- spec/tasks/inject_our_load_script_spec.rb
|
97
|
+
- spec/tasks/move_pathogen_file_spec.rb
|
98
|
+
- spec/transaction_spec.rb
|
59
99
|
- vpm.gemspec
|
60
|
-
homepage:
|
100
|
+
homepage: https://github.com/jingweno/vpm
|
61
101
|
licenses: []
|
62
102
|
post_install_message:
|
63
103
|
rdoc_options: []
|
@@ -71,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
111
|
version: '0'
|
72
112
|
segments:
|
73
113
|
- 0
|
74
|
-
hash:
|
114
|
+
hash: -1969408185855622509
|
75
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
116
|
none: false
|
77
117
|
requirements:
|
@@ -80,15 +120,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
120
|
version: '0'
|
81
121
|
segments:
|
82
122
|
- 0
|
83
|
-
hash:
|
123
|
+
hash: -1969408185855622509
|
84
124
|
requirements: []
|
85
125
|
rubyforge_project: vpm
|
86
126
|
rubygems_version: 1.8.10
|
87
127
|
signing_key:
|
88
128
|
specification_version: 3
|
89
|
-
summary: An awesome utility for managing
|
129
|
+
summary: An awesome utility for managing Vim plugins
|
90
130
|
test_files:
|
91
|
-
- spec/
|
131
|
+
- spec/commands/install_spec.rb
|
92
132
|
- spec/manifest_parser_spec.rb
|
133
|
+
- spec/plugins_spec.rb
|
93
134
|
- spec/spec_helper.rb
|
94
|
-
- spec/
|
135
|
+
- spec/tasks/create_bundle_dir_spec.rb
|
136
|
+
- spec/tasks/create_directory_spec.rb
|
137
|
+
- spec/tasks/create_our_rc_file_spec.rb
|
138
|
+
- spec/tasks/inject_our_load_script_spec.rb
|
139
|
+
- spec/tasks/move_pathogen_file_spec.rb
|
140
|
+
- spec/transaction_spec.rb
|
data/lib/vpm/git_plugin.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
module VPM
|
2
|
-
class GitPlugin < Plugin
|
3
|
-
attr_accessor :git_commander
|
4
|
-
|
5
|
-
def initialize(name, options)
|
6
|
-
super
|
7
|
-
@git_commander = GitCommander
|
8
|
-
end
|
9
|
-
|
10
|
-
def install
|
11
|
-
@git_commander.clone(options[:git], VPM.plugin_dir)
|
12
|
-
end
|
13
|
-
|
14
|
-
module GitCommander
|
15
|
-
def self.clone(repo, destination)
|
16
|
-
Dir.chdir destination do
|
17
|
-
`git clone #{repo}`
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/spec/git_plugin_spec.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe VPM::GitPlugin do
|
4
|
-
it "intalls the plugin if it hasn't" do
|
5
|
-
mock_git_command = MiniTest::Mock.new
|
6
|
-
mock_git_command.expect(:clone, true, ["https://xxx.git", "#{ENV['HOME']}/.vim/bundle"])
|
7
|
-
plugin = VPM::GitPlugin.new("command-t", :git => "https://xxx.git")
|
8
|
-
plugin.git_commander = mock_git_command
|
9
|
-
plugin.install
|
10
|
-
mock_git_command.verify
|
11
|
-
end
|
12
|
-
end
|
data/spec/vpm_test.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe VPM do
|
4
|
-
it "parses install command with args" do
|
5
|
-
parser = MiniTest::Mock.new
|
6
|
-
|
7
|
-
VPM.run(['intstall', 'xxx.git'])
|
8
|
-
# ['<command'>, args]
|
9
|
-
# InstallCommand.run(args)
|
10
|
-
# RemoveCommadn.run(args)
|
11
|
-
VPM.parse
|
12
|
-
end
|
13
|
-
end
|