nugrant 1.4.2 → 2.0.0.dev1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +1 -2
- data/.travis.yml +0 -6
- data/CHANGELOG.md +3 -79
- data/Gemfile +8 -8
- data/README.md +10 -146
- data/lib/nugrant.rb +4 -19
- data/lib/nugrant/bag.rb +8 -12
- data/lib/nugrant/config.rb +55 -24
- data/lib/nugrant/helper/bag.rb +19 -17
- data/lib/nugrant/parameters.rb +37 -9
- data/lib/nugrant/vagrant/v1/command/parameters.rb +13 -13
- data/lib/nugrant/vagrant/v1/command/root.rb +2 -7
- data/lib/nugrant/vagrant/v1/config/user.rb +1 -10
- data/lib/nugrant/vagrant/v2/command/parameters.rb +1 -1
- data/lib/nugrant/vagrant/v2/command/root.rb +2 -7
- data/lib/nugrant/vagrant/v2/config/user.rb +1 -10
- data/lib/nugrant/version.rb +1 -1
- data/nugrant.gemspec +1 -4
- data/test/lib/nugrant/test_bag.rb +19 -33
- data/test/lib/nugrant/test_config.rb +92 -100
- data/test/lib/nugrant/test_parameters.rb +186 -203
- data/test/resources/README.md +11 -11
- data/test/resources/{vagrantfiles/v1.empty → Vagrantfile.v1.empty} +0 -0
- data/test/resources/{vagrantfiles/v1.fake → Vagrantfile.v1.fake} +0 -0
- data/test/resources/{vagrantfiles/v1.real → Vagrantfile.v1.real} +0 -0
- data/test/resources/{vagrantfiles/v2.empty → Vagrantfile.v2.empty} +0 -0
- data/test/resources/{vagrantfiles/v2.fake → Vagrantfile.v2.fake} +1 -4
- data/test/resources/{vagrantfiles/v2.real → Vagrantfile.v2.real} +0 -0
- data/test/resources/json/params_current_1.json +6 -0
- data/test/resources/json/params_current_2.json +29 -0
- data/test/resources/{yml → yaml}/params_array.yml +0 -0
- data/test/resources/{yml → yaml}/params_boolean.yml +0 -0
- data/test/resources/{yml → yaml}/params_combinations.yml +0 -0
- data/test/resources/yaml/params_current_1.yml +4 -0
- data/test/resources/yaml/params_current_2.yml +23 -0
- data/test/resources/{yml → yaml}/params_defaults_at_root.yml +0 -0
- data/test/resources/{yml → yaml}/params_defaults_not_at_root.yml +0 -0
- data/test/resources/{yml → yaml}/params_empty.yml +0 -0
- data/test/resources/{yml → yaml}/params_list.yml +0 -0
- data/test/resources/{yml → yaml}/params_simple.yml +0 -0
- data/test/resources/{yml → yaml}/params_system_1.yml +0 -0
- data/test/resources/{yml → yaml}/params_system_2.yml +0 -0
- data/test/resources/{yml → yaml}/params_unix_eol.yml +0 -0
- data/test/resources/{yml → yaml}/params_user_1.yml +0 -0
- data/test/resources/{yml → yaml}/params_user_2.yml +0 -0
- data/test/resources/{yml → yaml}/params_windows_eol.yml +0 -0
- metadata +71 -95
- data/lib/nugrant/helper/env/exporter.rb +0 -208
- data/lib/nugrant/helper/env/namer.rb +0 -47
- data/lib/nugrant/helper/stack.rb +0 -86
- data/lib/nugrant/vagrant/errors.rb +0 -27
- data/lib/nugrant/vagrant/v1/command/env.rb +0 -107
- data/lib/nugrant/vagrant/v2/command/env.rb +0 -107
- data/locales/en.yml +0 -13
- data/test/lib/nugrant/helper/env/test_exporter.rb +0 -238
- data/test/lib/nugrant/helper/test_stack.rb +0 -149
- data/test/resources/json/params_project_1.json +0 -6
- data/test/resources/json/params_project_2.json +0 -29
- data/test/resources/json/params_user_nil_values.json +0 -9
- data/test/resources/vagrantfiles/v1.defaults_mixed_string_symbols +0 -18
- data/test/resources/vagrantfiles/v1.defaults_using_string +0 -18
- data/test/resources/vagrantfiles/v1.defaults_using_symbol +0 -18
- data/test/resources/vagrantfiles/v1.missing_parameter +0 -3
- data/test/resources/vagrantfiles/v2.defaults_mixed_string_symbols +0 -20
- data/test/resources/vagrantfiles/v2.defaults_null_values_in_vagrantuser +0 -25
- data/test/resources/vagrantfiles/v2.defaults_using_string +0 -20
- data/test/resources/vagrantfiles/v2.defaults_using_symbol +0 -20
- data/test/resources/vagrantfiles/v2.missing_parameter +0 -5
- data/test/resources/yml/params_project_1.yml +0 -4
- data/test/resources/yml/params_project_2.yml +0 -23
- data/test/resources/yml/params_user_nil_values.yml +0 -5
data/test/resources/README.md
CHANGED
@@ -4,12 +4,12 @@ that test merge possibilities.
|
|
4
4
|
Naming convetions
|
5
5
|
-----------------
|
6
6
|
|
7
|
-
The filename
|
7
|
+
The filename uses a specific convention:
|
8
8
|
|
9
9
|
params_*kind*_*level*.[yml|json]
|
10
10
|
|
11
|
-
The kind is one of: [`
|
12
|
-
responsability they will hold. The order is `
|
11
|
+
The kind is one of: [`current`|`user`|`system`] and defines which
|
12
|
+
responsability they will hold. The order is `current` overrides
|
13
13
|
`user` overrides `system`.
|
14
14
|
|
15
15
|
Inside file, keys have special meaning. They define how
|
@@ -19,12 +19,12 @@ to represent each possibilities.
|
|
19
19
|
key = "1.1.1"
|
20
20
|
|
21
21
|
Each element represent a specific kind. Read from left to
|
22
|
-
right, they are assigned to `
|
22
|
+
right, they are assigned to `current`, `user` and `system`
|
23
23
|
respectively.
|
24
24
|
|
25
25
|
So,
|
26
26
|
|
27
|
-
`
|
27
|
+
`current` `user` `system`
|
28
28
|
1 . 1 . 1
|
29
29
|
|
30
30
|
A 1 signify that the file kind *column* will have a key "1.1.1" set
|
@@ -32,8 +32,8 @@ to value *kind*. A 0 means the key is not set. With this in mind,
|
|
32
32
|
it is easy to reason about the value that will need to be asserted
|
33
33
|
for key "1.1.1" on level file *level*.
|
34
34
|
|
35
|
-
#
|
36
|
-
"1.1.1": "
|
35
|
+
# params_current_1.yml file
|
36
|
+
"1.1.1": "current"
|
37
37
|
|
38
38
|
# params_user_1.yml file
|
39
39
|
"1.1.1": "user"
|
@@ -42,11 +42,11 @@ for key "1.1.1" on level file *level*.
|
|
42
42
|
"1.1.1": "system"
|
43
43
|
|
44
44
|
# Value to assert
|
45
|
-
assert("
|
45
|
+
assert("current", parameters.get("1.1.1"))
|
46
46
|
|
47
47
|
With the help of params_combinations, it is easy to create test file
|
48
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 `
|
50
|
-
column `
|
51
|
-
kind (here `
|
49
|
+
"0.0.0" to the file. Say the file is of kind `current`, then for
|
50
|
+
column `current`, each time a one is there, replace `base` by the
|
51
|
+
kind (here `current`). The line that still have value base as the
|
52
52
|
value must be deleted.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,11 +7,8 @@ Vagrant.configure("2") do |config|
|
|
7
7
|
'second' => "value2"
|
8
8
|
}
|
9
9
|
}
|
10
|
-
|
10
|
+
|
11
11
|
config.user.local.each do |name, value|
|
12
12
|
puts "Parameters #{name}: #{value}"
|
13
13
|
end
|
14
|
-
|
15
|
-
puts "User has local (symbol)" if config.user.has?(:local)
|
16
|
-
puts "User has local (string)" if config.user.has?("local")
|
17
14
|
end
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"1.1.1": {
|
3
|
+
"1.1.1": "current",
|
4
|
+
"1.1.0": "current",
|
5
|
+
"1.0.1": "current",
|
6
|
+
"1.0.0": "current"
|
7
|
+
},
|
8
|
+
|
9
|
+
"1.1.0": {
|
10
|
+
"1.1.1": "current",
|
11
|
+
"1.1.0": "current",
|
12
|
+
"1.0.1": "current",
|
13
|
+
"1.0.0": "current"
|
14
|
+
},
|
15
|
+
|
16
|
+
"1.0.1": {
|
17
|
+
"1.1.1": "current",
|
18
|
+
"1.1.0": "current",
|
19
|
+
"1.0.1": "current",
|
20
|
+
"1.0.0": "current"
|
21
|
+
},
|
22
|
+
|
23
|
+
"1.0.0": {
|
24
|
+
"1.1.1": "current",
|
25
|
+
"1.1.0": "current",
|
26
|
+
"1.0.1": "current",
|
27
|
+
"1.0.0": "current"
|
28
|
+
}
|
29
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"1.1.1":
|
2
|
+
"1.1.1": "current"
|
3
|
+
"1.1.0": "current"
|
4
|
+
"1.0.1": "current"
|
5
|
+
"1.0.0": "current"
|
6
|
+
|
7
|
+
"1.1.0":
|
8
|
+
"1.1.1": "current"
|
9
|
+
"1.1.0": "current"
|
10
|
+
"1.0.1": "current"
|
11
|
+
"1.0.0": "current"
|
12
|
+
|
13
|
+
"1.0.1":
|
14
|
+
"1.1.1": "current"
|
15
|
+
"1.1.0": "current"
|
16
|
+
"1.0.1": "current"
|
17
|
+
"1.0.0": "current"
|
18
|
+
|
19
|
+
"1.0.0":
|
20
|
+
"1.1.1": "current"
|
21
|
+
"1.1.0": "current"
|
22
|
+
"1.0.1": "current"
|
23
|
+
"1.0.0": "current"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,36 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nugrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0.dev1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matthieu Vachon
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-07-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: multi_json
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '1.8'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.8'
|
30
13
|
- !ruby/object:Gem::Dependency
|
31
14
|
name: rake
|
32
15
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
16
|
requirements:
|
35
17
|
- - ! '>='
|
36
18
|
- !ruby/object:Gem::Version
|
@@ -38,27 +20,10 @@ dependencies:
|
|
38
20
|
type: :development
|
39
21
|
prerelease: false
|
40
22
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
23
|
requirements:
|
43
24
|
- - ! '>='
|
44
25
|
- !ruby/object:Gem::Version
|
45
26
|
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: minitest
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 5.0.8
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 5.0.8
|
62
27
|
description: ! " Nugrant is a library to easily handle parameters that need to
|
63
28
|
be\n injected into an application via different sources (system, user,\n project,
|
64
29
|
defaults).\n\n Nugrant can also be directly used as a Vagrant plugin. By activating\n
|
@@ -87,115 +52,126 @@ files:
|
|
87
52
|
- lib/nugrant/bag.rb
|
88
53
|
- lib/nugrant/config.rb
|
89
54
|
- lib/nugrant/helper/bag.rb
|
90
|
-
- lib/nugrant/helper/env/exporter.rb
|
91
|
-
- lib/nugrant/helper/env/namer.rb
|
92
|
-
- lib/nugrant/helper/stack.rb
|
93
55
|
- lib/nugrant/helper/yaml.rb
|
94
56
|
- lib/nugrant/parameters.rb
|
95
|
-
- lib/nugrant/vagrant/errors.rb
|
96
|
-
- lib/nugrant/vagrant/v1/command/env.rb
|
97
57
|
- lib/nugrant/vagrant/v1/command/parameters.rb
|
98
58
|
- lib/nugrant/vagrant/v1/command/root.rb
|
99
59
|
- lib/nugrant/vagrant/v1/config/user.rb
|
100
60
|
- lib/nugrant/vagrant/v1/plugin.rb
|
101
|
-
- lib/nugrant/vagrant/v2/command/env.rb
|
102
61
|
- lib/nugrant/vagrant/v2/command/parameters.rb
|
103
62
|
- lib/nugrant/vagrant/v2/command/root.rb
|
104
63
|
- lib/nugrant/vagrant/v2/config/user.rb
|
105
64
|
- lib/nugrant/vagrant/v2/plugin.rb
|
106
65
|
- lib/nugrant/version.rb
|
107
66
|
- lib/vagrant_init.rb
|
108
|
-
- locales/en.yml
|
109
67
|
- nugrant.gemspec
|
110
|
-
- test/lib/nugrant/helper/env/test_exporter.rb
|
111
|
-
- test/lib/nugrant/helper/test_stack.rb
|
112
68
|
- test/lib/nugrant/test_bag.rb
|
113
69
|
- test/lib/nugrant/test_config.rb
|
114
70
|
- test/lib/nugrant/test_parameters.rb
|
115
71
|
- test/resources/.vagrantuser
|
116
72
|
- test/resources/README.md
|
73
|
+
- test/resources/Vagrantfile.v1.empty
|
74
|
+
- test/resources/Vagrantfile.v1.fake
|
75
|
+
- test/resources/Vagrantfile.v1.real
|
76
|
+
- test/resources/Vagrantfile.v2.empty
|
77
|
+
- test/resources/Vagrantfile.v2.fake
|
78
|
+
- test/resources/Vagrantfile.v2.real
|
117
79
|
- test/resources/json/params_array.json
|
118
80
|
- test/resources/json/params_boolean.json
|
119
81
|
- test/resources/json/params_combinations.json
|
82
|
+
- test/resources/json/params_current_1.json
|
83
|
+
- test/resources/json/params_current_2.json
|
120
84
|
- test/resources/json/params_defaults_at_root.json
|
121
85
|
- test/resources/json/params_defaults_not_at_root.json
|
122
86
|
- test/resources/json/params_empty.json
|
123
87
|
- test/resources/json/params_list.json
|
124
|
-
- test/resources/json/params_project_1.json
|
125
|
-
- test/resources/json/params_project_2.json
|
126
88
|
- test/resources/json/params_simple.json
|
127
89
|
- test/resources/json/params_system_1.json
|
128
90
|
- test/resources/json/params_system_2.json
|
129
91
|
- test/resources/json/params_unix_eol.json
|
130
92
|
- test/resources/json/params_user_1.json
|
131
93
|
- test/resources/json/params_user_2.json
|
132
|
-
- test/resources/json/params_user_nil_values.json
|
133
94
|
- test/resources/json/params_windows_eol.json
|
134
|
-
- test/resources/
|
135
|
-
- test/resources/
|
136
|
-
- test/resources/
|
137
|
-
- test/resources/
|
138
|
-
- test/resources/
|
139
|
-
- test/resources/
|
140
|
-
- test/resources/
|
141
|
-
- test/resources/
|
142
|
-
- test/resources/
|
143
|
-
- test/resources/
|
144
|
-
- test/resources/
|
145
|
-
- test/resources/
|
146
|
-
- test/resources/
|
147
|
-
- test/resources/
|
148
|
-
- test/resources/
|
149
|
-
- test/resources/
|
150
|
-
- test/resources/yml/params_boolean.yml
|
151
|
-
- test/resources/yml/params_combinations.yml
|
152
|
-
- test/resources/yml/params_defaults_at_root.yml
|
153
|
-
- test/resources/yml/params_defaults_not_at_root.yml
|
154
|
-
- test/resources/yml/params_empty.yml
|
155
|
-
- test/resources/yml/params_list.yml
|
156
|
-
- test/resources/yml/params_project_1.yml
|
157
|
-
- test/resources/yml/params_project_2.yml
|
158
|
-
- test/resources/yml/params_simple.yml
|
159
|
-
- test/resources/yml/params_system_1.yml
|
160
|
-
- test/resources/yml/params_system_2.yml
|
161
|
-
- test/resources/yml/params_unix_eol.yml
|
162
|
-
- test/resources/yml/params_user_1.yml
|
163
|
-
- test/resources/yml/params_user_2.yml
|
164
|
-
- test/resources/yml/params_user_nil_values.yml
|
165
|
-
- test/resources/yml/params_windows_eol.yml
|
95
|
+
- test/resources/yaml/params_array.yml
|
96
|
+
- test/resources/yaml/params_boolean.yml
|
97
|
+
- test/resources/yaml/params_combinations.yml
|
98
|
+
- test/resources/yaml/params_current_1.yml
|
99
|
+
- test/resources/yaml/params_current_2.yml
|
100
|
+
- test/resources/yaml/params_defaults_at_root.yml
|
101
|
+
- test/resources/yaml/params_defaults_not_at_root.yml
|
102
|
+
- test/resources/yaml/params_empty.yml
|
103
|
+
- test/resources/yaml/params_list.yml
|
104
|
+
- test/resources/yaml/params_simple.yml
|
105
|
+
- test/resources/yaml/params_system_1.yml
|
106
|
+
- test/resources/yaml/params_system_2.yml
|
107
|
+
- test/resources/yaml/params_unix_eol.yml
|
108
|
+
- test/resources/yaml/params_user_1.yml
|
109
|
+
- test/resources/yaml/params_user_2.yml
|
110
|
+
- test/resources/yaml/params_windows_eol.yml
|
166
111
|
homepage: https://github.com/maoueh/nugrant
|
167
112
|
licenses: []
|
113
|
+
metadata: {}
|
168
114
|
post_install_message:
|
169
115
|
rdoc_options: []
|
170
116
|
require_paths:
|
171
117
|
- lib
|
172
118
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
119
|
requirements:
|
175
120
|
- - ! '>='
|
176
121
|
- !ruby/object:Gem::Version
|
177
122
|
version: '0'
|
178
|
-
segments:
|
179
|
-
- 0
|
180
|
-
hash: -348904095
|
181
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
|
-
none: false
|
183
124
|
requirements:
|
184
|
-
- - ! '
|
125
|
+
- - ! '>'
|
185
126
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
187
|
-
segments:
|
188
|
-
- 0
|
189
|
-
hash: -348904095
|
127
|
+
version: 1.3.1
|
190
128
|
requirements: []
|
191
129
|
rubyforge_project:
|
192
|
-
rubygems_version:
|
130
|
+
rubygems_version: 2.0.3
|
193
131
|
signing_key:
|
194
|
-
specification_version:
|
132
|
+
specification_version: 4
|
195
133
|
summary: Library to handle user specific parameters from various location.
|
196
134
|
test_files:
|
197
|
-
- test/lib/nugrant/helper/env/test_exporter.rb
|
198
|
-
- test/lib/nugrant/helper/test_stack.rb
|
199
135
|
- test/lib/nugrant/test_bag.rb
|
200
136
|
- test/lib/nugrant/test_config.rb
|
201
137
|
- test/lib/nugrant/test_parameters.rb
|
138
|
+
- test/resources/.vagrantuser
|
139
|
+
- test/resources/README.md
|
140
|
+
- test/resources/Vagrantfile.v1.empty
|
141
|
+
- test/resources/Vagrantfile.v1.fake
|
142
|
+
- test/resources/Vagrantfile.v1.real
|
143
|
+
- test/resources/Vagrantfile.v2.empty
|
144
|
+
- test/resources/Vagrantfile.v2.fake
|
145
|
+
- test/resources/Vagrantfile.v2.real
|
146
|
+
- test/resources/json/params_array.json
|
147
|
+
- test/resources/json/params_boolean.json
|
148
|
+
- test/resources/json/params_combinations.json
|
149
|
+
- test/resources/json/params_current_1.json
|
150
|
+
- test/resources/json/params_current_2.json
|
151
|
+
- test/resources/json/params_defaults_at_root.json
|
152
|
+
- test/resources/json/params_defaults_not_at_root.json
|
153
|
+
- test/resources/json/params_empty.json
|
154
|
+
- test/resources/json/params_list.json
|
155
|
+
- test/resources/json/params_simple.json
|
156
|
+
- test/resources/json/params_system_1.json
|
157
|
+
- test/resources/json/params_system_2.json
|
158
|
+
- test/resources/json/params_unix_eol.json
|
159
|
+
- test/resources/json/params_user_1.json
|
160
|
+
- test/resources/json/params_user_2.json
|
161
|
+
- test/resources/json/params_windows_eol.json
|
162
|
+
- test/resources/yaml/params_array.yml
|
163
|
+
- test/resources/yaml/params_boolean.yml
|
164
|
+
- test/resources/yaml/params_combinations.yml
|
165
|
+
- test/resources/yaml/params_current_1.yml
|
166
|
+
- test/resources/yaml/params_current_2.yml
|
167
|
+
- test/resources/yaml/params_defaults_at_root.yml
|
168
|
+
- test/resources/yaml/params_defaults_not_at_root.yml
|
169
|
+
- test/resources/yaml/params_empty.yml
|
170
|
+
- test/resources/yaml/params_list.yml
|
171
|
+
- test/resources/yaml/params_simple.yml
|
172
|
+
- test/resources/yaml/params_system_1.yml
|
173
|
+
- test/resources/yaml/params_system_2.yml
|
174
|
+
- test/resources/yaml/params_unix_eol.yml
|
175
|
+
- test/resources/yaml/params_user_1.yml
|
176
|
+
- test/resources/yaml/params_user_2.yml
|
177
|
+
- test/resources/yaml/params_windows_eol.yml
|
@@ -1,208 +0,0 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
|
3
|
-
require 'nugrant/bag'
|
4
|
-
require 'nugrant/helper/env/namer'
|
5
|
-
|
6
|
-
module Nugrant
|
7
|
-
module Helper
|
8
|
-
module Env
|
9
|
-
module Exporter
|
10
|
-
@@DEFAULT_AUTOENV_PATH = "./.env"
|
11
|
-
@@DEFAULT_SCRIPT_PATH = "./nugrant2env.sh"
|
12
|
-
|
13
|
-
@@VALID_EXPORTERS = [:autoenv, :script, :terminal]
|
14
|
-
|
15
|
-
##
|
16
|
-
# Returns true if the exporter name received is a valid
|
17
|
-
# valid export, false otherwise.
|
18
|
-
#
|
19
|
-
# @param exporter The exporter name to check validity
|
20
|
-
#
|
21
|
-
# @return true if exporter is valid, false otherwise.
|
22
|
-
def self.valid?(exporter)
|
23
|
-
@@VALID_EXPORTERS.include?(exporter)
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# Creates an autoenv script containing the commands that are required
|
28
|
-
# to export or unset a bunch of environment variables taken from the
|
29
|
-
# bag.
|
30
|
-
#
|
31
|
-
# @param bag The bag to create the script for.
|
32
|
-
#
|
33
|
-
# @return (side-effect) Creates a script file containing commands
|
34
|
-
# to export or unset environment variables for
|
35
|
-
# bag.
|
36
|
-
#
|
37
|
-
# Options:
|
38
|
-
# * :autoenv_path => The path where to write the script, defaults to `./.env`.
|
39
|
-
# * :escape_value => If true, escape the value to export (or unset), default to true.
|
40
|
-
# * :io => The io where the command should be written, default to nil which create the autoenv on disk.
|
41
|
-
# * :namer => The namer used to transform bag segments into variable name, default to Namer::default().
|
42
|
-
# * :override => If true, variable a exported even when the override an existing env key, default to true.
|
43
|
-
# * :type => The type of command, default to :export.
|
44
|
-
#
|
45
|
-
def self.autoenv_exporter(bag, options = {})
|
46
|
-
io = options[:io] || (File.open(File.expand_path(options[:autoenv_path] || @@DEFAULT_AUTOENV_PATH), "w"))
|
47
|
-
|
48
|
-
terminal_exporter(bag, options.merge({:io => io}))
|
49
|
-
ensure
|
50
|
-
io.close() if io
|
51
|
-
end
|
52
|
-
|
53
|
-
##
|
54
|
-
# Creates a bash script containing the commands that are required
|
55
|
-
# to export or unset a bunch of environment variables taken from the
|
56
|
-
# bag.
|
57
|
-
#
|
58
|
-
# @param bag The bag to create the script for.
|
59
|
-
#
|
60
|
-
# @return (side-effect) Creates a script file containing commands
|
61
|
-
# to export or unset environment variables for
|
62
|
-
# bag.
|
63
|
-
#
|
64
|
-
# Options:
|
65
|
-
# * :escape_value => If true, escape the value to export (or unset), default to true.
|
66
|
-
# * :io => The io where the command should be written, default to nil which create the script on disk.
|
67
|
-
# * :namer => The namer used to transform bag segments into variable name, default to Namer::default().
|
68
|
-
# * :override => If true, variable a exported even when the override an existing env key, default to true.
|
69
|
-
# * :script_path => The path where to write the script, defaults to `./nugrant2env.sh`.
|
70
|
-
# * :type => The type of command, default to :export.
|
71
|
-
#
|
72
|
-
def self.script_exporter(bag, options = {})
|
73
|
-
io = options[:io] || (File.open(File.expand_path(options[:script_path] || @@DEFAULT_SCRIPT_PATH), "w"))
|
74
|
-
|
75
|
-
io.puts("#!/bin/env sh")
|
76
|
-
io.puts()
|
77
|
-
|
78
|
-
terminal_exporter(bag, options.merge({:io => io}))
|
79
|
-
ensure
|
80
|
-
io.close() if io
|
81
|
-
end
|
82
|
-
|
83
|
-
##
|
84
|
-
# Export to terminal the commands that are required
|
85
|
-
# to export or unset a bunch of environment variables taken from the
|
86
|
-
# bag.
|
87
|
-
#
|
88
|
-
# @param bag The bag to create the script for.
|
89
|
-
#
|
90
|
-
# @return (side-effect) Outputs to io the commands generated.
|
91
|
-
#
|
92
|
-
# Options:
|
93
|
-
# * :escape_value => If true, escape the value to export (or unset), default to true.
|
94
|
-
# * :io => The io where the command should be displayed, default to $stdout.
|
95
|
-
# * :namer => The namer used to transform bag segments into variable name, default to Namer::default().
|
96
|
-
# * :override => If true, variable a exported even when the override an existing env key, default to true.
|
97
|
-
# * :type => The type of command, default to :export.
|
98
|
-
#
|
99
|
-
def self.terminal_exporter(bag, options = {})
|
100
|
-
io = options[:io] || $stdout
|
101
|
-
type = options[:type] || :export
|
102
|
-
|
103
|
-
export(bag, options) do |key, value|
|
104
|
-
io.puts(command(type, key, value, options))
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
##
|
109
|
-
# Generic function to export a bag. This walk the bag,
|
110
|
-
# for each element, it creates the key using the namer
|
111
|
-
# and then forward the key and value to the block if
|
112
|
-
# the variable does not override an existing environment
|
113
|
-
# variable or if options :override is set to true.
|
114
|
-
#
|
115
|
-
# @param bag The bag to export.
|
116
|
-
#
|
117
|
-
# @return (side-effect) Yields each key and value to a block
|
118
|
-
#
|
119
|
-
# Options:
|
120
|
-
# * :namer => The namer used to transform bag segments into variable name, default to Namer::default().
|
121
|
-
# * :override => If true, variable a exported even when the override an existing env key, default to true.
|
122
|
-
#
|
123
|
-
def self.export(bag, options = {})
|
124
|
-
namer = options[:namer] || Env::Namer.default()
|
125
|
-
override = options.fetch(:override, true)
|
126
|
-
|
127
|
-
variables = {}
|
128
|
-
walk_bag(bag) do |segments, key, value|
|
129
|
-
key = namer.call(segments)
|
130
|
-
|
131
|
-
variables[key] = value if override or not ENV[key]
|
132
|
-
end
|
133
|
-
|
134
|
-
variables.sort().each do |key, value|
|
135
|
-
yield key, value
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
##
|
140
|
-
# Given a key and a value, return a string representation
|
141
|
-
# of the command type requested. Available types:
|
142
|
-
#
|
143
|
-
# * :export => A bash compatible export command
|
144
|
-
# * :unset => A bash compatible export command
|
145
|
-
#
|
146
|
-
def self.command(type, key, value, options = {})
|
147
|
-
# TODO: Replace by a map type => function name
|
148
|
-
case
|
149
|
-
when type == :export
|
150
|
-
export_command(key, value, options)
|
151
|
-
when type == :unset
|
152
|
-
unset_command(key, value, options)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
##
|
157
|
-
# Returns a string representation of the command
|
158
|
-
# that needs to be used on the current platform
|
159
|
-
# to export an environment variable.
|
160
|
-
#
|
161
|
-
# @param key The key of the environment variable to export.
|
162
|
-
# It cannot be nil.
|
163
|
-
# @param value The value of the environment variable to export
|
164
|
-
#
|
165
|
-
# @return The export command, as a string
|
166
|
-
#
|
167
|
-
# Options:
|
168
|
-
# * :escape_value (true) => If true, escape the value to export.
|
169
|
-
#
|
170
|
-
def self.export_command(key, value, options = {})
|
171
|
-
value = value.to_s()
|
172
|
-
value = Shellwords.escape(value) if options[:escape_value] == nil || options[:escape_value]
|
173
|
-
|
174
|
-
# TODO: Handle platform differently
|
175
|
-
"export #{key}=#{value}"
|
176
|
-
end
|
177
|
-
|
178
|
-
##
|
179
|
-
# Returns a string representation of the command
|
180
|
-
# that needs to be used on the current platform
|
181
|
-
# to unset an environment variable.
|
182
|
-
#
|
183
|
-
# @param key The key of the environment variable to export.
|
184
|
-
# It cannot be nil.
|
185
|
-
#
|
186
|
-
# @return The unset command, as a string
|
187
|
-
#
|
188
|
-
def self.unset_command(key, value, options = {})
|
189
|
-
# TODO: Handle platform differently
|
190
|
-
"unset #{key}"
|
191
|
-
end
|
192
|
-
|
193
|
-
# FIXME: Move this directly into bag class
|
194
|
-
def self.walk_bag(bag, parents = [], &block)
|
195
|
-
commands = []
|
196
|
-
|
197
|
-
bag.each do |key, value|
|
198
|
-
segments = parents + [key]
|
199
|
-
nested_bag = value.kind_of?(Nugrant::Bag)
|
200
|
-
|
201
|
-
walk_bag(value, segments, &block) if nested_bag
|
202
|
-
yield segments, key, value if not nested_bag
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|