vimius 0.0.1.beta1
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/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +26 -0
- data/Guardfile +10 -0
- data/README.md +28 -0
- data/Rakefile +6 -0
- data/bin/vimius +9 -0
- data/lib/vimius.rb +79 -0
- data/lib/vimius/cli.rb +22 -0
- data/lib/vimius/cli/install.rb +45 -0
- data/lib/vimius/cli/submodules.rb +23 -0
- data/lib/vimius/cli/version.rb +20 -0
- data/lib/vimius/errors.rb +12 -0
- data/lib/vimius/gems.rb +38 -0
- data/lib/vimius/git.rb +26 -0
- data/lib/vimius/github.rb +13 -0
- data/lib/vimius/plugins.rb +111 -0
- data/lib/vimius/shell.rb +19 -0
- data/lib/vimius/submodules.rb +175 -0
- data/lib/vimius/version.rb +17 -0
- data/lib/vimius/vim.rb +12 -0
- data/lib/vimius/vimius_ascii.txt +13 -0
- data/spec/lib/vimius/cli/install_spec.rb +90 -0
- data/spec/lib/vimius/cli/submodules_spec.rb +0 -0
- data/spec/lib/vimius/cli/version_spec.rb +22 -0
- data/spec/lib/vimius/cli_spec.rb +11 -0
- data/spec/lib/vimius/shell_spec.rb +9 -0
- data/spec/lib/vimius/submodules_spec.rb +474 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/cli_matchers.rb +56 -0
- data/vimius.gemspec +67 -0
- metadata +230 -0
data/lib/vimius/shell.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
class Submodules < TgConfig
|
4
|
+
|
5
|
+
# Return the submodules
|
6
|
+
#
|
7
|
+
# @return [Hash]
|
8
|
+
def submodules
|
9
|
+
@submodules ||= self[:submodules].map { |k, v| v.merge(:name => k) }
|
10
|
+
end
|
11
|
+
|
12
|
+
# Return the submodules bu group
|
13
|
+
#
|
14
|
+
# @param [HashWithIndifferentAccess] submodules
|
15
|
+
# @return [Hash]
|
16
|
+
def submodules_by_group(submodules = nil)
|
17
|
+
submodules ||= self.submodules
|
18
|
+
|
19
|
+
submodules.group_by { |submodule| submodule[:group] }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return the submodules bu name
|
23
|
+
#
|
24
|
+
# @param [HashWithIndifferentAccess] submodules
|
25
|
+
# @return [Hash]
|
26
|
+
def submodules_by_name(submodules = nil)
|
27
|
+
submodules ||= self.submodules
|
28
|
+
|
29
|
+
res = {}
|
30
|
+
submodules.each do |submodule|
|
31
|
+
res[submodule[:name]] = submodule
|
32
|
+
end
|
33
|
+
res
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return the active submodules by group
|
37
|
+
#
|
38
|
+
# @return [Hash]
|
39
|
+
def active_by_group
|
40
|
+
submodules_by_group(active)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return the active submodules by name
|
44
|
+
#
|
45
|
+
# @return [Hash]
|
46
|
+
def active_by_name
|
47
|
+
submodules_by_name(active)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Return the inactive submodules by group
|
51
|
+
#
|
52
|
+
# @return [Hash]
|
53
|
+
def inactive_by_group
|
54
|
+
submodules_by_group(inactive)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Return the inactive submodules by name
|
58
|
+
#
|
59
|
+
# @return [Hash]
|
60
|
+
def inactive_by_name
|
61
|
+
submodules_by_name(inactive)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Return a submodule along with all its dependencies
|
65
|
+
#
|
66
|
+
# @return [Array]
|
67
|
+
def submodule_with_dependencies(name)
|
68
|
+
res = [submodule(name)]
|
69
|
+
dependencies(name).each do |dependency|
|
70
|
+
res << submodule(dependency)
|
71
|
+
end
|
72
|
+
|
73
|
+
res.flatten.uniq
|
74
|
+
end
|
75
|
+
|
76
|
+
# Find the submodule given bu the name
|
77
|
+
#
|
78
|
+
# @param [String] name
|
79
|
+
# @return [Hash]
|
80
|
+
def submodule(name)
|
81
|
+
submodules.select { |s| s[:name].to_s == name.to_s }.
|
82
|
+
first
|
83
|
+
end
|
84
|
+
|
85
|
+
# Return an array of active submodules
|
86
|
+
#
|
87
|
+
# @return [Array]
|
88
|
+
def active
|
89
|
+
Vimius.config[:submodules].map do |submodule|
|
90
|
+
submodule(submodule)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Return an array of inactive submodiles
|
95
|
+
#
|
96
|
+
# @return [Array]
|
97
|
+
def inactive
|
98
|
+
submodules - active
|
99
|
+
end
|
100
|
+
|
101
|
+
# Return all available groups
|
102
|
+
#
|
103
|
+
# @return [Array]
|
104
|
+
def groups
|
105
|
+
submodules.map { |submodule| submodule[:group] }.uniq.sort
|
106
|
+
end
|
107
|
+
|
108
|
+
# Activate a submodule
|
109
|
+
#
|
110
|
+
# @param [String] Submodule's name
|
111
|
+
def activate(submodule_name)
|
112
|
+
Vimius.config[:submodules] ||= []
|
113
|
+
Vimius.config[:submodules] += [submodule_name] unless active?(submodule_name)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Deactive a submodule
|
117
|
+
#
|
118
|
+
# @param [String] Submodule's name
|
119
|
+
def deactivate(submodule_name)
|
120
|
+
return unless Vimius.config[:submodules]
|
121
|
+
return unless active?(submodule_name)
|
122
|
+
|
123
|
+
Vimius.config[:submodules] -= [submodule_name]
|
124
|
+
end
|
125
|
+
|
126
|
+
# Check if a submodule is active
|
127
|
+
#
|
128
|
+
# @param [String] Submodule's name
|
129
|
+
# @return [Boolean] true if submodule is active
|
130
|
+
def active?(submodule_name)
|
131
|
+
active_by_name.map {|k, v| k.to_s}.include?(submodule_name.to_s)
|
132
|
+
end
|
133
|
+
|
134
|
+
# Check if a submodule is inactive
|
135
|
+
#
|
136
|
+
# @param [String] Submodule's name
|
137
|
+
# @return [Boolean] true if submodule is inactive
|
138
|
+
def inactive?(submodule_name)
|
139
|
+
!!!active?(submodule_name) && submodule(submodule_name).present?
|
140
|
+
end
|
141
|
+
|
142
|
+
# Toggle a submodule
|
143
|
+
#
|
144
|
+
# @param [String] Submodule's name
|
145
|
+
# @raise [SubmoduleNotFoundError]
|
146
|
+
def toggle(submodule_name)
|
147
|
+
if active?(submodule_name)
|
148
|
+
deactivate(submodule_name)
|
149
|
+
elsif inactive?(submodule_name)
|
150
|
+
activate(submodule_name)
|
151
|
+
else
|
152
|
+
raise SubmoduleNotFoundError
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
protected
|
157
|
+
# Return a list of all dependencies of a submodule (recursive)
|
158
|
+
#
|
159
|
+
# @param [String] name
|
160
|
+
# @return [Array]
|
161
|
+
def dependencies(name)
|
162
|
+
dependencies = []
|
163
|
+
submodule = submodule(name)
|
164
|
+
if submodule.has_key?(:dependencies)
|
165
|
+
submodule[:dependencies].each do |dependency|
|
166
|
+
dependencies << dependency
|
167
|
+
dependencies << dependencies(dependency)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
dependencies.flatten.uniq.sort
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
MAJOR = 0
|
4
|
+
MINOR = 0
|
5
|
+
TINY = 1
|
6
|
+
PRE = 'beta1'
|
7
|
+
|
8
|
+
def self.version
|
9
|
+
# Init the version
|
10
|
+
version = [MAJOR, MINOR, TINY]
|
11
|
+
# Add the pre if available
|
12
|
+
version << PRE unless PRE.nil? || PRE !~ /\S/
|
13
|
+
# Return the version joined by a dot
|
14
|
+
version.join('.')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/vimius/vim.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
___ __ ______
|
3
|
+
__ | / /_____ ___ /_____________ _______ ___ _____
|
4
|
+
__ | /| / / _ _ \__ / _ ___/_ __ \__ __ `__ \_ _ \
|
5
|
+
__ |/ |/ / / __/_ / / /__ / /_/ /_ / / / / // __/
|
6
|
+
____/|__/ \___/ /_/ \___/ \____/ /_/ /_/ /_/ \___/
|
7
|
+
|
8
|
+
|
9
|
+
_____ ___ _______ _____ ______
|
10
|
+
__ /_______ __ | / /___(_)_______ ___ ___(_)____ _____________ /
|
11
|
+
_ __/_ __ \ __ | / / __ / __ __ `__ \__ / _ / / /__ ___/__ /
|
12
|
+
/ /_ / /_/ / __ |/ / _ / _ / / / / /_ / / /_/ / _(__ ) /_/
|
13
|
+
\__/ \____/ _____/ /_/ /_/ /_/ /_/ /_/ \__,_/ /____/ (_)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class CliInstallTestClass < ::Thor
|
4
|
+
include CLI::Install
|
5
|
+
end
|
6
|
+
|
7
|
+
module CLI
|
8
|
+
describe Install do
|
9
|
+
subject { CliInstallTestClass.new }
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@file_handler = mock "File Handler"
|
13
|
+
@file_handler.stubs(:write)
|
14
|
+
::File.stubs(:open).with('/tmp/vimius_bootstrap.sh', 'w').yields(@file_handler)
|
15
|
+
Shell.stubs(:exec)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#install" do
|
19
|
+
it { should respond_to :install }
|
20
|
+
|
21
|
+
it "should call sanity_check" do
|
22
|
+
subject.expects(:sanity_check).once
|
23
|
+
|
24
|
+
subject.install
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should write the bootstrap" do
|
28
|
+
::File.expects(:open).with('/tmp/vimius_bootstrap.sh', 'w').
|
29
|
+
yields(@file_handler).once
|
30
|
+
|
31
|
+
subject.install
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should call Shell.exec" do
|
35
|
+
Shell.expects(:exec).with("cat /tmp/vimius_bootstrap.sh | sh", true).once
|
36
|
+
|
37
|
+
subject.install
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context '#sanity_check' do
|
42
|
+
before(:each) do
|
43
|
+
::File.stubs(:exists?).with(USER_GVIMRC_PATH).returns(true)
|
44
|
+
::File.stubs(:exists?).with(USER_VIMRC_PATH).returns(true)
|
45
|
+
::File.stubs(:exists?).with(USER_VIM_PATH).returns(true)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should check that USER_VIM_PATH exists" do
|
49
|
+
::File.expects(:exists?).with(USER_VIM_PATH).returns(true).once
|
50
|
+
|
51
|
+
subject.send :sanity_check
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should check that USER_VIMRC_PATH exists" do
|
55
|
+
::File.expects(:exists?).with(USER_VIMRC_PATH).returns(true).once
|
56
|
+
|
57
|
+
subject.send :sanity_check
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should check that USER_GVIMRC_PATH exists" do
|
61
|
+
::File.expects(:exists?).with(USER_GVIMRC_PATH).returns(true).once
|
62
|
+
|
63
|
+
subject.send :sanity_check
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'failure' do
|
67
|
+
it "should abort if USER_VIM_PATH exists." do
|
68
|
+
::File.expects(:exists?).with(USER_VIM_PATH).returns(false).once
|
69
|
+
|
70
|
+
subject.send(:sanity_check).should be_false
|
71
|
+
"#{USER_VIM_PATH} exists, cannot continue.".should be_in_output
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should abort if USER_VIMRC_PATH exists." do
|
75
|
+
::File.expects(:exists?).with(USER_VIMRC_PATH).returns(false).once
|
76
|
+
|
77
|
+
subject.send(:sanity_check).should be_false
|
78
|
+
"#{USER_VIMRC_PATH} exists, cannot continue.".should be_in_output
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should abort if USER_GVIMRC_PATH exists." do
|
82
|
+
::File.expects(:exists?).with(USER_GVIMRC_PATH).returns(false).once
|
83
|
+
|
84
|
+
subject.send(:sanity_check).should be_false
|
85
|
+
"#{USER_GVIMRC_PATH} exists, cannot continue.".should be_in_output
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class CliVersionTestClass < ::Thor
|
4
|
+
include CLI::Version
|
5
|
+
end
|
6
|
+
|
7
|
+
module CLI
|
8
|
+
describe Version do
|
9
|
+
subject { CliVersionTestClass.new }
|
10
|
+
|
11
|
+
context "#version#" do
|
12
|
+
it { should respond_to :version }
|
13
|
+
|
14
|
+
it "should prints Vimius version" do
|
15
|
+
subject.version
|
16
|
+
|
17
|
+
"Vimius version #{Vimius.version}".
|
18
|
+
should be_in_output
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,474 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Submodules do
|
4
|
+
let(:submodules) do
|
5
|
+
{
|
6
|
+
"submodules" => {
|
7
|
+
"pathogen" => {
|
8
|
+
"path" => "vimius/vim/core/pathogen",
|
9
|
+
"group" => "core",
|
10
|
+
},
|
11
|
+
"tlib" => {
|
12
|
+
"path" => "vimius/vim/tools/tlib",
|
13
|
+
"group" => "tools",
|
14
|
+
"dependencies" => ["pathogen"],
|
15
|
+
},
|
16
|
+
"github" => {
|
17
|
+
"path" => "vimius/vim/tools/github",
|
18
|
+
"group" => "tools",
|
19
|
+
"dependencies" => ["tlib", "pathogen"],
|
20
|
+
},
|
21
|
+
"command-t" => {
|
22
|
+
"path" => "vimius/vim/tools/command-t",
|
23
|
+
"group" => "tools",
|
24
|
+
"dependencies" => ["tlib"],
|
25
|
+
},
|
26
|
+
},
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:expected_submodules) do
|
31
|
+
[
|
32
|
+
{
|
33
|
+
"path" => "vimius/vim/core/pathogen",
|
34
|
+
"group" => "core",
|
35
|
+
"name" => "pathogen",
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"path" => "vimius/vim/tools/tlib",
|
39
|
+
"group" => "tools",
|
40
|
+
"dependencies" => ["pathogen"],
|
41
|
+
"name" => "tlib",
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"path" => "vimius/vim/tools/github",
|
45
|
+
"group" => "tools",
|
46
|
+
"dependencies" => ["tlib", "pathogen"],
|
47
|
+
"name" => "github",
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"path" => "vimius/vim/tools/command-t",
|
51
|
+
"group" => "tools",
|
52
|
+
"dependencies" => ["tlib"],
|
53
|
+
"name" => "command-t",
|
54
|
+
},
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
let(:expected_active_submodules) do
|
59
|
+
[
|
60
|
+
{
|
61
|
+
"path" => "vimius/vim/core/pathogen",
|
62
|
+
"group" => "core",
|
63
|
+
"name" => "pathogen",
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"path" => "vimius/vim/tools/tlib",
|
67
|
+
"group" => "tools",
|
68
|
+
"dependencies" => ["pathogen"],
|
69
|
+
"name" => "tlib",
|
70
|
+
},
|
71
|
+
{
|
72
|
+
"path" => "vimius/vim/tools/github",
|
73
|
+
"group" => "tools",
|
74
|
+
"dependencies" => ["tlib", "pathogen"],
|
75
|
+
"name" => "github",
|
76
|
+
},
|
77
|
+
]
|
78
|
+
end
|
79
|
+
|
80
|
+
let(:expected_inactive_submodules) do
|
81
|
+
[
|
82
|
+
{
|
83
|
+
"path" => "vimius/vim/tools/command-t",
|
84
|
+
"group" => "tools",
|
85
|
+
"dependencies" => ["tlib"],
|
86
|
+
"name" => "command-t",
|
87
|
+
},
|
88
|
+
]
|
89
|
+
end
|
90
|
+
|
91
|
+
let(:submodules_by_group) do
|
92
|
+
{
|
93
|
+
"core" =>
|
94
|
+
[
|
95
|
+
{
|
96
|
+
"path" => "vimius/vim/core/pathogen",
|
97
|
+
"group" => "core",
|
98
|
+
"name" => "pathogen",
|
99
|
+
},
|
100
|
+
],
|
101
|
+
"tools" =>
|
102
|
+
[
|
103
|
+
{
|
104
|
+
"path" => "vimius/vim/tools/tlib",
|
105
|
+
"group" => "tools",
|
106
|
+
"dependencies" => ["pathogen"],
|
107
|
+
"name" => "tlib",
|
108
|
+
},
|
109
|
+
{
|
110
|
+
"path" => "vimius/vim/tools/github",
|
111
|
+
"group" => "tools",
|
112
|
+
"dependencies" => ["tlib", "pathogen"],
|
113
|
+
"name" => "github",
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"path" => "vimius/vim/tools/command-t",
|
117
|
+
"group" => "tools",
|
118
|
+
"dependencies" => ["tlib"],
|
119
|
+
"name" => "command-t",
|
120
|
+
},
|
121
|
+
],
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
let (:submodules_by_name) do
|
126
|
+
{
|
127
|
+
"pathogen" => {
|
128
|
+
"path" => "vimius/vim/core/pathogen",
|
129
|
+
"group" => "core",
|
130
|
+
"name" => "pathogen",
|
131
|
+
},
|
132
|
+
"tlib" => {
|
133
|
+
"path" => "vimius/vim/tools/tlib",
|
134
|
+
"group" => "tools",
|
135
|
+
"dependencies" => ["pathogen"],
|
136
|
+
"name" => "tlib",
|
137
|
+
},
|
138
|
+
"github" => {
|
139
|
+
"path" => "vimius/vim/tools/github",
|
140
|
+
"group" => "tools",
|
141
|
+
"dependencies" => ["tlib", "pathogen"],
|
142
|
+
"name" => "github",
|
143
|
+
},
|
144
|
+
"command-t" => {
|
145
|
+
"path" => "vimius/vim/tools/command-t",
|
146
|
+
"group" => "tools",
|
147
|
+
"dependencies" => ["tlib"],
|
148
|
+
"name" => "command-t",
|
149
|
+
},
|
150
|
+
}
|
151
|
+
end
|
152
|
+
|
153
|
+
let(:active_by_group) do
|
154
|
+
{
|
155
|
+
"core" =>
|
156
|
+
[
|
157
|
+
{
|
158
|
+
"path" => "vimius/vim/core/pathogen",
|
159
|
+
"group" => "core",
|
160
|
+
"name" => "pathogen",
|
161
|
+
},
|
162
|
+
],
|
163
|
+
"tools" =>
|
164
|
+
[
|
165
|
+
{
|
166
|
+
"path" => "vimius/vim/tools/tlib",
|
167
|
+
"group" => "tools",
|
168
|
+
"dependencies" => ["pathogen"],
|
169
|
+
"name" => "tlib",
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"path" => "vimius/vim/tools/github",
|
173
|
+
"group" => "tools",
|
174
|
+
"dependencies" => ["tlib", "pathogen"],
|
175
|
+
"name" => "github",
|
176
|
+
},
|
177
|
+
],
|
178
|
+
}
|
179
|
+
end
|
180
|
+
|
181
|
+
let (:active_by_name) do
|
182
|
+
{
|
183
|
+
"pathogen" => {
|
184
|
+
"path" => "vimius/vim/core/pathogen",
|
185
|
+
"group" => "core",
|
186
|
+
"name" => "pathogen",
|
187
|
+
},
|
188
|
+
"tlib" => {
|
189
|
+
"path" => "vimius/vim/tools/tlib",
|
190
|
+
"group" => "tools",
|
191
|
+
"dependencies" => ["pathogen"],
|
192
|
+
"name" => "tlib",
|
193
|
+
},
|
194
|
+
"github" => {
|
195
|
+
"path" => "vimius/vim/tools/github",
|
196
|
+
"group" => "tools",
|
197
|
+
"dependencies" => ["tlib", "pathogen"],
|
198
|
+
"name" => "github",
|
199
|
+
},
|
200
|
+
}
|
201
|
+
end
|
202
|
+
|
203
|
+
let(:inactive_by_group) do
|
204
|
+
{
|
205
|
+
"tools" =>
|
206
|
+
[
|
207
|
+
{
|
208
|
+
"path" => "vimius/vim/tools/command-t",
|
209
|
+
"group" => "tools",
|
210
|
+
"dependencies" => ["tlib"],
|
211
|
+
"name" => "command-t",
|
212
|
+
},
|
213
|
+
],
|
214
|
+
}
|
215
|
+
end
|
216
|
+
|
217
|
+
let (:inactive_by_name) do
|
218
|
+
{
|
219
|
+
"command-t" => {
|
220
|
+
"path" => "vimius/vim/tools/command-t",
|
221
|
+
"group" => "tools",
|
222
|
+
"dependencies" => ["tlib"],
|
223
|
+
"name" => "command-t",
|
224
|
+
},
|
225
|
+
}
|
226
|
+
end
|
227
|
+
|
228
|
+
before(:each) do
|
229
|
+
::File.stubs(:exists?).with(MODULES_FILE).returns(true)
|
230
|
+
::File.stubs(:readable?).with(MODULES_FILE).returns(true)
|
231
|
+
::File.stubs(:writable?).with(MODULES_FILE).returns(true)
|
232
|
+
|
233
|
+
::File.stubs(:exists?).with(CONFIG_FILE).returns(true)
|
234
|
+
::File.stubs(:readable?).with(CONFIG_FILE).returns(true)
|
235
|
+
::File.stubs(:writable?).with(CONFIG_FILE).returns(true)
|
236
|
+
|
237
|
+
Vimius::Submodules.any_instance.stubs(:parse_config_file).
|
238
|
+
returns(submodules.with_indifferent_access)
|
239
|
+
TgConfig.any_instance.stubs(:parse_config_file).
|
240
|
+
returns({"submodules" => ["pathogen", "tlib", "github"]}.with_indifferent_access)
|
241
|
+
end
|
242
|
+
|
243
|
+
after(:each) do
|
244
|
+
Vimius.config.send(:instance_variable_set, :@config, nil)
|
245
|
+
subject.send(:instance_variable_set, :@config, nil)
|
246
|
+
end
|
247
|
+
|
248
|
+
subject { Submodules.new MODULES_FILE }
|
249
|
+
|
250
|
+
context "#submodules" do
|
251
|
+
it { should respond_to :submodules }
|
252
|
+
|
253
|
+
it "should return submodules" do
|
254
|
+
subject.submodules.should == expected_submodules
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should add the name for each submodule" do
|
258
|
+
subject.submodules.first["name"].should == "pathogen"
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
context "#dependencies" do
|
263
|
+
it {should respond_to :dependencies}
|
264
|
+
|
265
|
+
it "should return tlib and pathogen as dependencies of command-t" do
|
266
|
+
subject.send(:dependencies, 'command-t').should == ["pathogen", "tlib"]
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
context "#submodule" do
|
271
|
+
it { should respond_to :submodule }
|
272
|
+
|
273
|
+
it "should return the submodule we're looking for" do
|
274
|
+
subject.send(:submodule, :pathogen).should == expected_submodules.first
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
context "#submodule_with_dependencies" do
|
279
|
+
it { should respond_to :submodule_with_dependencies}
|
280
|
+
|
281
|
+
it "should return the correct module from the submodules hash" do
|
282
|
+
subject.submodule_with_dependencies("pathogen").first.should == expected_submodules.first
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should return the name with the submodule" do
|
286
|
+
subject.submodule_with_dependencies("pathogen").first["name"].should == "pathogen"
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should return all dependencies when getting the module command-t" do
|
290
|
+
subject.submodule_with_dependencies("command-t").should include expected_submodules[1]
|
291
|
+
subject.submodule_with_dependencies("command-t").should include expected_submodules.first
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should not include the same dependency twice" do
|
295
|
+
subject.submodule_with_dependencies("github").select { |c| c["name"] == "pathogen"}.size.should == 1
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
context "#groups" do
|
300
|
+
it { should respond_to :groups }
|
301
|
+
|
302
|
+
it "should return core and tools " do
|
303
|
+
subject.groups.should == ["core", "tools"]
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
context "#active" do
|
308
|
+
it { should respond_to :active }
|
309
|
+
|
310
|
+
its(:active) { should == expected_active_submodules }
|
311
|
+
end
|
312
|
+
|
313
|
+
context "#inactive" do
|
314
|
+
it { should respond_to :inactive }
|
315
|
+
|
316
|
+
its(:inactive) { should == expected_inactive_submodules }
|
317
|
+
end
|
318
|
+
|
319
|
+
context "#submodules_by_group" do
|
320
|
+
it { should respond_to :submodules_by_group }
|
321
|
+
|
322
|
+
it "should return submodules_by_group" do
|
323
|
+
subject.submodules_by_group.should == submodules_by_group
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
context "#submodules_by_name" do
|
328
|
+
it { should respond_to :submodules_by_name }
|
329
|
+
|
330
|
+
it "should return submodules_by_name" do
|
331
|
+
subject.submodules_by_name.should == submodules_by_name
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
context "#active_by_group" do
|
336
|
+
it { should respond_to :active_by_group }
|
337
|
+
|
338
|
+
it "should return active_by_group" do
|
339
|
+
subject.active_by_group.should == active_by_group
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
context "#active_by_name" do
|
344
|
+
it { should respond_to :active_by_name }
|
345
|
+
|
346
|
+
it "should return active_by_name" do
|
347
|
+
subject.active_by_name.should == active_by_name
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context "#active_by_name" do
|
352
|
+
it { should respond_to :active_by_name }
|
353
|
+
|
354
|
+
it "should return active_by_name" do
|
355
|
+
subject.active_by_name.should == active_by_name
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
context "#active_by_name" do
|
360
|
+
it { should respond_to :active_by_name }
|
361
|
+
|
362
|
+
it "should return active_by_name" do
|
363
|
+
subject.active_by_name.should == active_by_name
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
context "#active?" do
|
368
|
+
it { should respond_to :active? }
|
369
|
+
|
370
|
+
it "should return true for tlib" do
|
371
|
+
subject.active?(:tlib).should be_true
|
372
|
+
end
|
373
|
+
|
374
|
+
it "should return false for command-t" do
|
375
|
+
subject.active?("command-t").should be_false
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
context "#inactive?" do
|
380
|
+
it { should respond_to :inactive? }
|
381
|
+
|
382
|
+
it "should return false for tlib" do
|
383
|
+
subject.inactive?(:tlib).should be_false
|
384
|
+
end
|
385
|
+
|
386
|
+
it "should return true for command-t" do
|
387
|
+
subject.inactive?("command-t").should be_true
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
context "#activate" do
|
392
|
+
it { should respond_to :activate }
|
393
|
+
|
394
|
+
it "should activate a module" do
|
395
|
+
subject.active.should == expected_active_submodules
|
396
|
+
|
397
|
+
subject.activate("command-t")
|
398
|
+
|
399
|
+
subject.active.should == expected_submodules # => expected_submodules includes command-t
|
400
|
+
# and all activated submodules
|
401
|
+
end
|
402
|
+
|
403
|
+
it "should not call save on the config" do
|
404
|
+
Vimius.config.expects(:save).never
|
405
|
+
|
406
|
+
subject.activate("command-t")
|
407
|
+
end
|
408
|
+
|
409
|
+
it "should not blow if there's no initially active submodules" do
|
410
|
+
TgConfig.any_instance.stubs(:parse_config_file). returns({}.with_indifferent_access)
|
411
|
+
|
412
|
+
Vimius.config[:submodules].should be_nil
|
413
|
+
|
414
|
+
lambda { subject.activate("command-t") }.should_not raise_error NoMethodError
|
415
|
+
end
|
416
|
+
|
417
|
+
it "should not activate an existing active submodule" do
|
418
|
+
subject.activate("tlib")
|
419
|
+
|
420
|
+
subject.active.should == expected_active_submodules
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
context "#deactivate" do
|
425
|
+
it { should respond_to :deactivate }
|
426
|
+
|
427
|
+
it "should deactivate a module" do
|
428
|
+
subject.activate("command-t")
|
429
|
+
subject.active.should == expected_submodules
|
430
|
+
subject.deactivate("command-t")
|
431
|
+
subject.active.should == expected_active_submodules
|
432
|
+
end
|
433
|
+
|
434
|
+
it "should not call save on the config" do
|
435
|
+
Vimius.config.expects(:save).never
|
436
|
+
|
437
|
+
subject.deactivate("command-t")
|
438
|
+
end
|
439
|
+
|
440
|
+
it "should not blow if there's no initially active submodules" do
|
441
|
+
TgConfig.any_instance.stubs(:parse_config_file). returns({}.with_indifferent_access)
|
442
|
+
|
443
|
+
Vimius.config[:submodules].should be_nil
|
444
|
+
|
445
|
+
lambda { subject.deactivate("command-t") }.should_not raise_error NoMethodError
|
446
|
+
end
|
447
|
+
|
448
|
+
it "should not deactivate an inactive submodule" do
|
449
|
+
subject.deactivate("command-t")
|
450
|
+
|
451
|
+
subject.active.should == expected_active_submodules
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
455
|
+
context "#toggle" do
|
456
|
+
it { should respond_to :toggle }
|
457
|
+
|
458
|
+
it "should call activate if the submodule is inactive" do
|
459
|
+
subject.expects(:activate).with("command-t").once
|
460
|
+
|
461
|
+
subject.toggle("command-t")
|
462
|
+
end
|
463
|
+
|
464
|
+
it "should call deactivate if the submodule is inactive" do
|
465
|
+
subject.expects(:deactivate).with("tlib").once
|
466
|
+
|
467
|
+
subject.toggle("tlib")
|
468
|
+
end
|
469
|
+
|
470
|
+
it "should raise SubmoduleNotFoundError if no submodule by that name exists" do
|
471
|
+
lambda {subject.toggle("invalid-submodule") }.should raise_error SubmoduleNotFoundError
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|