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/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Sources
|
2
|
+
source "http://rubygems.org"
|
3
|
+
|
4
|
+
# Parse vimius.gemspec
|
5
|
+
gemspec
|
6
|
+
|
7
|
+
####
|
8
|
+
# For development or testing
|
9
|
+
###
|
10
|
+
|
11
|
+
# Require rbconfig to figure out the target OS
|
12
|
+
require 'rbconfig'
|
13
|
+
|
14
|
+
platforms :ruby do
|
15
|
+
unless ENV['TRAVIS']
|
16
|
+
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
17
|
+
gem 'rb-fsevent', :require => false
|
18
|
+
gem 'ruby-growl', :require => false
|
19
|
+
gem 'growl', :require => false
|
20
|
+
end
|
21
|
+
if RbConfig::CONFIG['target_os'] =~ /linux/i
|
22
|
+
gem 'rb-inotify', :require => false
|
23
|
+
gem 'libnotify', :require => false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/Guardfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Vimius [](http://travis-ci.org/TechnoGate/vimius-ruby) [](http://stillmaintained.com/TechnoGate/vimius-ruby)
|
2
|
+
|
3
|
+
[](http://www.pledgie.com/campaigns/16123)
|
4
|
+
|
5
|
+
# License
|
6
|
+
|
7
|
+
## This code is free to use under the terms of the MIT license.
|
8
|
+
|
9
|
+
Copyright (c) 2011 TechnoGate <support@technogate.fr>
|
10
|
+
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
12
|
+
a copy of this software and associated documentation files (the
|
13
|
+
"Software"), to deal in the Software without restriction, including
|
14
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
15
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
16
|
+
permit persons to whom the Software is furnished to do so, subject to
|
17
|
+
the following conditions:
|
18
|
+
|
19
|
+
The above copyright notice and this permission notice shall be included
|
20
|
+
in all copies or substantial portions of the Software.
|
21
|
+
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
23
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
24
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
25
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
26
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
27
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
28
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
data/bin/vimius
ADDED
data/lib/vimius.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
|
4
|
+
require "active_support/core_ext"
|
5
|
+
require "tg_config"
|
6
|
+
|
7
|
+
# Setup paths
|
8
|
+
USER_VIM_PATH = File.expand_path(File.join ENV['HOME'], '.vim')
|
9
|
+
USER_VIMRC_PATH = File.expand_path(File.join ENV['HOME'], '.vimrc')
|
10
|
+
USER_GVIMRC_PATH = File.expand_path(File.join ENV['HOME'], '.gvimrc')
|
11
|
+
USER_VIMIUS_PATH = File.join USER_VIM_PATH, 'vimius'
|
12
|
+
VIMIUS_PATH = File.expand_path(File.join File.dirname(__FILE__), '..')
|
13
|
+
VIMIUS_LIB_PATH = File.join VIMIUS_PATH, 'lib'
|
14
|
+
VIMIUS_SPEC_PATH = File.join VIMIUS_PATH, 'spec'
|
15
|
+
CONFIG_FILE = File.expand_path(File.join ENV['HOME'], '.vimius.yaml')
|
16
|
+
MODULES_FILE = File.join(USER_VIMIUS_PATH, 'submodules.yaml')
|
17
|
+
|
18
|
+
module TechnoGate
|
19
|
+
module Vimius
|
20
|
+
extend self
|
21
|
+
|
22
|
+
def config
|
23
|
+
@config ||= TgConfig.new(CONFIG_FILE)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return Vimius path
|
27
|
+
#
|
28
|
+
# @return [String] The absolute path to Vimius distribution
|
29
|
+
def vimius_path
|
30
|
+
VIMIUS_PATH
|
31
|
+
end
|
32
|
+
|
33
|
+
# Return the vim's path
|
34
|
+
#
|
35
|
+
# @return [String] The absolute path to ViM files
|
36
|
+
def vim_path
|
37
|
+
VIMIUS_VIM_PATH
|
38
|
+
end
|
39
|
+
|
40
|
+
# Return the ruby's path
|
41
|
+
#
|
42
|
+
# @return [String] The absolute path to Ruby files
|
43
|
+
def ruby_path
|
44
|
+
VIMIUS_RUBY_PATH
|
45
|
+
end
|
46
|
+
|
47
|
+
# Expand the path of a given file
|
48
|
+
#
|
49
|
+
# @param [Array] args
|
50
|
+
# @return [String] The expanded path to the given file.
|
51
|
+
def expand(*args)
|
52
|
+
File.expand_path(*args)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Execute a command under root
|
56
|
+
#
|
57
|
+
# @param [String]* commands to run
|
58
|
+
def sudo(*args)
|
59
|
+
if ENV["USER"] != "root"
|
60
|
+
command = "sudo #{args.join(" ")}"
|
61
|
+
puts "Please enter your password (if requested) for executing the command '#{command}'"
|
62
|
+
else
|
63
|
+
command = args.join(" ")
|
64
|
+
end
|
65
|
+
|
66
|
+
exec command
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
require 'vimius/errors'
|
72
|
+
require 'vimius/shell'
|
73
|
+
require 'vimius/git'
|
74
|
+
require 'vimius/vim'
|
75
|
+
require 'vimius/gems'
|
76
|
+
require 'vimius/github'
|
77
|
+
require 'vimius/plugins'
|
78
|
+
require 'vimius/submodules'
|
79
|
+
require 'vimius/cli'
|
data/lib/vimius/cli.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
|
5
|
+
# Load all modules
|
6
|
+
Dir["#{VIMIUS_LIB_PATH}/vimius/cli/**/*.rb"].each { |f| require f }
|
7
|
+
|
8
|
+
module TechnoGate
|
9
|
+
module Vimius
|
10
|
+
module CLI
|
11
|
+
|
12
|
+
ASCII_ART = File.read(File.join(File.dirname(__FILE__), 'vimius_ascii.txt'))
|
13
|
+
|
14
|
+
class Runner < ::Thor
|
15
|
+
# Include cli modules
|
16
|
+
include CLI::Version
|
17
|
+
include CLI::Install
|
18
|
+
include CLI::Submodules
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Vimius
|
5
|
+
module CLI
|
6
|
+
module Install
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.send :require, 'open-uri'
|
10
|
+
|
11
|
+
base.class_eval <<-END, __FILE__, __LINE__ + 1
|
12
|
+
desc "install", "Install vimius"
|
13
|
+
def install
|
14
|
+
# Sanity check
|
15
|
+
sanity_check
|
16
|
+
|
17
|
+
# Download the bootstrap file
|
18
|
+
File.open('/tmp/vimius_bootstrap.sh', 'w') do |f|
|
19
|
+
f.write(open('https://raw.github.com/TechnoGate/vimius/master/bootstrap.sh').read)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Run the bootstrap file
|
23
|
+
Shell.exec("cat /tmp/vimius_bootstrap.sh | sh", true)
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def sanity_check
|
28
|
+
if File.exists?(USER_VIM_PATH)
|
29
|
+
abort "\#{USER_VIM_PATH} exists, cannot continue."
|
30
|
+
end
|
31
|
+
|
32
|
+
if File.exists?(USER_VIMRC_PATH)
|
33
|
+
abort "\#{USER_VIMRC_PATH} exists, cannot continue."
|
34
|
+
end
|
35
|
+
|
36
|
+
if File.exists?(USER_GVIMRC_PATH)
|
37
|
+
abort "\#{USER_GVIMRC_PATH} exists, cannot continue."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
END
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Vimius
|
5
|
+
module CLI
|
6
|
+
module Submodules
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.send :include, InstanceMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
def self.included(base)
|
14
|
+
base.class_eval <<-END, __FILE__, __LINE__ + 1
|
15
|
+
END
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module Vimius
|
5
|
+
module CLI
|
6
|
+
module Version
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.class_eval <<-END, __FILE__, __LINE__ + 1
|
10
|
+
desc "version", "Print Vimius version and exit."
|
11
|
+
def version
|
12
|
+
puts "Vimius version \#{Vimius.version}"
|
13
|
+
end
|
14
|
+
END
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
# Errors
|
4
|
+
VimiusError = Class.new Exception
|
5
|
+
BlockNotGivenError = Class.new VimiusError
|
6
|
+
RubyGemsNotFoundError = Class.new VimiusError
|
7
|
+
|
8
|
+
SubmoduleError = Class.new VimiusError
|
9
|
+
SubmodulesNotValidError = Class.new SubmoduleError
|
10
|
+
SubmoduleNotFoundError = Class.new SubmoduleError
|
11
|
+
end
|
12
|
+
end
|
data/lib/vimius/gems.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
# Find an installed gem
|
4
|
+
#
|
5
|
+
# @param [String] The gem name to search for
|
6
|
+
# @param [Mixed] The gem requirements
|
7
|
+
# @return [Array] The found gems
|
8
|
+
def find_gem(gem_name, *requirements)
|
9
|
+
begin
|
10
|
+
require 'rubygems'
|
11
|
+
if Gem.const_defined?(:Specification)
|
12
|
+
Gem::Specification.find_all_by_name(gem_name, *requirements)
|
13
|
+
elsif Gem.respond_to?(:source_index)
|
14
|
+
Gem.source_index.find_name(gem_name, *requirements)
|
15
|
+
else
|
16
|
+
Gem.cache.find_name(gem_name, *requirements)
|
17
|
+
end
|
18
|
+
rescue LoadError
|
19
|
+
raise RubyGemsNotFoundError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Install a gem
|
24
|
+
#
|
25
|
+
# @param [String] The gem name
|
26
|
+
def install_gem(gem_name)
|
27
|
+
require 'rubygems'
|
28
|
+
|
29
|
+
# Install the gem only if it can't be found
|
30
|
+
if find_gem(gem_name).length == 0
|
31
|
+
sudo "gem install #{gem_name}"
|
32
|
+
end
|
33
|
+
rescue RubyGemsNotFoundError
|
34
|
+
puts "Could not install the gem #{gem_name}, please do so manually."
|
35
|
+
puts "sudo gem install #{gem_name}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/vimius/git.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
# Get a list of submodules
|
4
|
+
#
|
5
|
+
# @return [Array] of submodules
|
6
|
+
def submodules
|
7
|
+
@submodules ||= `git submodule`.split("\n").collect { |s| s.split(" ")[1] }
|
8
|
+
end
|
9
|
+
|
10
|
+
# Update a submodule
|
11
|
+
#
|
12
|
+
# @param [String] The submodule to update (relative path)
|
13
|
+
# @param [String] The branch we're tracking
|
14
|
+
def update_submodule(submodule, branch = "master")
|
15
|
+
Dir.chdir submodule do
|
16
|
+
puts
|
17
|
+
puts "*" * 40
|
18
|
+
puts "*#{"Updating #{submodule}".center(38)}*"
|
19
|
+
puts "*" * 40
|
20
|
+
puts
|
21
|
+
sh "git checkout #{branch}"
|
22
|
+
sh "git pull"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module Vimius
|
3
|
+
|
4
|
+
# Return a fully-qualified url to the raw page of a file stores inside
|
5
|
+
# a repository on github
|
6
|
+
#
|
7
|
+
# @param [String] Path
|
8
|
+
# @return [String] URL
|
9
|
+
def github_raw(path)
|
10
|
+
"https://raw.github.com/#{path}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module TechnoGate
|
5
|
+
module Vimius
|
6
|
+
module Tasks
|
7
|
+
include Rake::DSL
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
# Load all plugin installation tasks
|
11
|
+
Dir["#{vim_path}/**/tasks/**.rake"].each do |f|
|
12
|
+
base.send :import, f
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Install a plugin
|
18
|
+
#
|
19
|
+
# @param [String] The group the plugin belongs to
|
20
|
+
# @param [String] The plugin name
|
21
|
+
# @param [&block] The installation block
|
22
|
+
def install_vim_plugin(group, name, &block)
|
23
|
+
raise Vimius::BlockNotGivenError unless block_given?
|
24
|
+
|
25
|
+
define_install_plugin_tasks(group, name, &block)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Install a plugin in a submodule
|
29
|
+
#
|
30
|
+
# @param [String] The group the plugin belongs to
|
31
|
+
# @param [String] The plugin name
|
32
|
+
# @param [&block] The installation block
|
33
|
+
def install_vim_plugin_within_submodule(group, name, &block)
|
34
|
+
raise Vimius::BlockNotGivenError unless block_given?
|
35
|
+
|
36
|
+
define_verify_plugin_tasks(group, name, &block)
|
37
|
+
define_install_plugin_tasks(group, name, &block)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Download and save file
|
41
|
+
#
|
42
|
+
# @param [String] url
|
43
|
+
# @param [String] path
|
44
|
+
def download_and_save_file(url, path)
|
45
|
+
open_and_save_file(path, open(url).read)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Open and save file
|
49
|
+
#
|
50
|
+
# @param [String] path
|
51
|
+
# @param [Value] What to write in the file
|
52
|
+
# @param [&block]
|
53
|
+
def open_and_save_file(path, value = nil, &block)
|
54
|
+
# Make sure the directory up to the folder exists
|
55
|
+
mkdir_p File.dirname(path)
|
56
|
+
# Open the file and use either the block or the value to write the
|
57
|
+
# file
|
58
|
+
File.open path, 'w' do |f|
|
59
|
+
if block_given?
|
60
|
+
f.write(yield)
|
61
|
+
else
|
62
|
+
f.write(value)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
# Define tasks for verifying plugin rediness
|
70
|
+
#
|
71
|
+
# @param [String] The group the plugin belongs to
|
72
|
+
# @param [String] The plugin name
|
73
|
+
# @param [&block] The installation block
|
74
|
+
def define_verify_plugin_tasks(group, name, &block)
|
75
|
+
# Create a namespace for the plugin
|
76
|
+
namespace(name) do
|
77
|
+
task :verify_plugin do
|
78
|
+
unless Dir["#{vim_path}/#{group}/#{name}/**"].any?
|
79
|
+
abort "The submodule #{group}/#{name} is not ready, please run 'git submodule update --init'"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
task :install => :verify_plugin
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Define tasks for installing a plugin
|
88
|
+
#
|
89
|
+
# @param [String] The group the plugin belongs to
|
90
|
+
# @param [String] The plugin name
|
91
|
+
# @param [&block] The installation block
|
92
|
+
def define_install_plugin_tasks(group, name, &block)
|
93
|
+
# Create a namespace for the plugin
|
94
|
+
namespace(name) do
|
95
|
+
# Define the plugin installation task
|
96
|
+
desc "Install #{name} plugin."
|
97
|
+
task :install do
|
98
|
+
puts
|
99
|
+
puts "*" * 40
|
100
|
+
puts "*#{"Installing #{name}".center(38)}*"
|
101
|
+
puts "*" * 40
|
102
|
+
puts
|
103
|
+
yield
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Hook the plugin's install task to the global install task
|
108
|
+
task :install => "#{name}:install"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|