nugrant 0.0.11
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/.buildpath +6 -0
- data/.gitattributes +33 -0
- data/.gitignore +19 -0
- data/.project +17 -0
- data/CHANGELOG.md +35 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +198 -0
- data/Rakefile +10 -0
- data/lib/nugrant.rb +12 -0
- data/lib/nugrant/config.rb +51 -0
- data/lib/nugrant/parameter_bag.rb +68 -0
- data/lib/nugrant/parameters.rb +104 -0
- data/lib/nugrant/vagrant/user_command.rb +86 -0
- data/lib/nugrant/vagrant/user_parameters.rb +27 -0
- data/lib/nugrant/version.rb +3 -0
- data/lib/vagrant_init.rb +7 -0
- data/nugrant.gemspec +31 -0
- data/test/lib/nugrant/test_config.rb +125 -0
- data/test/lib/nugrant/test_parameters.rb +205 -0
- data/test/lib/nugrant/test_parameters_bag.rb +164 -0
- data/test/resources/.vagrantuser +3 -0
- data/test/resources/README.md +52 -0
- data/test/resources/Vagrantfile +5 -0
- data/test/resources/json/params_combinations.json +81 -0
- data/test/resources/json/params_defaults_at_root.json +3 -0
- data/test/resources/json/params_defaults_not_at_root.json +5 -0
- data/test/resources/json/params_project_1.json +6 -0
- data/test/resources/json/params_project_2.json +29 -0
- data/test/resources/json/params_simple.json +3 -0
- data/test/resources/json/params_system_1.json +6 -0
- data/test/resources/json/params_system_2.json +29 -0
- data/test/resources/json/params_unix_eol.json +6 -0
- data/test/resources/json/params_user_1.json +6 -0
- data/test/resources/json/params_user_2.json +29 -0
- data/test/resources/json/params_windows_eol.json +6 -0
- data/test/resources/yml/params_combinations.yml +72 -0
- data/test/resources/yml/params_defaults_at_root.yml +1 -0
- data/test/resources/yml/params_defaults_not_at_root.yml +2 -0
- data/test/resources/yml/params_project_1.yml +4 -0
- data/test/resources/yml/params_project_2.yml +23 -0
- data/test/resources/yml/params_simple.yml +1 -0
- data/test/resources/yml/params_system_1.yml +4 -0
- data/test/resources/yml/params_system_2.yml +25 -0
- data/test/resources/yml/params_unix_eol.yml +3 -0
- data/test/resources/yml/params_user_1.yml +4 -0
- data/test/resources/yml/params_user_2.yml +23 -0
- data/test/resources/yml/params_windows_eol.yml +3 -0
- metadata +175 -0
@@ -0,0 +1,164 @@
|
|
1
|
+
require 'nugrant'
|
2
|
+
require 'nugrant/parameters'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class Nugrant::TestParameterBag < Test::Unit::TestCase
|
6
|
+
def create_bag(parameters)
|
7
|
+
return Nugrant::ParameterBag.new(parameters)
|
8
|
+
end
|
9
|
+
|
10
|
+
def assert_bag(parameters, bag)
|
11
|
+
assert_kind_of(Nugrant::ParameterBag, bag)
|
12
|
+
|
13
|
+
parameters.each do |key, value|
|
14
|
+
if not value.is_a?(Hash)
|
15
|
+
assert_equal(value, bag.send(key))
|
16
|
+
assert_equal(value, bag[key])
|
17
|
+
next
|
18
|
+
end
|
19
|
+
|
20
|
+
assert_bag(value, bag.send(key))
|
21
|
+
assert_bag(value, bag[key])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def run_test_bag(parameters)
|
26
|
+
bag = create_bag(parameters)
|
27
|
+
|
28
|
+
assert_bag(parameters, bag)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_bag()
|
32
|
+
run_test_bag({"first" => "value1", "second" => "value2"})
|
33
|
+
|
34
|
+
run_test_bag({
|
35
|
+
"first" => {
|
36
|
+
"level1" => "value1",
|
37
|
+
"level2" => "value2",
|
38
|
+
},
|
39
|
+
"second" => {
|
40
|
+
"level1" => "value3",
|
41
|
+
"level2" => "value4",
|
42
|
+
},
|
43
|
+
"third" => "value5"
|
44
|
+
})
|
45
|
+
|
46
|
+
run_test_bag({
|
47
|
+
"first" => {
|
48
|
+
"level1" => {
|
49
|
+
"level11" => "value1",
|
50
|
+
"level12" => "value2",
|
51
|
+
},
|
52
|
+
"level2" => {
|
53
|
+
"level21" => "value3",
|
54
|
+
"level22" => "value4",
|
55
|
+
},
|
56
|
+
"level3" => "value5",
|
57
|
+
},
|
58
|
+
"second" => {
|
59
|
+
"level1" => {
|
60
|
+
"level11" => "value6",
|
61
|
+
"level12" => "value7",
|
62
|
+
},
|
63
|
+
"level2" => {
|
64
|
+
"level21" => "value8",
|
65
|
+
"level22" => "value9",
|
66
|
+
},
|
67
|
+
"level3" => "value10",
|
68
|
+
},
|
69
|
+
"third" => "value11"
|
70
|
+
})
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_undefined_value()
|
74
|
+
bag = create_bag({"value" => "one"})
|
75
|
+
|
76
|
+
assert_raise(KeyError) do
|
77
|
+
bag.invalid_value
|
78
|
+
end
|
79
|
+
|
80
|
+
assert_raise(KeyError) do
|
81
|
+
bag["invalid_value"]
|
82
|
+
end
|
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
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
This readme give information on how to read resources file
|
2
|
+
that test merge possibilities.
|
3
|
+
|
4
|
+
Naming convetions
|
5
|
+
-----------------
|
6
|
+
|
7
|
+
The filename used a specific convetion:
|
8
|
+
|
9
|
+
params_*kind*_*level*.[yml|json]
|
10
|
+
|
11
|
+
The kind is one of: [`project`|`user`|`system`] and defines which
|
12
|
+
responsability they will hold. The order is `project` overrides
|
13
|
+
`user` overrides `system`.
|
14
|
+
|
15
|
+
Inside file, keys have special meaning. They define how
|
16
|
+
the overrides take place. We used the binary format
|
17
|
+
to represent each possibilities.
|
18
|
+
|
19
|
+
key = "1.1.1"
|
20
|
+
|
21
|
+
Each element represent a specific kind. Read from left to
|
22
|
+
right, they are assigned to `project`, `user` and `system`
|
23
|
+
respectively.
|
24
|
+
|
25
|
+
So,
|
26
|
+
|
27
|
+
`project` `user` `system`
|
28
|
+
1 . 1 . 1
|
29
|
+
|
30
|
+
A 1 signify that the file kind *column* will have a key "1.1.1" set
|
31
|
+
to value *kind*. A 0 means the key is not set. With this in mind,
|
32
|
+
it is easy to reason about the value that will need to be asserted
|
33
|
+
for key "1.1.1" on level file *level*.
|
34
|
+
|
35
|
+
# params_project_1.yml file
|
36
|
+
"1.1.1": "project"
|
37
|
+
|
38
|
+
# params_user_1.yml file
|
39
|
+
"1.1.1": "user"
|
40
|
+
|
41
|
+
# params_system_1.yml file
|
42
|
+
"1.1.1": "system"
|
43
|
+
|
44
|
+
# Value to assert
|
45
|
+
assert("project", parameters.get("1.1.1"))
|
46
|
+
|
47
|
+
With the help of params_combinations, it is easy to create test file
|
48
|
+
either for other formats or for more level. Copy the all keys expect
|
49
|
+
"0.0.0" to the file. Say the file is of kind `project`, then for
|
50
|
+
column `project`, each time a one is there, replace `base` by the
|
51
|
+
kind (here `project`). The line that still have value base as the
|
52
|
+
value must be deleted.
|
@@ -0,0 +1,81 @@
|
|
1
|
+
{
|
2
|
+
"1.1.1": "base",
|
3
|
+
"1.1.0": "base",
|
4
|
+
"1.0.1": "base",
|
5
|
+
"0.1.1": "base",
|
6
|
+
"1.0.0": "base",
|
7
|
+
"0.1.0": "base",
|
8
|
+
"0.0.1": "base",
|
9
|
+
|
10
|
+
"1.1.1": {
|
11
|
+
"1.1.1": "base",
|
12
|
+
"1.1.0": "base",
|
13
|
+
"1.0.1": "base",
|
14
|
+
"0.1.1": "base",
|
15
|
+
"1.0.0": "base",
|
16
|
+
"0.1.0": "base",
|
17
|
+
"0.0.1": "base"
|
18
|
+
},
|
19
|
+
|
20
|
+
"1.1.0": {
|
21
|
+
"1.1.1": "base",
|
22
|
+
"1.1.0": "base",
|
23
|
+
"1.0.1": "base",
|
24
|
+
"0.1.1": "base",
|
25
|
+
"1.0.0": "base",
|
26
|
+
"0.1.0": "base",
|
27
|
+
"0.0.1": "base"
|
28
|
+
},
|
29
|
+
|
30
|
+
"1.0.1": {
|
31
|
+
"1.1.1": "base",
|
32
|
+
"1.1.0": "base",
|
33
|
+
"1.0.1": "base",
|
34
|
+
"0.1.1": "base",
|
35
|
+
"1.0.0": "base",
|
36
|
+
"0.1.0": "base",
|
37
|
+
"0.0.1": "base"
|
38
|
+
},
|
39
|
+
|
40
|
+
"0.1.1": {
|
41
|
+
"1.1.1": "base",
|
42
|
+
"1.1.0": "base",
|
43
|
+
"1.0.1": "base",
|
44
|
+
"0.1.1": "base",
|
45
|
+
"1.0.0": "base",
|
46
|
+
"0.1.0": "base",
|
47
|
+
"0.0.1": "base"
|
48
|
+
},
|
49
|
+
|
50
|
+
"1.0.0": {
|
51
|
+
"1.1.1": "base",
|
52
|
+
"1.1.0": "base",
|
53
|
+
"1.0.1": "base",
|
54
|
+
"0.1.1": "base",
|
55
|
+
"1.0.0": "base",
|
56
|
+
"0.1.0": "base",
|
57
|
+
"0.0.1": "base"
|
58
|
+
},
|
59
|
+
|
60
|
+
"0.1.0": {
|
61
|
+
"1.1.1": "base",
|
62
|
+
"1.1.0": "base",
|
63
|
+
"1.0.1": "base",
|
64
|
+
"0.1.1": "base",
|
65
|
+
"1.0.0": "base",
|
66
|
+
"0.1.0": "base",
|
67
|
+
"0.0.1": "base"
|
68
|
+
},
|
69
|
+
|
70
|
+
"0.0.1": {
|
71
|
+
"1.1.1": "base",
|
72
|
+
"1.1.0": "base",
|
73
|
+
"1.0.1": "base",
|
74
|
+
"0.1.1": "base",
|
75
|
+
"1.0.0": "base",
|
76
|
+
"0.1.0": "base",
|
77
|
+
"0.0.1": "base"
|
78
|
+
},
|
79
|
+
|
80
|
+
"0.0.0": "do not put, key should not exist"
|
81
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"1.1.1": {
|
3
|
+
"1.1.1": "project",
|
4
|
+
"1.1.0": "project",
|
5
|
+
"1.0.1": "project",
|
6
|
+
"1.0.0": "project"
|
7
|
+
},
|
8
|
+
|
9
|
+
"1.1.0": {
|
10
|
+
"1.1.1": "project",
|
11
|
+
"1.1.0": "project",
|
12
|
+
"1.0.1": "project",
|
13
|
+
"1.0.0": "project"
|
14
|
+
},
|
15
|
+
|
16
|
+
"1.0.1": {
|
17
|
+
"1.1.1": "project",
|
18
|
+
"1.1.0": "project",
|
19
|
+
"1.0.1": "project",
|
20
|
+
"1.0.0": "project"
|
21
|
+
},
|
22
|
+
|
23
|
+
"1.0.0": {
|
24
|
+
"1.1.1": "project",
|
25
|
+
"1.1.0": "project",
|
26
|
+
"1.0.1": "project",
|
27
|
+
"1.0.0": "project"
|
28
|
+
}
|
29
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"1.1.1": {
|
3
|
+
"1.1.1": "system",
|
4
|
+
"1.0.1": "system",
|
5
|
+
"0.1.1": "system",
|
6
|
+
"0.0.1": "system"
|
7
|
+
},
|
8
|
+
|
9
|
+
"1.0.1": {
|
10
|
+
"1.1.1": "system",
|
11
|
+
"1.0.1": "system",
|
12
|
+
"0.1.1": "system",
|
13
|
+
"0.0.1": "system"
|
14
|
+
},
|
15
|
+
|
16
|
+
"0.1.1": {
|
17
|
+
"1.1.1": "system",
|
18
|
+
"1.0.1": "system",
|
19
|
+
"0.1.1": "system",
|
20
|
+
"0.0.1": "system"
|
21
|
+
},
|
22
|
+
|
23
|
+
"0.0.1": {
|
24
|
+
"1.1.1": "system",
|
25
|
+
"1.0.1": "system",
|
26
|
+
"0.1.1": "system",
|
27
|
+
"0.0.1": "system"
|
28
|
+
}
|
29
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"1.1.1": {
|
3
|
+
"1.1.1": "user",
|
4
|
+
"1.1.0": "user",
|
5
|
+
"0.1.1": "user",
|
6
|
+
"0.1.0": "user"
|
7
|
+
},
|
8
|
+
|
9
|
+
"1.1.0": {
|
10
|
+
"1.1.1": "user",
|
11
|
+
"1.1.0": "user",
|
12
|
+
"0.1.1": "user",
|
13
|
+
"0.1.0": "user"
|
14
|
+
},
|
15
|
+
|
16
|
+
"0.1.1": {
|
17
|
+
"1.1.1": "user",
|
18
|
+
"1.1.0": "user",
|
19
|
+
"0.1.1": "user",
|
20
|
+
"0.1.0": "user"
|
21
|
+
},
|
22
|
+
|
23
|
+
"0.1.0": {
|
24
|
+
"1.1.1": "user",
|
25
|
+
"1.1.0": "user",
|
26
|
+
"0.1.1": "user",
|
27
|
+
"0.1.0": "user"
|
28
|
+
}
|
29
|
+
}
|