nugrant 0.0.12 → 0.0.13
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 +9 -0
- data/lib/nugrant/parameter_bag.rb +15 -30
- data/lib/nugrant/parameters.rb +22 -35
- data/lib/nugrant/vagrant/command/parameters.rb +45 -35
- data/lib/nugrant/vagrant/config/user.rb +2 -0
- data/lib/nugrant/version.rb +1 -1
- data/nugrant.gemspec +2 -2
- data/test/lib/nugrant/test_parameters.rb +2 -7
- data/test/lib/nugrant/test_parameters_bag.rb +0 -80
- metadata +6 -6
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# 0.0.13
|
2
|
+
|
3
|
+
* Cleanup `Parameters` and `ParameterBag` interface
|
4
|
+
* The method `defaults` has been removed from the bag
|
5
|
+
* Setting defaults on `Parameters` now recompute the final bag
|
6
|
+
* Improved `vagrant user parameters` command
|
7
|
+
* Now using the exact config as seen by Vagrant, this includes defaults parameters
|
8
|
+
* An option has been added to only see defaults parameters
|
9
|
+
|
1
10
|
# 0.0.12
|
2
11
|
|
3
12
|
* Added travis configuration file
|
@@ -1,26 +1,29 @@
|
|
1
1
|
module Nugrant
|
2
2
|
class ParameterBag
|
3
3
|
def initialize(parameters)
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
@bag = recompute(parameters)
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
@
|
7
|
+
def recompute(parameters)
|
8
|
+
@bag = transform(parameters)
|
9
|
+
return @bag
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
12
|
+
def transform(parameters)
|
13
|
+
bag = {}
|
14
|
+
return bag if parameters == nil
|
15
15
|
|
16
|
+
parameters.each do |key, value|
|
16
17
|
if not value.is_a?(Hash)
|
17
|
-
|
18
|
+
bag[key] = value
|
18
19
|
next
|
19
20
|
end
|
20
21
|
|
21
22
|
# It is a hash, transform it into a bag
|
22
|
-
|
23
|
+
bag[key] = Nugrant::ParameterBag.new(value)
|
23
24
|
end
|
25
|
+
|
26
|
+
return bag
|
24
27
|
end
|
25
28
|
|
26
29
|
def [](param_name)
|
@@ -32,15 +35,11 @@ module Nugrant
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def has_param?(param_name)
|
35
|
-
return @bag
|
38
|
+
return @bag.has_key?(param_name)
|
36
39
|
end
|
37
40
|
|
38
41
|
def get_param(param_name)
|
39
42
|
if not has_param?(param_name)
|
40
|
-
if @defaults[param_name]
|
41
|
-
return @defaults[param_name]
|
42
|
-
end
|
43
|
-
|
44
43
|
raise KeyError, "Undefined parameter '#{param_name}'"
|
45
44
|
end
|
46
45
|
|
@@ -50,19 +49,5 @@ module Nugrant
|
|
50
49
|
def get_params()
|
51
50
|
return @bag
|
52
51
|
end
|
53
|
-
|
54
|
-
def defaults(parameters)
|
55
|
-
parameters.each do |key, value|
|
56
|
-
if value.is_a?(Hash) and has_param?(key)
|
57
|
-
@bag[key].defaults(value)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
@defaults = Nugrant::ParameterBag.new(parameters)
|
62
|
-
end
|
63
|
-
|
64
|
-
def defaults=(parameters)
|
65
|
-
defaults(parameters)
|
66
|
-
end
|
67
52
|
end
|
68
53
|
end
|
data/lib/nugrant/parameters.rb
CHANGED
@@ -5,57 +5,44 @@ require 'yaml'
|
|
5
5
|
|
6
6
|
module Nugrant
|
7
7
|
class Parameters < Nugrant::ParameterBag
|
8
|
+
attr_reader :defaults, :system, :user, :project, :all
|
9
|
+
|
8
10
|
def initialize(config = nil)
|
9
11
|
if config == nil
|
10
12
|
config = Nugrant::Config.new()
|
11
13
|
end
|
12
14
|
|
13
15
|
@config = config
|
14
|
-
@parameters = load_parameters()
|
15
|
-
|
16
|
-
super(@parameters)
|
17
|
-
end
|
18
|
-
|
19
|
-
def get_bag()
|
20
|
-
@bag
|
21
|
-
end
|
22
16
|
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
@defaults = nil
|
18
|
+
@system = parse_parameters(@config.system_params_path)
|
19
|
+
@user = parse_parameters(@config.user_params_path)
|
20
|
+
@project = parse_parameters(@config.project_params_path)
|
26
21
|
|
27
|
-
|
28
|
-
return @project_parameters
|
22
|
+
@all = compute_all()
|
29
23
|
end
|
30
24
|
|
31
|
-
def
|
32
|
-
|
33
|
-
end
|
25
|
+
def defaults=(parameters)
|
26
|
+
@defaults = parameters
|
34
27
|
|
35
|
-
|
36
|
-
|
28
|
+
# When defaults change, we need to recompute parameters hierarchy
|
29
|
+
compute_all()
|
37
30
|
end
|
38
31
|
|
39
|
-
def
|
40
|
-
@
|
41
|
-
@
|
42
|
-
@
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
if @project_parameters == nil and @user_parameters == nil and @system_parameters == nil
|
47
|
-
return parameters
|
48
|
-
end
|
32
|
+
def compute_all()
|
33
|
+
@all = Hash.new()
|
34
|
+
@all.deep_merge!(@defaults) if @defaults != nil
|
35
|
+
@all.deep_merge!(@system) if @system != nil
|
36
|
+
@all.deep_merge!(@user) if @user != nil
|
37
|
+
@all.deep_merge!(@project) if @project != nil
|
49
38
|
|
50
|
-
|
51
|
-
parameters.deep_merge!(@user_parameters) if @user_parameters != nil
|
52
|
-
parameters.deep_merge!(@project_parameters) if @project_parameters != nil
|
39
|
+
self.recompute(@all)
|
53
40
|
|
54
|
-
return
|
41
|
+
return @all
|
55
42
|
end
|
56
43
|
|
57
|
-
def
|
58
|
-
data =
|
44
|
+
def parse_parameters(file_path)
|
45
|
+
data = parse_data(file_path)
|
59
46
|
if data == nil || !data.kind_of?(Hash)
|
60
47
|
return
|
61
48
|
end
|
@@ -68,7 +55,7 @@ module Nugrant
|
|
68
55
|
return data
|
69
56
|
end
|
70
57
|
|
71
|
-
def
|
58
|
+
def parse_data(file_path)
|
72
59
|
return if not File.exists?(file_path)
|
73
60
|
|
74
61
|
begin
|
@@ -9,6 +9,7 @@ module Nugrant
|
|
9
9
|
super(arguments, environment)
|
10
10
|
|
11
11
|
@show_help = false
|
12
|
+
@show_defaults = false
|
12
13
|
@show_system = false
|
13
14
|
@show_user = false
|
14
15
|
@show_project = false
|
@@ -26,6 +27,10 @@ module Nugrant
|
|
26
27
|
@show_help = true
|
27
28
|
end
|
28
29
|
|
30
|
+
parser.on("-d", "--defaults", "Show only defaults parameters") do
|
31
|
+
@show_defaults = true
|
32
|
+
end
|
33
|
+
|
29
34
|
parser.on("-s", "--system", "Show only system parameters") do
|
30
35
|
@show_system = true
|
31
36
|
end
|
@@ -43,11 +48,6 @@ module Nugrant
|
|
43
48
|
"of all parameters that would be available for usage in the Vagrantfile.\n" +
|
44
49
|
"The hierarchy of the parameters is respected, so the final values are\n" +
|
45
50
|
"displayed."
|
46
|
-
|
47
|
-
parser.separator ""
|
48
|
-
parser.separator "Notice: For now, defaults directly defined in the Vagrantfile are not \n" +
|
49
|
-
"considered by this command. This is something we would like to fix in \n" +
|
50
|
-
"the near future."
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -57,11 +57,19 @@ module Nugrant
|
|
57
57
|
|
58
58
|
return help(parser) if @show_help
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
@logger.debug("'Parameters' each target VM...")
|
61
|
+
with_target_vms(arguments) do |vm|
|
62
|
+
parameters = vm.config.keys[:user].parameters
|
63
|
+
|
64
|
+
@env.ui.info("# Vm '#{vm.name}'", :prefix => false)
|
63
65
|
|
64
|
-
|
66
|
+
defaults(parameters) if @show_defaults
|
67
|
+
system(parameters) if @show_system
|
68
|
+
user(parameters) if @show_user
|
69
|
+
project(parameters) if @show_project
|
70
|
+
|
71
|
+
all(parameters) if !@show_defaults && !@show_system && !@show_user && !@show_project
|
72
|
+
end
|
65
73
|
|
66
74
|
return 0
|
67
75
|
end
|
@@ -70,55 +78,57 @@ module Nugrant
|
|
70
78
|
@env.ui.info(parser.help, :prefix => false)
|
71
79
|
end
|
72
80
|
|
73
|
-
def
|
74
|
-
parameters
|
75
|
-
|
76
|
-
print_header("System")
|
77
|
-
print_parameters(parameters.get_system_params())
|
81
|
+
def defaults(parameters)
|
82
|
+
print_results("Defaults", parameters.defaults)
|
78
83
|
end
|
79
84
|
|
80
|
-
def
|
81
|
-
parameters
|
82
|
-
|
83
|
-
print_header("User")
|
84
|
-
print_parameters(parameters.get_user_params())
|
85
|
+
def system(parameters)
|
86
|
+
print_results("System", parameters.system)
|
85
87
|
end
|
86
88
|
|
87
|
-
def
|
88
|
-
parameters
|
89
|
-
|
90
|
-
print_header("Project")
|
91
|
-
print_parameters(parameters.get_project_params())
|
89
|
+
def user(parameters)
|
90
|
+
print_results("User", parameters.user)
|
92
91
|
end
|
93
92
|
|
94
|
-
def
|
95
|
-
parameters
|
96
|
-
|
97
|
-
print_parameters(parameters.get_params())
|
93
|
+
def project(parameters)
|
94
|
+
print_results("Project", parameters.project)
|
98
95
|
end
|
99
96
|
|
100
|
-
def
|
101
|
-
|
102
|
-
@env.ui.info("-----------------------------------------------", :prefix => false)
|
97
|
+
def all(parameters)
|
98
|
+
print_results("All", parameters.all)
|
103
99
|
end
|
104
100
|
|
105
|
-
def
|
101
|
+
def print_results(kind, parameters)
|
106
102
|
if !parameters || parameters.empty?()
|
103
|
+
print_header(kind)
|
107
104
|
@env.ui.info(" Empty", :prefix => false)
|
108
105
|
@env.ui.info("", :prefix => false)
|
109
106
|
return
|
110
107
|
end
|
111
108
|
|
112
|
-
|
109
|
+
print_parameters(kind, {
|
113
110
|
'config' => {
|
114
111
|
'user' => parameters
|
115
112
|
}
|
116
|
-
}
|
113
|
+
})
|
114
|
+
end
|
117
115
|
|
118
|
-
|
116
|
+
def print_parameters(kind, data)
|
117
|
+
string = Nugrant::Helper::Yaml.format(data.to_yaml, :indent => 1)
|
118
|
+
|
119
|
+
print_header(kind)
|
119
120
|
@env.ui.info(string, :prefix => false)
|
120
121
|
@env.ui.info("", :prefix => false)
|
121
122
|
end
|
123
|
+
|
124
|
+
def print_header(kind, length = 50)
|
125
|
+
@env.ui.info(" #{kind.capitalize} Parameters", :prefix => false)
|
126
|
+
@env.ui.info(" " + "-" * length, :prefix => false)
|
127
|
+
end
|
128
|
+
|
129
|
+
def compute_header_length(string)
|
130
|
+
|
131
|
+
end
|
122
132
|
end
|
123
133
|
end
|
124
134
|
end
|
data/lib/nugrant/version.rb
CHANGED
data/nugrant.gemspec
CHANGED
@@ -12,9 +12,9 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.homepage = "https://github.com/nuecho/nugrant"
|
13
13
|
gem.summary = "Vagrant plugin to enable user specific configuration parameters."
|
14
14
|
gem.description = <<-EOF
|
15
|
-
This gem is in fact a Vagrant
|
15
|
+
This gem is in fact a Vagrant plugin. By installing this gem, it will be
|
16
16
|
possible to define user specific configuration files that will be merge
|
17
|
-
directly into the Vagrant configuration. This is
|
17
|
+
directly into the Vagrant configuration. This is useful if you need to
|
18
18
|
share a Vagrantfile to multiple developers but would like to customize
|
19
19
|
some parameters for each users differently.
|
20
20
|
EOF
|
@@ -183,11 +183,6 @@ class Nugrant::TestParameters < Test::Unit::TestCase
|
|
183
183
|
def test_defaults()
|
184
184
|
filetypes.each do |params_filetype|
|
185
185
|
parameters = create_parameters(params_filetype, "params_simple", invalid_path, invalid_path)
|
186
|
-
parameters.defaults({"test" => "override", "level" => "new"})
|
187
|
-
|
188
|
-
assert_equal("value", parameters.test)
|
189
|
-
assert_equal("new", parameters.level)
|
190
|
-
|
191
186
|
parameters.defaults = {"test" => "override1", "level" => "new1"}
|
192
187
|
|
193
188
|
assert_equal("value", parameters.test)
|
@@ -198,7 +193,7 @@ class Nugrant::TestParameters < Test::Unit::TestCase
|
|
198
193
|
def test_empty_file()
|
199
194
|
filetypes.each do |params_filetype|
|
200
195
|
parameters = create_parameters(params_filetype, "params_empty", invalid_path, invalid_path)
|
201
|
-
parameters.defaults
|
196
|
+
parameters.defaults = {"test" => "value"}
|
202
197
|
|
203
198
|
assert_equal("value", parameters.test)
|
204
199
|
end
|
@@ -208,7 +203,7 @@ class Nugrant::TestParameters < Test::Unit::TestCase
|
|
208
203
|
["boolean", "list"].each do |wrong_type|
|
209
204
|
filetypes.each do |params_filetype|
|
210
205
|
parameters = create_parameters(params_filetype, "params_#{wrong_type}", invalid_path, invalid_path)
|
211
|
-
parameters.defaults
|
206
|
+
parameters.defaults = {"test" => "value"}
|
212
207
|
|
213
208
|
assert_equal("value", parameters.test)
|
214
209
|
end
|
@@ -81,84 +81,4 @@ class Nugrant::TestParameterBag < Test::Unit::TestCase
|
|
81
81
|
bag["invalid_value"]
|
82
82
|
end
|
83
83
|
end
|
84
|
-
|
85
|
-
def test_restricted_key_defaults()
|
86
|
-
assert_raise(ArgumentError) do
|
87
|
-
results = create_bag({"defaults" => "one"})
|
88
|
-
puts("Results: #{results.inspect} (Should have thrown!)")
|
89
|
-
end
|
90
|
-
|
91
|
-
assert_raise(ArgumentError) do
|
92
|
-
results = create_bag({"level" => {"defaults" => "value"}})
|
93
|
-
puts("Results: #{results.inspect} (Should have thrown!)")
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_defaults()
|
98
|
-
run_test_defaults({
|
99
|
-
"first" => {
|
100
|
-
"level1" => "value1",
|
101
|
-
"level2" => "value2",
|
102
|
-
"deeper" => {
|
103
|
-
"level3" => "value3"
|
104
|
-
}
|
105
|
-
},
|
106
|
-
}, {
|
107
|
-
"first" => {
|
108
|
-
"level1" => "default1",
|
109
|
-
"level3" => "default3",
|
110
|
-
"deeper" => {
|
111
|
-
"level3" => "default3",
|
112
|
-
"level4" => "value4"
|
113
|
-
}
|
114
|
-
},
|
115
|
-
"second" => {
|
116
|
-
"level1" => "default1"
|
117
|
-
},
|
118
|
-
"third" => "default3"
|
119
|
-
}, {
|
120
|
-
"first" => {
|
121
|
-
"level1" => "value1",
|
122
|
-
"level2" => "value2",
|
123
|
-
"level3" => "default3",
|
124
|
-
"deeper" => {
|
125
|
-
"level3" => "value3",
|
126
|
-
"level4" => "value4"
|
127
|
-
}
|
128
|
-
},
|
129
|
-
"second" => {
|
130
|
-
"level1" => "default1"
|
131
|
-
},
|
132
|
-
"third" => "default3"
|
133
|
-
})
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_defaults_empty()
|
137
|
-
defaults = {
|
138
|
-
"first" => {
|
139
|
-
"second" => {
|
140
|
-
"third" => {
|
141
|
-
"value1" => "one",
|
142
|
-
"value2" => "two"
|
143
|
-
},
|
144
|
-
"fourth" => "third",
|
145
|
-
},
|
146
|
-
"fifth" => "four"
|
147
|
-
}
|
148
|
-
}
|
149
|
-
|
150
|
-
run_test_defaults({}, defaults, defaults)
|
151
|
-
end
|
152
|
-
|
153
|
-
def run_test_defaults(parameters, parameters_defaults, expected)
|
154
|
-
bag = create_bag(parameters)
|
155
|
-
bag.defaults(parameters_defaults)
|
156
|
-
|
157
|
-
assert_bag(expected, bag)
|
158
|
-
|
159
|
-
bag = create_bag(parameters)
|
160
|
-
bag.defaults = parameters_defaults
|
161
|
-
|
162
|
-
assert_bag(expected, bag)
|
163
|
-
end
|
164
84
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nugrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
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: 2013-02-
|
12
|
+
date: 2013-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deep_merge
|
@@ -59,9 +59,9 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.0.5
|
62
|
-
description: ! " This gem is in fact a Vagrant
|
62
|
+
description: ! " This gem is in fact a Vagrant plugin. By installing this gem,
|
63
63
|
it will be\n possible to define user specific configuration files that will
|
64
|
-
be merge\n directly into the Vagrant configuration. This is
|
64
|
+
be merge\n directly into the Vagrant configuration. This is useful if you need
|
65
65
|
to\n share a Vagrantfile to multiple developers but would like to customize\n
|
66
66
|
\ some parameters for each users differently.\n"
|
67
67
|
email:
|
@@ -141,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
141
|
version: '0'
|
142
142
|
segments:
|
143
143
|
- 0
|
144
|
-
hash: -
|
144
|
+
hash: -1143289133319579260
|
145
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
146
|
none: false
|
147
147
|
requirements:
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
version: '0'
|
151
151
|
segments:
|
152
152
|
- 0
|
153
|
-
hash: -
|
153
|
+
hash: -1143289133319579260
|
154
154
|
requirements: []
|
155
155
|
rubyforge_project:
|
156
156
|
rubygems_version: 1.8.24
|