vimpack 0.0.1
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/.autotest +13 -0
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +2 -0
- data/LICENSE +21 -0
- data/README.md +47 -0
- data/Rakefile +5 -0
- data/autotest/discover.rb +2 -0
- data/bin/vimpack +103 -0
- data/cucumber.yml +13 -0
- data/features/commands/environments.feature +26 -0
- data/features/commands/git.feature +77 -0
- data/features/commands/info.feature +28 -0
- data/features/commands/init.feature +47 -0
- data/features/commands/install.feature +50 -0
- data/features/commands/list.feature +18 -0
- data/features/commands/search.feature +137 -0
- data/features/commands/uninstall.feature +46 -0
- data/features/step_definitions/environment_steps.rb +3 -0
- data/features/step_definitions/file_utils_steps.rb +36 -0
- data/features/step_definitions/initialize_steps.rb +14 -0
- data/features/step_definitions/output_steps.rb +12 -0
- data/features/step_definitions/vimpack_git_steps.rb +91 -0
- data/features/support/env.rb +11 -0
- data/features/support/executable_paths.rb +15 -0
- data/lib/vimpack/commands/command.rb +46 -0
- data/lib/vimpack/commands/git.rb +32 -0
- data/lib/vimpack/commands/info.rb +26 -0
- data/lib/vimpack/commands/init.rb +23 -0
- data/lib/vimpack/commands/install.rb +35 -0
- data/lib/vimpack/commands/list.rb +14 -0
- data/lib/vimpack/commands/search.rb +37 -0
- data/lib/vimpack/commands/uninstall.rb +27 -0
- data/lib/vimpack/commands.rb +8 -0
- data/lib/vimpack/models/apibase.rb +7 -0
- data/lib/vimpack/models/base.rb +29 -0
- data/lib/vimpack/models/repo.rb +117 -0
- data/lib/vimpack/models/script.rb +110 -0
- data/lib/vimpack/models.rb +8 -0
- data/lib/vimpack/utils/api.rb +39 -0
- data/lib/vimpack/utils/file.rb +66 -0
- data/lib/vimpack/utils/file_path.rb +25 -0
- data/lib/vimpack/utils/git.rb +103 -0
- data/lib/vimpack/utils/github.rb +41 -0
- data/lib/vimpack/utils/io.rb +26 -0
- data/lib/vimpack/utils/process.rb +61 -0
- data/lib/vimpack/utils/vimscripts.rb +64 -0
- data/lib/vimpack/version.rb +4 -0
- data/lib/vimpack.rb +46 -0
- data/simplecov_setup.rb +5 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/vimpack/models/repo_spec.rb +150 -0
- data/spec/vimpack/models/script_spec.rb +230 -0
- data/spec/vimpack/utils/github_spec.rb +39 -0
- data/spec/vimpack/utils/vimscripts_spec.rb +38 -0
- data/tasks/cucumber.rake +8 -0
- data/tasks/default.rake +2 -0
- data/tasks/rspec.rake +5 -0
- data/templates/vimrc.erb +6 -0
- data/vimpack.gemspec +42 -0
- metadata +333 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Models
|
3
|
+
|
4
|
+
class Script
|
5
|
+
include Vimpack::Utils::Vimscripts
|
6
|
+
include Vimpack::Utils::Github
|
7
|
+
|
8
|
+
class ScriptNotFound < StandardError; end
|
9
|
+
class AlreadyInstalled < StandardError; end
|
10
|
+
class NotInstalled < StandardError; end
|
11
|
+
|
12
|
+
# From Vimscripts.org
|
13
|
+
attr_reader :name, :type, :version, :version_date, :author, :author_email
|
14
|
+
# From Github
|
15
|
+
attr_reader :url, :description
|
16
|
+
|
17
|
+
SCRIPT_TYPES = [ 'utility', 'color scheme', 'syntax', 'ftplugin',
|
18
|
+
'indent', 'game', 'plugin', 'patch' ]
|
19
|
+
|
20
|
+
def initialize(attrs={})
|
21
|
+
set_attributes_from_input(attrs)
|
22
|
+
set_attributes_from_github
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_attributes_from_input(attrs)
|
26
|
+
attrs.each_pair do |attr, value|
|
27
|
+
instance_variable_set("@#{attr}".to_sym, value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_attributes_from_github
|
32
|
+
url = "vim-scripts/#{name}"
|
33
|
+
@repo = self.class.repo("vim-scripts/#{name}")
|
34
|
+
[ :url, :description ].each { |attr| instance_variable_set("@#{attr}".to_sym, @repo[attr]) }
|
35
|
+
set_version_from_github
|
36
|
+
end
|
37
|
+
|
38
|
+
def commits
|
39
|
+
@commits ||= self.class.commits(@repo).sort do |a, b|
|
40
|
+
a.authored_date <=> b.authored_date
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_version_from_github
|
45
|
+
last_commit = commits.last
|
46
|
+
@version = last_commit.message[0..10].gsub(/Version /, '')
|
47
|
+
@version_date = last_commit.authored_date
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.search(q, types = [], limit = 10, offset = 0)
|
51
|
+
search_vimscripts(q, types).map do |vimscript|
|
52
|
+
Script.new(vimscript)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.get(name)
|
57
|
+
vimscript = get_vimscript(name)
|
58
|
+
raise ScriptNotFound.new(name) if vimscript.nil?
|
59
|
+
Script.new(vimscript)
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.info(name)
|
63
|
+
get(name)
|
64
|
+
end
|
65
|
+
|
66
|
+
def install!(link_to_bundle=true)
|
67
|
+
Repo.raise_unless_initialized!
|
68
|
+
raise AlreadyInstalled.new(name) if installed?
|
69
|
+
Repo.add_submodule(url, type.gsub(' ', '_'), name)
|
70
|
+
if link_to_bundle
|
71
|
+
Repo.create_link(install_path, bundle_path)
|
72
|
+
end
|
73
|
+
true
|
74
|
+
end
|
75
|
+
|
76
|
+
def uninstall!
|
77
|
+
Repo.raise_unless_initialized!
|
78
|
+
raise NotInstalled.new(name) unless installed?
|
79
|
+
Repo.remove_submodule(type.gsub(' ', '_'), name)
|
80
|
+
Repo.remove_link(bundle_path) if Repo.symlink_exists?(bundle_path)
|
81
|
+
true
|
82
|
+
end
|
83
|
+
|
84
|
+
def installed?
|
85
|
+
Repo.initialized? && Repo.directory_exists?(install_path)
|
86
|
+
end
|
87
|
+
|
88
|
+
def installable?
|
89
|
+
Repo.initialized? && !installed?
|
90
|
+
end
|
91
|
+
|
92
|
+
def install_path
|
93
|
+
Repo.script_path.join(type.gsub(' ', '_'), name)
|
94
|
+
end
|
95
|
+
|
96
|
+
def bundle_path
|
97
|
+
Repo.bundle_path.join(name)
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def self.script_not_found(name)
|
103
|
+
scripts = search(name, Array.new, 1)
|
104
|
+
return exit_with_error!("Script not found! Did you mean #{scripts.first.name}?") if scripts.any?
|
105
|
+
exit_with_error!('Script not found!')
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Api
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:extend, ClassMethods)
|
7
|
+
unless Vimpack.env?('production')
|
8
|
+
require 'vcr'
|
9
|
+
VCR.config do |c|
|
10
|
+
c.cassette_library_dir = Vimpack.root.join('cassette_library')
|
11
|
+
c.stub_with :webmock
|
12
|
+
c.ignore_localhost = true
|
13
|
+
c.default_cassette_options = { :record => :new_episodes }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
|
20
|
+
def wrap_open(*args)
|
21
|
+
wrap_http_call do
|
22
|
+
open(*args)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def wrap_http_call(cassette_name='vimpack')
|
27
|
+
raise StandardError.new('you must give a block to wrap_http_call') unless block_given?
|
28
|
+
if Vimpack.env?(:production)
|
29
|
+
yield
|
30
|
+
else
|
31
|
+
VCR.use_cassette(cassette_name) do
|
32
|
+
yield
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
module File
|
5
|
+
|
6
|
+
attr_accessor :home_path, :pack_path, :script_path, :vim_path, :bundle_path
|
7
|
+
|
8
|
+
def setup_paths(home_path)
|
9
|
+
self.home_path = FilePath.new(home_path)
|
10
|
+
self.pack_path = FilePath.new(self.home_path.join('.vimpack'))
|
11
|
+
self.script_path = FilePath.new(self.pack_path.join('scripts'))
|
12
|
+
self.vim_path = FilePath.new(self.pack_path.join('vim'))
|
13
|
+
self.bundle_path = FilePath.new(self.vim_path.join('bundle'))
|
14
|
+
end
|
15
|
+
|
16
|
+
def file_exists?(filename)
|
17
|
+
::File.exists?(filename)
|
18
|
+
end
|
19
|
+
|
20
|
+
def directory_exists?(directory)
|
21
|
+
::File::directory?(directory)
|
22
|
+
end
|
23
|
+
|
24
|
+
def symlink_exists?(linkname)
|
25
|
+
::File.exists?(linkname) && ::File.stat(linkname).symlink?
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_link(target, linkname, relative=true)
|
29
|
+
target = Pathname.new(target).relative_path_from(
|
30
|
+
Pathname.new(::File.dirname(linkname))
|
31
|
+
) if relative
|
32
|
+
::FileUtils.ln_s(target, linkname)
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_link(link)
|
36
|
+
::FileUtils.rm(link)
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove_directory(directory)
|
40
|
+
exit_with_error!("no way!") if directory == '/'
|
41
|
+
::FileUtils.rmtree(directory)
|
42
|
+
end
|
43
|
+
|
44
|
+
def move_path(source, target)
|
45
|
+
::FileUtils.mv(source, target) if file_exists?(source)
|
46
|
+
end
|
47
|
+
|
48
|
+
def make_dir(*paths)
|
49
|
+
::FileUtils.mkdir_p(*paths)
|
50
|
+
end
|
51
|
+
|
52
|
+
def template_path(*path)
|
53
|
+
Vimpack.root.join('templates', *path)
|
54
|
+
end
|
55
|
+
|
56
|
+
def template(name, path)
|
57
|
+
name = name + '.erb'
|
58
|
+
contents = ::ERB.new(::File.read(template_path(name))).result(binding)
|
59
|
+
target = ::File.open(path, 'w')
|
60
|
+
target.write(contents)
|
61
|
+
target.close
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
class FilePath
|
5
|
+
attr_accessor :base_path
|
6
|
+
def initialize(base_path)
|
7
|
+
self.base_path = base_path
|
8
|
+
end
|
9
|
+
|
10
|
+
def base_path=(base_path)
|
11
|
+
@base_path = ::File.expand_path(base_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def join(*paths)
|
15
|
+
::File.join(@base_path, *paths)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
@base_path
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Git
|
4
|
+
|
5
|
+
include Process
|
6
|
+
|
7
|
+
def init_repo(path, bare=false)
|
8
|
+
run_process_or_die!("git init --quiet#{bare == true ? ' --bare' : ''}", path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_submodule(repo_uri, *paths)
|
12
|
+
parent, name = paths[0..-2], paths[-1]
|
13
|
+
path = ::File.join('scripts', *paths)
|
14
|
+
run_process_or_die!("git submodule add #{repo_uri} #{path}",
|
15
|
+
self.pack_path)
|
16
|
+
init_submodule(path)
|
17
|
+
update_submodule(path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def replace_contents(path, match, new='')
|
21
|
+
contents = ::File.read(path)
|
22
|
+
contents = contents.sub(match, new)
|
23
|
+
::File.open(path, 'w') do |file|
|
24
|
+
file.write(contents)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_submodule(*paths)
|
29
|
+
path = ::File.join('scripts', *paths)
|
30
|
+
submod_match = ::Regexp.escape("[submodule \"#{path}\"]") + '\n.*\n.*'
|
31
|
+
config_match = ::Regexp.escape("[submodule \"#{path}\"]") + '\n.*'
|
32
|
+
replace_contents(self.pack_path.join('.gitmodules'), submod_match)
|
33
|
+
replace_contents(self.pack_path.join('.git', 'config'), config_match)
|
34
|
+
remove_link(self.bundle_path.join(paths[-1]))
|
35
|
+
remove_directory(self.pack_path.join(path))
|
36
|
+
run_process_or_die!("git rm -r #{path}", self.pack_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
def init_submodule(path='')
|
40
|
+
run_process_or_die!("git submodule init #{path}", self.pack_path)
|
41
|
+
end
|
42
|
+
|
43
|
+
def update_submodule(path='')
|
44
|
+
run_process_or_die!("git submodule update #{path}", self.pack_path)
|
45
|
+
end
|
46
|
+
|
47
|
+
def repo_add_remote(name, path)
|
48
|
+
cmd = "git remote add #{name} #{path}"
|
49
|
+
run_process_or_die!(cmd, self.pack_path.to_s)
|
50
|
+
end
|
51
|
+
|
52
|
+
def repo_remote?(name)
|
53
|
+
remotes = run_process_and_wait!("git remote show #{name}", pack_path.to_s)
|
54
|
+
!remotes.message.include?('does not appear to be a git') && remotes.message.include?(name)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def repo_commit(msg='')
|
59
|
+
msg = '[VIMPACK] vimpack updated' if msg == ''
|
60
|
+
cmd = "git add . && git commit -m '#{msg}'"
|
61
|
+
run_process_or_die!(cmd, self.pack_path.to_s)
|
62
|
+
end
|
63
|
+
|
64
|
+
def repo_pull(remote_path='origin master')
|
65
|
+
run_process_or_die!("git pull #{remote_path}", self.pack_path.to_s)
|
66
|
+
end
|
67
|
+
|
68
|
+
def repo_push
|
69
|
+
cmd = "git push origin master"
|
70
|
+
error_message = <<-EOE
|
71
|
+
error: local repo out of sync with remote
|
72
|
+
use git to sync with something like this:
|
73
|
+
vimpack git fetch && vimpack git merge origin/master
|
74
|
+
EOE
|
75
|
+
run_process_or_die!(cmd, self.pack_path.to_s, error_message)
|
76
|
+
end
|
77
|
+
|
78
|
+
def repo_clone(repo_url, path)
|
79
|
+
cmd = "git clone #{repo_url} #{path}"
|
80
|
+
run_process_or_die!(cmd)
|
81
|
+
end
|
82
|
+
|
83
|
+
def repo_add_dot
|
84
|
+
cmd = "git add ."
|
85
|
+
run_process_or_die!(cmd, self.pack_path.to_s)
|
86
|
+
end
|
87
|
+
|
88
|
+
def repo_exec(subcommand, commands)
|
89
|
+
commands = sanitize_commands(commands)
|
90
|
+
cmd = "git #{subcommand} #{commands}"
|
91
|
+
run_process_or_die!(cmd, self.pack_path.to_s)
|
92
|
+
end
|
93
|
+
|
94
|
+
def sanitize_commands(commands)
|
95
|
+
commands.each.inject('') do |full_command, command|
|
96
|
+
full_command << ' ' unless full_command == ''
|
97
|
+
full_command << (command.include?(' ') ? "'#{command}'" : command)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Github
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:include, Vimpack::Utils::Api)
|
7
|
+
base.send(:extend, ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def octokit
|
13
|
+
@octokit ||= Octokit::Client.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def search_all_repos(q, options = {})
|
17
|
+
search_repositories(CGI.escape(q), options.merge(:language => 'VimL')).delete_if do |repo|
|
18
|
+
repo.name.downcase.include?('dotfiles') ||
|
19
|
+
repo.description.downcase.include?('dotfiles')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def search_vimscript_repos(q)
|
24
|
+
search_all_repos(q).delete_if { |repo| !(repo.owner == 'vim-scripts') }
|
25
|
+
end
|
26
|
+
|
27
|
+
def respond_to?(meth)
|
28
|
+
octokit.respond_to?(meth) || super
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(meth, *args)
|
32
|
+
if octokit.respond_to?(meth)
|
33
|
+
return wrap_http_call { octokit.send(meth, *args) }
|
34
|
+
end
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Io
|
4
|
+
|
5
|
+
def say(message, color=:green)
|
6
|
+
puts message.color(color) unless message.nil?
|
7
|
+
end
|
8
|
+
|
9
|
+
def scream(message)
|
10
|
+
say(message, :red)
|
11
|
+
end
|
12
|
+
|
13
|
+
def die!(message=nil)
|
14
|
+
scream(message)
|
15
|
+
return Trollop::die USAGE
|
16
|
+
end
|
17
|
+
|
18
|
+
def exit_with_error!(message=nil, exit_code=1)
|
19
|
+
scream(message) unless message.nil?
|
20
|
+
exit(exit_code)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Process
|
4
|
+
include Io
|
5
|
+
|
6
|
+
class Results
|
7
|
+
attr_accessor :process, :message
|
8
|
+
def initialize(process, message=nil)
|
9
|
+
self.process = process
|
10
|
+
self.message = message
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_process!(cmd)
|
15
|
+
child = ::ChildProcess.build(cmd)
|
16
|
+
child.io.stdout = ::Tempfile.new('child-out')
|
17
|
+
child.io.stderr = ::Tempfile.new('child-err')
|
18
|
+
child.start
|
19
|
+
child
|
20
|
+
Results.new(child)
|
21
|
+
end
|
22
|
+
|
23
|
+
def wait_for_child(child, timeout=30)
|
24
|
+
child.process.poll_for_exit(timeout.to_f)
|
25
|
+
child.process.stop unless child.process.exited?
|
26
|
+
child.process.io.stdout.close
|
27
|
+
child.process.io.stderr.close
|
28
|
+
child.process.io.stdout.open
|
29
|
+
child.process.io.stderr.open
|
30
|
+
child.message = child.process.io.stdout.read
|
31
|
+
child.message << " "
|
32
|
+
child.message << child.process.io.stderr.read
|
33
|
+
child
|
34
|
+
end
|
35
|
+
|
36
|
+
def run_process_and_wait!(cmd, dir=nil)
|
37
|
+
child = nil
|
38
|
+
within_dir(dir) do
|
39
|
+
child = run_process!(cmd)
|
40
|
+
end
|
41
|
+
child = wait_for_child(child)
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_process_or_die!(cmd, dir=nil, err_msg=nil)
|
45
|
+
child = run_process_and_wait!(cmd, dir)
|
46
|
+
child.message << err_msg if err_msg
|
47
|
+
exit_with_error!("child process died:\n#{child.message}") unless child.process.exit_code == 0
|
48
|
+
child
|
49
|
+
end
|
50
|
+
|
51
|
+
def within_dir(dir=nil, &block)
|
52
|
+
orig_path = Dir.pwd
|
53
|
+
dir = dir.nil? ? orig_path : dir.to_s
|
54
|
+
::Dir.chdir(dir)
|
55
|
+
block.call
|
56
|
+
::Dir.chdir(orig_path)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Vimpack
|
2
|
+
module Utils
|
3
|
+
module Vimscripts
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:include, Vimpack::Utils::Api)
|
7
|
+
base.send(:extend, ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def vimscripts_url
|
13
|
+
'http://vim-scripts.org/api/scripts_recent.json'
|
14
|
+
end
|
15
|
+
|
16
|
+
def vimscripts
|
17
|
+
# {"n"=>"test.vim", "t"=>"utility", "s"=>"example utility script file -- used for testing vimonline", "rv"=>"1.0", "rd"=>"2001-05-28", "ra"=>"Scott Johnston", "re"=>"scrott@users.sourceforge.net"}
|
18
|
+
@vimscripts ||= Yajl.load(wrap_open(vimscripts_url))
|
19
|
+
@vimscripts.clone
|
20
|
+
end
|
21
|
+
|
22
|
+
def search_vimscripts(q, types = [], limit = 10, offset = 0)
|
23
|
+
results = q.nil? ? vimscripts : search_for_string(q, vimscripts)
|
24
|
+
results = types.empty? ? results : search_for_type(types, results)
|
25
|
+
normalize_results(limit, offset, results)
|
26
|
+
end
|
27
|
+
|
28
|
+
def normalize_results(limit, offset, results)
|
29
|
+
results[offset..limit-1].map do |script|
|
30
|
+
normalize_vimscript(script)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def search_for_type(types, results)
|
35
|
+
results.delete_if do |vimscript|
|
36
|
+
!types.include?(vimscript['t'])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def search_for_string(q, results)
|
41
|
+
q = q.downcase
|
42
|
+
results.delete_if do |vimscript|
|
43
|
+
!(vimscript['n'].downcase.include?(q) or vimscript['s'].downcase.include?(q))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_vimscript(name)
|
48
|
+
results = vimscripts.delete_if do |vimscript|
|
49
|
+
!(vimscript['n'] == name)
|
50
|
+
end
|
51
|
+
normalize_vimscript(results.first) rescue nil
|
52
|
+
end
|
53
|
+
|
54
|
+
def normalize_vimscript(script)
|
55
|
+
{ :name => script['n'], :type => script['t'],
|
56
|
+
:description => script['s'], :script_version => script['rv'],
|
57
|
+
:author => script['ra'], :author_email => script['re']
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/vimpack.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'erb'
|
4
|
+
require 'pathname'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'cgi'
|
7
|
+
|
8
|
+
require "bundler/setup"
|
9
|
+
#Bundler.require :default
|
10
|
+
|
11
|
+
require 'active_model'
|
12
|
+
require 'trollop'
|
13
|
+
# TODO: term-ascicolor is required by rails/rspec/cuke
|
14
|
+
# or something in rails stack me thinks...maybe us it instead
|
15
|
+
require 'rainbow'
|
16
|
+
require 'childprocess'
|
17
|
+
# TODO: let active support figure out what json to use
|
18
|
+
require 'yajl'
|
19
|
+
require 'enviro'
|
20
|
+
require 'nokogiri'
|
21
|
+
require 'octokit'
|
22
|
+
|
23
|
+
# vimpack
|
24
|
+
module Vimpack
|
25
|
+
include Enviro::Environate
|
26
|
+
|
27
|
+
autoload :Models, 'vimpack/models'
|
28
|
+
autoload :Commands, 'vimpack/commands'
|
29
|
+
module Utils
|
30
|
+
autoload :FilePath, 'vimpack/utils/file_path'
|
31
|
+
autoload :File, 'vimpack/utils/file'
|
32
|
+
autoload :Io, 'vimpack/utils/io'
|
33
|
+
autoload :Process, 'vimpack/utils/process'
|
34
|
+
autoload :Git, 'vimpack/utils/git'
|
35
|
+
autoload :Api, 'vimpack/utils/api'
|
36
|
+
autoload :Vimscripts, 'vimpack/utils/vimscripts'
|
37
|
+
autoload :Github, 'vimpack/utils/github'
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.root
|
41
|
+
@root ||= Vimpack::Utils::FilePath.new(File.join(File.dirname(__FILE__), '..'))
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
data/simplecov_setup.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'simplecov_setup')
|
2
|
+
require 'vimpack'
|
3
|
+
|
4
|
+
def check_git_repo(path)
|
5
|
+
res = %x{ ( cd #{path} ; git status ; cd - )2>&1 }
|
6
|
+
res.should_not match(/Not a git repo/)
|
7
|
+
end
|
8
|
+
|
9
|
+
def check_git_submodule(submodule, repo)
|
10
|
+
name = submodule.split('/')[-1]
|
11
|
+
res = %x{ ( cd #{repo} ; git submodule ; cd - )2>&1 }
|
12
|
+
res.should match(/#{name}/)
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_vimpack_remote(remote_name, url)
|
16
|
+
res = %x{ cd /tmp/vimpack_home/.vimpack ; git config -l ; cd - }
|
17
|
+
res.should match(/remote.#{Regexp.escape(remote_name)}.url=#{Regexp.escape(url)}/)
|
18
|
+
end
|
19
|
+
|
20
|
+
HOME = '/tmp/vimpack_home'
|
21
|
+
ENV['HOME'] = HOME
|
22
|
+
def remove_temp_home
|
23
|
+
::FileUtils.rm_rf(HOME) if ::File.exists?(HOME)
|
24
|
+
::FileUtils.mkdir(HOME)
|
25
|
+
end
|
26
|
+
|
27
|
+
RSpec.configure do |config|
|
28
|
+
config.before(:each) do
|
29
|
+
remove_temp_home
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|