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.
Files changed (49) hide show
  1. data/.buildpath +6 -0
  2. data/.gitattributes +33 -0
  3. data/.gitignore +19 -0
  4. data/.project +17 -0
  5. data/CHANGELOG.md +35 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +198 -0
  9. data/Rakefile +10 -0
  10. data/lib/nugrant.rb +12 -0
  11. data/lib/nugrant/config.rb +51 -0
  12. data/lib/nugrant/parameter_bag.rb +68 -0
  13. data/lib/nugrant/parameters.rb +104 -0
  14. data/lib/nugrant/vagrant/user_command.rb +86 -0
  15. data/lib/nugrant/vagrant/user_parameters.rb +27 -0
  16. data/lib/nugrant/version.rb +3 -0
  17. data/lib/vagrant_init.rb +7 -0
  18. data/nugrant.gemspec +31 -0
  19. data/test/lib/nugrant/test_config.rb +125 -0
  20. data/test/lib/nugrant/test_parameters.rb +205 -0
  21. data/test/lib/nugrant/test_parameters_bag.rb +164 -0
  22. data/test/resources/.vagrantuser +3 -0
  23. data/test/resources/README.md +52 -0
  24. data/test/resources/Vagrantfile +5 -0
  25. data/test/resources/json/params_combinations.json +81 -0
  26. data/test/resources/json/params_defaults_at_root.json +3 -0
  27. data/test/resources/json/params_defaults_not_at_root.json +5 -0
  28. data/test/resources/json/params_project_1.json +6 -0
  29. data/test/resources/json/params_project_2.json +29 -0
  30. data/test/resources/json/params_simple.json +3 -0
  31. data/test/resources/json/params_system_1.json +6 -0
  32. data/test/resources/json/params_system_2.json +29 -0
  33. data/test/resources/json/params_unix_eol.json +6 -0
  34. data/test/resources/json/params_user_1.json +6 -0
  35. data/test/resources/json/params_user_2.json +29 -0
  36. data/test/resources/json/params_windows_eol.json +6 -0
  37. data/test/resources/yml/params_combinations.yml +72 -0
  38. data/test/resources/yml/params_defaults_at_root.yml +1 -0
  39. data/test/resources/yml/params_defaults_not_at_root.yml +2 -0
  40. data/test/resources/yml/params_project_1.yml +4 -0
  41. data/test/resources/yml/params_project_2.yml +23 -0
  42. data/test/resources/yml/params_simple.yml +1 -0
  43. data/test/resources/yml/params_system_1.yml +4 -0
  44. data/test/resources/yml/params_system_2.yml +25 -0
  45. data/test/resources/yml/params_unix_eol.yml +3 -0
  46. data/test/resources/yml/params_user_1.yml +4 -0
  47. data/test/resources/yml/params_user_2.yml +23 -0
  48. data/test/resources/yml/params_windows_eol.yml +3 -0
  49. 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,3 @@
1
+ vm_port: 3332
2
+ repository:
3
+ personal: "/home/user/personal/git"
@@ -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,5 @@
1
+ Vagrant::Config.run do |config|
2
+ config.user.defaults = {
3
+ "test" => "value"
4
+ }
5
+ end
@@ -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,3 @@
1
+ {
2
+ "defaults": "value"
3
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "level": {
3
+ "defaults": "value"
4
+ }
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "1.1.1": "project",
3
+ "1.1.0": "project",
4
+ "1.0.1": "project",
5
+ "1.0.0": "project"
6
+ }
@@ -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,3 @@
1
+ {
2
+ "test": "value"
3
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "1.1.1": "system",
3
+ "1.0.1": "system",
4
+ "0.1.1": "system",
5
+ "0.0.1": "system"
6
+ }
@@ -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,6 @@
1
+ {
2
+ "level1": "value1",
3
+ "level2": {
4
+ "first": "value2"
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "1.1.1": "user",
3
+ "1.1.0": "user",
4
+ "0.1.1": "user",
5
+ "0.1.0": "user"
6
+ }
@@ -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
+ }