vimbrew 0.0.1.a.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2010 Simon Menke
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1 @@
1
+ # Vimbrew
data/bin/vimbrew ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set ft=ruby:
3
+
4
+ begin
5
+ require 'vimbrew'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ $:.unshift(File.expand_path('../../lib', __FILE__))
9
+ require 'vimbrew'
10
+ end
11
+
12
+ Vimbrew::CLI.start
@@ -0,0 +1,55 @@
1
+ class Vimbrew::CLI < Thor
2
+
3
+ desc 'list', 'list all available recipes'
4
+ def list
5
+ Vimbrew::Commands::List.run(shell)
6
+ end
7
+
8
+ desc 'search QUERY', 'search for available recipes'
9
+ def search(query)
10
+ Vimbrew::Commands::List.run(shell, :query => query)
11
+ end
12
+
13
+ desc 'installed', 'list installed recipes'
14
+ def installed
15
+ Vimbrew::Commands::List.run(shell, :installed => true)
16
+ end
17
+
18
+ desc 'outdated', 'list outdated recipes'
19
+ def outdated
20
+ Vimbrew::Commands::List.run(shell, :outdated => true)
21
+ end
22
+
23
+ desc 'home RECIPE', 'go to the homepage of this recipe'
24
+ def home(recipe)
25
+ Vimbrew::Commands::Home.run(shell, recipe)
26
+ end
27
+
28
+ desc 'install RECIPE', 'install a new recipe'
29
+ def install(recipe)
30
+ Vimbrew::Commands::Install.run(shell, recipe)
31
+ end
32
+
33
+ desc 'uninstall RECIPE', 'uninstall a recipe'
34
+ def uninstall(recipe)
35
+ Vimbrew::Commands::Uninstall.run(shell, recipe)
36
+ end
37
+
38
+ desc 'update', 'updated all outdated recipes'
39
+ method_option :force, :type => :boolean, :default => false,
40
+ :desc => 'Force update all recipes'
41
+ def update
42
+ Vimbrew::Commands::Update.run(shell, options.force)
43
+ end
44
+
45
+ desc 'sync', 'pull new recipes from the server'
46
+ def sync
47
+ Vimbrew::Commands::Sync.run(shell)
48
+ end
49
+
50
+ desc 'setup', 'setup vimbrew'
51
+ def setup
52
+ Vimbrew::Commands::Setup.run(shell)
53
+ end
54
+
55
+ end
@@ -0,0 +1,12 @@
1
+ class Vimbrew::Commands::Abstract
2
+
3
+ def self.run(shell, *args)
4
+ cmd = self.allocate
5
+ cmd.send :instance_variable_set, '@shell', shell
6
+ cmd.send :initialize, *args
7
+ cmd.run
8
+ end
9
+
10
+ include Vimbrew::Environment
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ class Vimbrew::Commands::Home < Vimbrew::Commands::Abstract
2
+
3
+ def initialize(recipe)
4
+ require(vim_root + 'vimbrew/recipes' + recipe)
5
+ @recipe = Vimbrew::Recipe.recipes[recipe]
6
+ end
7
+
8
+ def run
9
+ sh "open #{@recipe.home}"
10
+ end
11
+
12
+ end
@@ -0,0 +1,15 @@
1
+ class Vimbrew::Commands::Install < Vimbrew::Commands::Abstract
2
+
3
+ def initialize(recipe)
4
+ @recipe = load_recipe(recipe)
5
+ end
6
+
7
+ def run
8
+ @recipe.install(shell)
9
+
10
+ dump_list_of_installed_recipes
11
+
12
+ %x"vim -c 'call pathogen#helptags()' -c 'quit' 2>&1"
13
+ end
14
+
15
+ end
@@ -0,0 +1,33 @@
1
+ class Vimbrew::Commands::List < Vimbrew::Commands::Abstract
2
+
3
+ def initialize(options={})
4
+ if options[:installed]
5
+ @recipes = installed_recipes.keys
6
+
7
+ elsif options[:outdated]
8
+ @recipes = outdated_recipes
9
+
10
+ else
11
+ @recipes = recipe_root.children
12
+
13
+ @recipes = @recipes.select do |recipe|
14
+ recipe.extname == '.rb'
15
+ end
16
+
17
+ @recipes = @recipes.collect do |recipe|
18
+ recipe.basename('.rb')
19
+ end
20
+ end
21
+
22
+ if query = options[:query]
23
+ @recipes = @recipes.select do |recipe|
24
+ recipe.to_s.include?(query)
25
+ end
26
+ end
27
+ end
28
+
29
+ def run
30
+ puts @recipes
31
+ end
32
+
33
+ end
@@ -0,0 +1,10 @@
1
+ class Vimbrew::Commands::Setup < Vimbrew::Commands::Abstract
2
+
3
+ def run
4
+ link_root.mkpath
5
+ install_root.mkpath
6
+
7
+ Vimbrew::Commands::Sync.run(shell)
8
+ end
9
+
10
+ end
@@ -0,0 +1,12 @@
1
+ class Vimbrew::Commands::Sync < Vimbrew::Commands::Abstract
2
+
3
+ def run
4
+ recipe_root.mkpath
5
+ inside(recipe_root) do
6
+ sh 'git init' unless recipe_root('.git').directory?
7
+ sh 'git pull --ff -f git://github.com/fd/vimbrew-recipes.git master'
8
+ end
9
+ shell.say_status 'Info', 'pulled new recipes from source.', :green
10
+ end
11
+
12
+ end
@@ -0,0 +1,15 @@
1
+ class Vimbrew::Commands::Uninstall < Vimbrew::Commands::Abstract
2
+
3
+ def initialize(recipe)
4
+ @recipe = load_recipe(recipe)
5
+ end
6
+
7
+ def run
8
+ @recipe.uninstall(shell)
9
+
10
+ dump_list_of_installed_recipes
11
+
12
+ %x"vim -c 'call pathogen#helptags()' -c 'quit' 2>&1"
13
+ end
14
+
15
+ end
@@ -0,0 +1,27 @@
1
+ class Vimbrew::Commands::Update < Vimbrew::Commands::Abstract
2
+
3
+ def initialize(force=false)
4
+ @force = force
5
+ end
6
+
7
+ def run
8
+ recipes = (@force ? installed_recipes.keys : outdated_recipes.dup)
9
+
10
+ recipes.collect! do |name|
11
+ load_recipe(name)
12
+ end
13
+
14
+ recipes.each do |recipe|
15
+ recipe.uninstall(shell)
16
+ end
17
+
18
+ recipes.each do |recipe|
19
+ recipe.install(shell)
20
+ end
21
+
22
+ dump_list_of_installed_recipes
23
+
24
+ %x"vim -c 'call pathogen#helptags()' -c 'quit' 2>&1"
25
+ end
26
+
27
+ end
@@ -0,0 +1,12 @@
1
+ module Vimbrew::Commands
2
+
3
+ require 'vimbrew/commands/abstract'
4
+ require 'vimbrew/commands/setup'
5
+ require 'vimbrew/commands/list'
6
+ require 'vimbrew/commands/home'
7
+ require 'vimbrew/commands/install'
8
+ require 'vimbrew/commands/uninstall'
9
+ require 'vimbrew/commands/update'
10
+ require 'vimbrew/commands/sync'
11
+
12
+ end
@@ -0,0 +1,21 @@
1
+ class Vimbrew::Downloaders::Abstract
2
+
3
+ include Vimbrew::Environment
4
+
5
+ def initialize(url, options={})
6
+ @url = url
7
+ @options = { :ref => 'master' }.merge(options)
8
+ end
9
+
10
+ def fetch_into(shell, dst)
11
+ @shell = shell
12
+ dst.dirname.mkpath
13
+
14
+ dst.rmtree
15
+
16
+ sh("git clone #{@url} #{dst}")
17
+ sh("git checkout #{@options[:ref]}")
18
+ (dst + '.git').rmtree
19
+ end
20
+
21
+ end
@@ -0,0 +1,26 @@
1
+ class Vimbrew::Downloaders::Git < Vimbrew::Downloaders::Abstract
2
+
3
+ def initialize(url, options={})
4
+ @url = url
5
+ @options = { :ref => 'master' }.merge(options)
6
+ end
7
+
8
+ def fetch_into(shell, dst)
9
+ @shell = shell
10
+ dst.dirname.mkpath
11
+
12
+ dst.rmtree rescue nil
13
+
14
+ sh("git clone #{@url} #{dst}")
15
+ Dir.chdir(dst) do
16
+ sh("git branch -f _vimbrew #{@options[:ref]}")
17
+ sh("git checkout _vimbrew")
18
+ end
19
+ (dst + '.git').rmtree
20
+ end
21
+
22
+ def version
23
+ @options[:ref]
24
+ end
25
+
26
+ end
@@ -0,0 +1,6 @@
1
+ module Vimbrew::Downloaders
2
+
3
+ require 'vimbrew/downloaders/abstract'
4
+ require 'vimbrew/downloaders/git'
5
+
6
+ end
@@ -0,0 +1,82 @@
1
+ module Vimbrew::Environment
2
+
3
+ attr_reader :shell
4
+
5
+ def inside(dir)
6
+ dir = vim_root(dir) unless Pathname == dir and dir.absolute?
7
+ Dir.chdir(dir) do
8
+ yield
9
+ end
10
+ end
11
+
12
+ def sh(cmd)
13
+ output = %x[#{cmd} 2>&1]
14
+ if $?.exitstatus == 0
15
+ output
16
+ else
17
+ shell.say_status 'Error', cmd, :red
18
+ puts output
19
+ exit(1)
20
+ end
21
+ end
22
+
23
+ def vim_root(sub=nil)
24
+ @vim_root ||= Pathname.new('~/.vim').expand_path
25
+ (sub ? @vim_root + sub : @vim_root)
26
+ end
27
+
28
+ def link_root(sub=nil)
29
+ @link_root ||= vim_root('bundle')
30
+ (sub ? @link_root + sub : @link_root)
31
+ end
32
+
33
+ def install_root(sub=nil)
34
+ @install_root ||= vim_root('vimbrew/bundles')
35
+ (sub ? @install_root + sub : @install_root)
36
+ end
37
+
38
+ def recipe_root(sub=nil)
39
+ @recipe_root ||= vim_root('vimbrew/recipes')
40
+ (sub ? @recipe_root + sub : @recipe_root)
41
+ end
42
+
43
+ def installed_recipes(force=false)
44
+ if self == Vimbrew::Environment
45
+ @installed_recipes = nil if force
46
+ @installed_recipes ||= begin
47
+ YAML.load_file(vim_root('vimbrew/installed'))
48
+ end
49
+ else
50
+ Vimbrew::Environment.installed_recipes(force)
51
+ end
52
+ end
53
+
54
+ def dump_list_of_installed_recipes
55
+ File.open(vim_root('vimbrew/installed'), 'w+', 644) do |file|
56
+ file.write YAML.dump(installed_recipes)
57
+ end
58
+ end
59
+
60
+ def outdated_recipes(force=false)
61
+ if self == Vimbrew::Environment
62
+ @outdated_recipes = nil if force
63
+ @outdated_recipes ||= begin
64
+ r = installed_recipes
65
+ r.keys.select do |name|
66
+ recipe = load_recipe(name)
67
+ recipe.version != r[name]
68
+ end
69
+ end
70
+ else
71
+ Vimbrew::Environment.outdated_recipes(force)
72
+ end
73
+ end
74
+
75
+ def load_recipe(name)
76
+ require(recipe_root(name))
77
+ Vimbrew::Recipe.recipes[name]
78
+ end
79
+
80
+ extend self
81
+
82
+ end
@@ -0,0 +1,97 @@
1
+ class Vimbrew::Recipe
2
+ module ClassMethods
3
+
4
+ include Vimbrew::Environment
5
+
6
+ def recipes
7
+ if self == Vimbrew::Recipe
8
+ @recipes ||= {}
9
+ else
10
+ Vimbrew::Recipe.recipes
11
+ end
12
+ end
13
+
14
+ def inherited(subclass)
15
+ if self == Vimbrew::Recipe
16
+ recipes[subclass.recipe_name] = subclass
17
+ end
18
+ end
19
+
20
+ def url(value, options={})
21
+ url = URI.parse(value)
22
+ @fetcher = case url.scheme
23
+ when 'git' then Vimbrew::Downloaders::Git.new(url, options)
24
+ else raise "Cannot fetch url #{url}"
25
+ end
26
+ end
27
+
28
+ def home(value=nil)
29
+ @homepage = value if value
30
+ @homepage
31
+ end
32
+
33
+ def recipe_name
34
+ @recipe_name ||= self.to_s.gsub(/[A-Z]/, '_\0').downcase.gsub(/\A_|_\Z/, '')
35
+ end
36
+
37
+ def install(shell)
38
+ @shell = shell
39
+
40
+ install_path = install_root(recipe_name)
41
+ link_path = link_root("#{recipe_name}.vb")
42
+
43
+ link_path.unlink rescue nil
44
+
45
+ recipe = nil
46
+
47
+ @fetcher.fetch_into(shell, install_path)
48
+ inside(install_path) do
49
+ recipe = self.new(shell)
50
+ recipe.install
51
+ end
52
+
53
+ link_path.make_symlink install_path
54
+
55
+ installed_recipes[self.recipe_name] = self.version
56
+
57
+ shell.say_status('Installed', recipe_name, :green)
58
+ end
59
+
60
+ def uninstall(shell)
61
+ install_path = install_root(recipe_name)
62
+ link_path = link_root("#{recipe_name}.vb")
63
+
64
+ inside(install_path) do
65
+ recipe = self.new(shell)
66
+ recipe.uninstall
67
+ end
68
+
69
+ install_path.rmtree
70
+ link_path.unlink
71
+
72
+ installed_recipes.delete(self.recipe_name)
73
+
74
+ shell.say_status('Uninstalled', recipe_name, :green)
75
+ end
76
+
77
+ def version
78
+ @fetcher.version
79
+ end
80
+
81
+ end
82
+
83
+ include Vimbrew::Environment
84
+ extend ClassMethods
85
+
86
+ def initialize(shell)
87
+ @shell = shell
88
+ end
89
+
90
+ def install
91
+
92
+ end
93
+
94
+ def uninstall
95
+
96
+ end
97
+ end
@@ -0,0 +1,3 @@
1
+ module Vimbrew
2
+ VERSION = '0.0.1.a.1'
3
+ end
data/lib/vimbrew.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Vimbrew
2
+
3
+ require 'thor'
4
+ require 'pathname'
5
+ require 'yaml'
6
+ require 'uri'
7
+
8
+ require 'vimbrew/version'
9
+ require 'vimbrew/cli'
10
+ require 'vimbrew/environment'
11
+ require 'vimbrew/recipe'
12
+
13
+ require 'vimbrew/commands'
14
+ require 'vimbrew/downloaders'
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vimbrew
3
+ version: !ruby/object:Gem::Version
4
+ hash: 127
5
+ prerelease: true
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ - a
11
+ - 1
12
+ version: 0.0.1.a.1
13
+ platform: ruby
14
+ authors:
15
+ - Simon Menke
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-07-19 00:00:00 +02:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ name: thor
34
+ requirement: *id001
35
+ prerelease: false
36
+ type: :runtime
37
+ description: ...---...
38
+ email:
39
+ - simon.menke@gmail.com
40
+ executables:
41
+ - vimbrew
42
+ extensions: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ files:
47
+ - lib/vimbrew/cli.rb
48
+ - lib/vimbrew/commands/abstract.rb
49
+ - lib/vimbrew/commands/home.rb
50
+ - lib/vimbrew/commands/install.rb
51
+ - lib/vimbrew/commands/list.rb
52
+ - lib/vimbrew/commands/setup.rb
53
+ - lib/vimbrew/commands/sync.rb
54
+ - lib/vimbrew/commands/uninstall.rb
55
+ - lib/vimbrew/commands/update.rb
56
+ - lib/vimbrew/commands.rb
57
+ - lib/vimbrew/downloaders/abstract.rb
58
+ - lib/vimbrew/downloaders/git.rb
59
+ - lib/vimbrew/downloaders.rb
60
+ - lib/vimbrew/environment.rb
61
+ - lib/vimbrew/recipe.rb
62
+ - lib/vimbrew/version.rb
63
+ - lib/vimbrew.rb
64
+ - LICENSE
65
+ - README.md
66
+ - bin/vimbrew
67
+ has_rdoc: true
68
+ homepage: http://github.com/fd/vimbrew
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options: []
73
+
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 23
91
+ segments:
92
+ - 1
93
+ - 3
94
+ - 6
95
+ version: 1.3.6
96
+ requirements: []
97
+
98
+ rubyforge_project: vimbrew
99
+ rubygems_version: 1.3.7
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: --
103
+ test_files: []
104
+