vagrant-plugins 0.1.0 → 0.2.0
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/CHANGELOG.md +6 -0
- data/README.md +8 -3
- data/lib/vagrant-plugins/command.rb +48 -2
- data/lib/vagrant-plugins/ui.rb +130 -43
- data/lib/vagrant-plugins/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# v0.2.0
|
|
2
|
+
|
|
3
|
+
* Adds a verbose flag. Informs about plugin features such as "provides commands" or "action hook" etc.
|
|
4
|
+
* Adds a `--no-heads` flag. Swicth off the column descriptions.
|
|
5
|
+
* Revamped the internal UI component to use a nifty DSL to describe the column layout.
|
|
6
|
+
|
|
1
7
|
# v0.1.0
|
|
2
8
|
|
|
3
9
|
* simple list of all loaded plugin names
|
data/README.md
CHANGED
|
@@ -3,20 +3,23 @@ vagrant-plugins
|
|
|
3
3
|
|
|
4
4
|
A vagrant plugin to list active vagrant plugins.
|
|
5
5
|
|
|
6
|
+
Since *vagrant 1.1* (which is not yet released) you need to specify which plugins you want to load. You may either use the global `.vagrant.rc` file or the projects `Vagrantfile`.
|
|
7
|
+
This can get a bit confusing when having a lot of different configurations or projects.
|
|
6
8
|
|
|
9
|
+
This plugin aims to help you keeping track of which plugins are loaded in your project.
|
|
7
10
|
|
|
8
11
|
## Installation
|
|
9
12
|
|
|
10
13
|
If you use the gem version of Vagrant, use:
|
|
11
14
|
|
|
12
15
|
```bash
|
|
13
|
-
$ gem install vagrant-
|
|
16
|
+
$ gem install vagrant-plugins
|
|
14
17
|
```
|
|
15
18
|
|
|
16
19
|
otherwise, use:
|
|
17
20
|
|
|
18
21
|
```bash
|
|
19
|
-
$ vagrant gem install vagrant-
|
|
22
|
+
$ vagrant gem install vagrant-plugins
|
|
20
23
|
```
|
|
21
24
|
|
|
22
25
|
And add this line to your `.vagrantrc` or `Vagrantfile`:
|
|
@@ -28,9 +31,11 @@ Vagrant.require_plugin 'vagrant-plugins'
|
|
|
28
31
|
## Usage
|
|
29
32
|
|
|
30
33
|
```bash
|
|
31
|
-
$ vagrant plugins
|
|
34
|
+
$ vagrant plugins [-a|--all]
|
|
32
35
|
```
|
|
33
36
|
|
|
37
|
+
* `-a|--all` : Display *vagrant's* builtin plugins as well.
|
|
38
|
+
|
|
34
39
|
## Contributing
|
|
35
40
|
|
|
36
41
|
1. Fork it
|
|
@@ -12,6 +12,14 @@ module VagrantPlugininspection
|
|
|
12
12
|
opts.on("-a", "--all", "List builtin vagrant plugins as well.") do
|
|
13
13
|
options[:all] = true
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
opts.on("-H", "--no-head", "Do not print descriptive headings") do
|
|
17
|
+
options[:no_heads] = true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
opts.on("-v", "--verbose", "Be verbose and display plugin features") do
|
|
21
|
+
options[:verbose] = true
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
argv = parse_options(opts)
|
|
@@ -29,14 +37,52 @@ module VagrantPlugininspection
|
|
|
29
37
|
|
|
30
38
|
plugins = Vagrant.plugin("1").registered.map { |plugin|
|
|
31
39
|
if options[:all] || !builtins.include?(plugin)
|
|
32
|
-
{
|
|
40
|
+
info = {
|
|
33
41
|
:name => plugin.name,
|
|
34
42
|
:description => plugin.description
|
|
35
43
|
}
|
|
44
|
+
|
|
45
|
+
info.merge!({
|
|
46
|
+
:hosts => !!plugin.data[:hosts],
|
|
47
|
+
:guests => !!plugin.data[:guests],
|
|
48
|
+
:provisioners => !!plugin.data[:provisioners],
|
|
49
|
+
:commands => !!plugin.data[:command],
|
|
50
|
+
:action_hooks => !!plugin.data[:action_hooks],
|
|
51
|
+
:configs => !!plugin.data[:config],
|
|
52
|
+
}) if options[:verbose]
|
|
53
|
+
|
|
54
|
+
# return the plugins info Hash
|
|
55
|
+
info
|
|
36
56
|
end
|
|
37
57
|
}.compact
|
|
38
58
|
|
|
39
|
-
|
|
59
|
+
if options[:verbose] && !options[:no_heads]
|
|
60
|
+
head = <<-EOS
|
|
61
|
+
+- hosts
|
|
62
|
+
|+- guests
|
|
63
|
+
||+- provisioners
|
|
64
|
+
|||+- commands
|
|
65
|
+
||||+- action_hooks
|
|
66
|
+
|||||+- configs
|
|
67
|
+
EOS
|
|
68
|
+
ui.info head, :prefix => false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
ui.print_columns(plugins, :heads => !options[:no_heads]) do
|
|
72
|
+
if options[:verbose]
|
|
73
|
+
column :hosts, :name => '|'
|
|
74
|
+
column :guests, :name => '|'
|
|
75
|
+
column :provisioners, :name => '|'
|
|
76
|
+
column :commands, :name => '|'
|
|
77
|
+
column :action_hooks, :name => '|'
|
|
78
|
+
column :configs, :name => '|'
|
|
79
|
+
seperator "\t"
|
|
80
|
+
end
|
|
81
|
+
column :name
|
|
82
|
+
seperator "\t"
|
|
83
|
+
column :description
|
|
84
|
+
end
|
|
85
|
+
|
|
40
86
|
end
|
|
41
87
|
end
|
|
42
88
|
|
data/lib/vagrant-plugins/ui.rb
CHANGED
|
@@ -2,29 +2,9 @@ module VagrantPlugininspection
|
|
|
2
2
|
module UI
|
|
3
3
|
class Columnized < Vagrant::UI::Colored
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
defaults = { :new_line => true, :prefix => true }
|
|
7
|
-
opts = defaults.merge(opts || {})
|
|
8
|
-
super
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def print_columns(data, opts=nil)
|
|
12
|
-
defaults = { :prefix => false }
|
|
13
|
-
opts = defaults.merge(opts ||= {})
|
|
14
|
-
|
|
15
|
-
columns = opts.delete(:column_order)
|
|
16
|
-
|
|
17
|
-
data = clean(data, opts)
|
|
18
|
-
size = sizes(data)
|
|
5
|
+
class LayoutError < StandardError; end
|
|
19
6
|
|
|
20
|
-
|
|
21
|
-
table_head << (table_head.gsub(/[^\t]/, '-')) + "\n"
|
|
22
|
-
table_body = data.map { |line| columnize_row(line, size, columns) }.join("\n")
|
|
23
|
-
|
|
24
|
-
say :info, table_head << table_body, opts
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
protected
|
|
7
|
+
class Layout
|
|
28
8
|
|
|
29
9
|
BOOL_MAP = {
|
|
30
10
|
true => '*',
|
|
@@ -32,32 +12,139 @@ module VagrantPlugininspection
|
|
|
32
12
|
nil => ''
|
|
33
13
|
}
|
|
34
14
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
15
|
+
# @param [Array] _optional_ Array with column names for a simple layout. Columns will be seperated by tab.
|
|
16
|
+
def initialize(simple=nil)
|
|
17
|
+
simple.each { |column|
|
|
18
|
+
self.column(column)
|
|
19
|
+
self.seperator("\t")
|
|
20
|
+
} if simple
|
|
21
|
+
|
|
22
|
+
@heads = Hash.new
|
|
23
|
+
@columns = Hash.new
|
|
24
|
+
@stack = Array.new
|
|
42
25
|
end
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
26
|
+
|
|
27
|
+
# Adds a column definition to the current position
|
|
28
|
+
def column(key, opts=nil)
|
|
29
|
+
defaults = { :name => key.to_s }
|
|
30
|
+
opts = defaults.merge(opts || {})
|
|
31
|
+
|
|
32
|
+
@heads[key] = opts[:name]
|
|
33
|
+
@columns[key] = opts
|
|
34
|
+
@stack << key
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Adds a seperator to the current position
|
|
38
|
+
def seperator(str)
|
|
39
|
+
@stack << str.to_s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Returns an Array of columns formatted lines.
|
|
43
|
+
# Also includes column headers and horizonal header line.
|
|
44
|
+
# @return [Array] Returns an Array of formatted lines
|
|
45
|
+
def rows(data, opts=nil)
|
|
46
|
+
defaults = { :heads => true }
|
|
47
|
+
opts = defaults.merge(opts || {})
|
|
48
|
+
|
|
49
|
+
data = clean(data)
|
|
50
|
+
size = sizes(data)
|
|
51
|
+
|
|
52
|
+
rendered = Array.new
|
|
53
|
+
if opts.delete(:heads)
|
|
54
|
+
rendered << columnize_row(@heads, size)
|
|
55
|
+
rendered << horizontal_line(size)
|
|
56
|
+
end
|
|
57
|
+
rendered << data.map { |line| columnize_row(line, size) }
|
|
58
|
+
|
|
59
|
+
# return a flat Array with lines
|
|
60
|
+
rendered.flatten
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
protected
|
|
64
|
+
|
|
65
|
+
def column_name(key)
|
|
66
|
+
col = @heads[key]
|
|
67
|
+
(col || key).to_s
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# translate boolean values using BOOL_MAP
|
|
71
|
+
# strips whitespace and newline
|
|
72
|
+
def clean(data)
|
|
73
|
+
data.map{|line|
|
|
74
|
+
Hash[line.map{ |col|
|
|
75
|
+
col[1] = BOOL_MAP[col[1]] || col[1].to_s.strip.gsub(/^\s+|\s+$/, '').gsub(/\n|\r/,' ')
|
|
76
|
+
col
|
|
77
|
+
}]
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# determinate the size of each column
|
|
82
|
+
def sizes(data)
|
|
83
|
+
s = {}
|
|
84
|
+
data.each { |line|
|
|
85
|
+
line.each_pair { |key, value|
|
|
86
|
+
s[key] = [column_name(key).length, value.length, (s[key] || 0)].max
|
|
87
|
+
}
|
|
49
88
|
}
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
s
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def columnize_row(row, sizes)
|
|
93
|
+
@stack.map { |piece|
|
|
94
|
+
if piece.is_a? String
|
|
95
|
+
piece
|
|
96
|
+
else
|
|
97
|
+
sprintf "%-#{sizes[piece]}s", row[piece]
|
|
98
|
+
end
|
|
99
|
+
}.join
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def horizontal_line(sizes)
|
|
103
|
+
@stack.map { |piece|
|
|
104
|
+
if piece.is_a? String
|
|
105
|
+
piece
|
|
106
|
+
else
|
|
107
|
+
'-' * sizes[piece]
|
|
108
|
+
end
|
|
109
|
+
}.join
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end # Layout
|
|
113
|
+
|
|
114
|
+
def print_columns(data, opts=nil, &block)
|
|
115
|
+
defaults = {}
|
|
116
|
+
opts = defaults.merge(opts ||= {})
|
|
117
|
+
layout = opts.delete(:layout)
|
|
118
|
+
columns = opts.delete(:columns)
|
|
119
|
+
|
|
120
|
+
layout ||= if block_given?
|
|
121
|
+
self.layout(&block)
|
|
122
|
+
elsif columns && !columns.empty?
|
|
123
|
+
Layout.new(columns)
|
|
124
|
+
else
|
|
125
|
+
raise LayoutError, "You need to pass a layout information, either as a block or array."
|
|
52
126
|
end
|
|
53
127
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
128
|
+
rendered = layout.rows(data, opts).map { |line|
|
|
129
|
+
format_message(:info, line, opts)
|
|
130
|
+
}.join("\n")
|
|
131
|
+
|
|
132
|
+
# force the prefix off, we'd allready handled that
|
|
133
|
+
opts[:prefix] = false
|
|
134
|
+
|
|
135
|
+
say :info, rendered, opts
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
protected
|
|
58
139
|
|
|
59
|
-
|
|
140
|
+
# helper to create us a Layout instance and prime using a given block
|
|
141
|
+
def layout(&block)
|
|
142
|
+
layout = Layout.new
|
|
143
|
+
layout.instance_eval(&block)
|
|
144
|
+
# return the layout descriptor
|
|
145
|
+
layout
|
|
60
146
|
end
|
|
61
|
-
|
|
147
|
+
|
|
148
|
+
end # Columnized
|
|
62
149
|
end
|
|
63
150
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vagrant-plugins
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-05-
|
|
12
|
+
date: 2012-05-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: vagrant
|