nugrant 1.4.2 → 2.0.0.dev1
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.
- 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
@@ -1,47 +0,0 @@
|
|
1
|
-
module Nugrant
|
2
|
-
module Helper
|
3
|
-
module Env
|
4
|
-
##
|
5
|
-
# A namer is a lambda taking as argument an array of segments
|
6
|
-
# that should return a string representation of those segments.
|
7
|
-
# How the segments are transformed to a string is up to the
|
8
|
-
# namer. By using various namer, we can change how a bag key
|
9
|
-
# is transformed into and environment variable name. This is
|
10
|
-
# like the strategy pattern.
|
11
|
-
#
|
12
|
-
module Namer
|
13
|
-
|
14
|
-
##
|
15
|
-
# Returns the default namer, which join segments together
|
16
|
-
# using a character and upcase the result.
|
17
|
-
#
|
18
|
-
# @param `char` The character used to join segments together, default to `"_"`.
|
19
|
-
#
|
20
|
-
# @return A lambda that will simply joins segment using the `char` argument
|
21
|
-
# and upcase the result.
|
22
|
-
#
|
23
|
-
def self.default(char = "_")
|
24
|
-
lambda do |segments|
|
25
|
-
segments.join(char).upcase()
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
##
|
30
|
-
# Returns the prefix namer, which add a prefix to segments
|
31
|
-
# and delegate its work to another namer.
|
32
|
-
#
|
33
|
-
# @param prefix The prefix to add to segments.
|
34
|
-
# @param delegate_namer A namer that will be used to transform the prefixed segments.
|
35
|
-
#
|
36
|
-
# @return A lambda that will simply add prefix to segments and will call
|
37
|
-
# the delegate_namer with those new segments.
|
38
|
-
#
|
39
|
-
def self.prefix(prefix, delegate_namer)
|
40
|
-
lambda do |segments|
|
41
|
-
delegate_namer.call([prefix] + segments)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/lib/nugrant/helper/stack.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
module Nugrant
|
2
|
-
module Helper
|
3
|
-
class Stack
|
4
|
-
@@DEFAULT_MATCHER = /^(.+):([0-9]+)/
|
5
|
-
|
6
|
-
def self.fetch_error_region(stack, options = {})
|
7
|
-
entry = find_entry(stack, options)
|
8
|
-
location = extract_error_location(entry, options)
|
9
|
-
|
10
|
-
return (options[:unknown] || "Unknown") if not location[:file] and not location[:line]
|
11
|
-
return location[:file] if not location[:line]
|
12
|
-
|
13
|
-
fetch_error_region_from_location(location, options)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.fetch_error_region_from_location(location, options = {})
|
17
|
-
prefix = options[:prefix] || " "
|
18
|
-
width = options[:width] || 4
|
19
|
-
file = File.new(location[:file], "r")
|
20
|
-
line = location[:line]
|
21
|
-
|
22
|
-
index = 0
|
23
|
-
|
24
|
-
lines = []
|
25
|
-
while (line_string = file.gets())
|
26
|
-
index += 1
|
27
|
-
next if (line - index).abs > width
|
28
|
-
|
29
|
-
line_prefix = "#{prefix}#{index}:"
|
30
|
-
line_prefix += (line == index ? ">> " : " ")
|
31
|
-
|
32
|
-
lines << "#{line_prefix}#{line_string}"
|
33
|
-
end
|
34
|
-
|
35
|
-
lines.join().chomp()
|
36
|
-
rescue
|
37
|
-
return (options[:unknown] || "Unknown") if not location[:file] and not location[:line]
|
38
|
-
return location[:file] if not location[:line]
|
39
|
-
|
40
|
-
"#{location[:file]}:#{location[:line]}"
|
41
|
-
ensure
|
42
|
-
file.close() if file
|
43
|
-
end
|
44
|
-
|
45
|
-
##
|
46
|
-
# Search a stack list (as simple string array) for the first
|
47
|
-
# entry that match the +:matcher+.
|
48
|
-
#
|
49
|
-
def self.find_entry(stack, options = {})
|
50
|
-
matcher = options[:matcher] || @@DEFAULT_MATCHER
|
51
|
-
|
52
|
-
stack.find do |entry|
|
53
|
-
entry =~ matcher
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
##
|
58
|
-
# Extract error location information from a stack entry using the
|
59
|
-
# matcher received in arguments.
|
60
|
-
#
|
61
|
-
# The usual stack entry format is:
|
62
|
-
# > /home/users/joe/work/lib/ruby.rb:4:Error message
|
63
|
-
#
|
64
|
-
# This function will extract the file and line information from
|
65
|
-
# the stack entry using the matcher. The matcher is expected to
|
66
|
-
# have two groups, the first for the file and the second for
|
67
|
-
# line.
|
68
|
-
#
|
69
|
-
# The results is returned in form of a hash with two keys, +:file+
|
70
|
-
# for the file information and +:line+ for the line information.
|
71
|
-
#
|
72
|
-
# If the matcher matched zero group, return +{:file => nil, :line => nil}+.
|
73
|
-
# If the matcher matched one group, return +{:file => file, :line => nil}+.
|
74
|
-
# If the matcher matched two groups, return +{:file => file, :line => line}+.
|
75
|
-
#
|
76
|
-
def self.extract_error_location(entry, options = {})
|
77
|
-
matcher = options[:matcher] || @@DEFAULT_MATCHER
|
78
|
-
|
79
|
-
result = matcher.match(entry)
|
80
|
-
captures = result ? result.captures : []
|
81
|
-
|
82
|
-
{:file => captures[0], :line => captures[1] ? captures[1].to_i() : nil}
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'vagrant/errors'
|
2
|
-
|
3
|
-
require 'nugrant/helper/stack'
|
4
|
-
|
5
|
-
module Nugrant
|
6
|
-
module Vagrant
|
7
|
-
module Errors
|
8
|
-
class NugrantVagrantError < ::Vagrant::Errors::VagrantError
|
9
|
-
error_namespace("nugrant.vagrant.errors")
|
10
|
-
end
|
11
|
-
|
12
|
-
class ParameterNotFoundError < NugrantVagrantError
|
13
|
-
error_key(:parameter_not_found)
|
14
|
-
|
15
|
-
def initialize(options = nil, *args)
|
16
|
-
super({:context => compute_context()}.merge(options || {}), *args)
|
17
|
-
end
|
18
|
-
|
19
|
-
def compute_context()
|
20
|
-
Helper::Stack.fetch_error_region(caller(), {
|
21
|
-
:matcher => /(.+Vagrantfile):([0-9]+)/
|
22
|
-
})
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'nugrant'
|
2
|
-
require 'nugrant/helper/env/exporter'
|
3
|
-
require 'nugrant/parameters'
|
4
|
-
|
5
|
-
module Nugrant
|
6
|
-
module Vagrant
|
7
|
-
module V1
|
8
|
-
module Command
|
9
|
-
class Env < ::Vagrant::Command::Base
|
10
|
-
def initialize(arguments, environment)
|
11
|
-
super(arguments, environment)
|
12
|
-
|
13
|
-
@unset = false
|
14
|
-
@script = false
|
15
|
-
@format = :terminal
|
16
|
-
@show_help = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_parser()
|
20
|
-
return OptionParser.new do |parser|
|
21
|
-
parser.banner = "Usage: vagrant user env [<options>]"
|
22
|
-
parser.separator ""
|
23
|
-
|
24
|
-
parser.separator "Outputs the commands that should be executed to export\n" +
|
25
|
-
"the various parameter as environment variables. By default,\n" +
|
26
|
-
"existing ones are overridden. The --format argument can be used\n" +
|
27
|
-
"to choose in which format the variables should be displayed.\n" +
|
28
|
-
"Changing the format will also change where they are displayed.\n"
|
29
|
-
parser.separator ""
|
30
|
-
parser.separator "The `-s, --script` option is deprecated and will be removed in\n" +
|
31
|
-
"version 2.0. Use `--format script` instead."
|
32
|
-
parser.separator ""
|
33
|
-
|
34
|
-
parser.separator "Available formats:"
|
35
|
-
parser.separator " autoenv => Write commands to a file named `.env` in the current directory.\n" +
|
36
|
-
" See https://github.com/kennethreitz/autoenv for more info."
|
37
|
-
parser.separator " terminal => Display commands to terminal so they can be sourced."
|
38
|
-
parser.separator " script => Write commands to a bash script named `nugrant2env.sh` so it can be sourced."
|
39
|
-
parser.separator ""
|
40
|
-
|
41
|
-
parser.separator "Available options:"
|
42
|
-
parser.separator ""
|
43
|
-
|
44
|
-
parser.on("-u", "--[no-]unset", "Generates commands needed to unset environment variables, default false") do |unset|
|
45
|
-
@unset = unset
|
46
|
-
end
|
47
|
-
|
48
|
-
parser.on("-s", "--[no-]script", "Generates a bash script instead of simply showing command, default false") do |script|
|
49
|
-
@script = script
|
50
|
-
end
|
51
|
-
|
52
|
-
parser.on("-f", "--format FORMAT", "Determines in what format variables are outputted, default to terminal") do |format|
|
53
|
-
@format = format.to_sym()
|
54
|
-
end
|
55
|
-
|
56
|
-
parser.on("-h", "--help", "Print this help") do
|
57
|
-
@show_help = true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def error(message, parser)
|
63
|
-
@env.ui.info("ERROR: #{message}", :prefix => false)
|
64
|
-
@env.ui.info("", :prefix => false)
|
65
|
-
|
66
|
-
help(parser)
|
67
|
-
|
68
|
-
return 1
|
69
|
-
end
|
70
|
-
|
71
|
-
def help(parser)
|
72
|
-
@env.ui.info(parser.help, :prefix => false)
|
73
|
-
end
|
74
|
-
|
75
|
-
def execute
|
76
|
-
parser = create_parser()
|
77
|
-
arguments = parse_options(parser)
|
78
|
-
|
79
|
-
return error("Invalid format value '#{@format}'", parser) if not Helper::Env::Exporter.valid?(@format)
|
80
|
-
return help(parser) if @show_help
|
81
|
-
|
82
|
-
@logger.debug("Nugrant 'Env'")
|
83
|
-
with_target_vms(arguments) do |vm|
|
84
|
-
config = vm.config.user
|
85
|
-
parameters = config ? config.parameters : Nugrant::Parameters.new()
|
86
|
-
bag = parameters.__all
|
87
|
-
|
88
|
-
options = {:type => @unset ? :unset : :export}
|
89
|
-
|
90
|
-
case
|
91
|
-
when @script || @format == :script
|
92
|
-
Helper::Env::Exporter.script_exporter(bag, options)
|
93
|
-
when @format == :autoenv
|
94
|
-
Helper::Env::Exporter.autoenv_exporter(bag, options)
|
95
|
-
else
|
96
|
-
Helper::Env::Exporter.terminal_exporter(bag, options)
|
97
|
-
end
|
98
|
-
|
99
|
-
# No need to execute for the other VMs
|
100
|
-
return 0
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'nugrant'
|
2
|
-
require 'nugrant/helper/env/exporter'
|
3
|
-
require 'nugrant/parameters'
|
4
|
-
|
5
|
-
module Nugrant
|
6
|
-
module Vagrant
|
7
|
-
module V2
|
8
|
-
module Command
|
9
|
-
class Env < ::Vagrant.plugin("2", :command)
|
10
|
-
def initialize(arguments, environment)
|
11
|
-
super(arguments, environment)
|
12
|
-
|
13
|
-
@unset = false
|
14
|
-
@script = false
|
15
|
-
@format = :terminal
|
16
|
-
@show_help = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_parser()
|
20
|
-
return OptionParser.new do |parser|
|
21
|
-
parser.banner = "Usage: vagrant user env [<options>]"
|
22
|
-
parser.separator ""
|
23
|
-
|
24
|
-
parser.separator "Outputs the commands that should be executed to export\n" +
|
25
|
-
"the various parameter as environment variables. By default,\n" +
|
26
|
-
"existing ones are overridden. The --format argument can be used\n" +
|
27
|
-
"to choose in which format the variables should be displayed.\n" +
|
28
|
-
"Changing the format will also change where they are displayed.\n"
|
29
|
-
parser.separator ""
|
30
|
-
parser.separator "The `-s, --script` option is deprecated and will be removed in\n" +
|
31
|
-
"version 2.0. Use `--format script` instead."
|
32
|
-
parser.separator ""
|
33
|
-
|
34
|
-
parser.separator "Available formats:"
|
35
|
-
parser.separator " autoenv => Write commands to a file named `.env` in the current directory.\n" +
|
36
|
-
" See https://github.com/kennethreitz/autoenv for more info."
|
37
|
-
parser.separator " terminal => Display commands to terminal so they can be sourced."
|
38
|
-
parser.separator " script => Write commands to a bash script named `nugrant2env.sh` so it can be sourced."
|
39
|
-
parser.separator ""
|
40
|
-
|
41
|
-
parser.separator "Available options:"
|
42
|
-
parser.separator ""
|
43
|
-
|
44
|
-
parser.on("-u", "--[no-]unset", "Generates commands needed to unset environment variables, default false") do |unset|
|
45
|
-
@unset = unset
|
46
|
-
end
|
47
|
-
|
48
|
-
parser.on("-s", "--[no-]script", "Generates a bash script instead of simply showing command, default false") do |script|
|
49
|
-
@script = script
|
50
|
-
end
|
51
|
-
|
52
|
-
parser.on("-f", "--format FORMAT", "Determines in what format variables are outputted, default to terminal") do |format|
|
53
|
-
@format = format.to_sym()
|
54
|
-
end
|
55
|
-
|
56
|
-
parser.on("-h", "--help", "Print this help") do
|
57
|
-
@show_help = true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def error(message, parser)
|
63
|
-
@env.ui.info("ERROR: #{message}", :prefix => false)
|
64
|
-
@env.ui.info("", :prefix => false)
|
65
|
-
|
66
|
-
help(parser)
|
67
|
-
|
68
|
-
return 1
|
69
|
-
end
|
70
|
-
|
71
|
-
def help(parser)
|
72
|
-
@env.ui.info(parser.help, :prefix => false)
|
73
|
-
end
|
74
|
-
|
75
|
-
def execute
|
76
|
-
parser = create_parser()
|
77
|
-
arguments = parse_options(parser)
|
78
|
-
|
79
|
-
return error("Invalid format value '#{@format}'", parser) if not Helper::Env::Exporter.valid?(@format)
|
80
|
-
return help(parser) if @show_help
|
81
|
-
|
82
|
-
@logger.debug("Nugrant 'Env'")
|
83
|
-
with_target_vms(arguments) do |vm|
|
84
|
-
config = vm.config.user
|
85
|
-
parameters = config ? config.parameters : Nugrant::Parameters.new()
|
86
|
-
bag = parameters.__all
|
87
|
-
|
88
|
-
options = {:type => @unset ? :unset : :export}
|
89
|
-
|
90
|
-
case
|
91
|
-
when @script || @format == :script
|
92
|
-
Helper::Env::Exporter.script_exporter(bag, options)
|
93
|
-
when @format == :autoenv
|
94
|
-
Helper::Env::Exporter.autoenv_exporter(bag, options)
|
95
|
-
else
|
96
|
-
Helper::Env::Exporter.terminal_exporter(bag, options)
|
97
|
-
end
|
98
|
-
|
99
|
-
# No need to execute for the other VMs
|
100
|
-
return 0
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
data/locales/en.yml
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
nugrant:
|
3
|
-
vagrant:
|
4
|
-
errors:
|
5
|
-
parameter_not_found: |-
|
6
|
-
Nugrant: Parameter '%{key}' was not found, is it defined in
|
7
|
-
your .vagrantuser file? Here where we think the error
|
8
|
-
could be in your Vagrantfile:
|
9
|
-
|
10
|
-
%{context}
|
11
|
-
|
12
|
-
If you think it should be found, don't hesitate to fill an
|
13
|
-
issue @ https://github.com/maoueh/nugrant/issues.
|
@@ -1,238 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
|
3
|
-
require 'nugrant/bag'
|
4
|
-
require 'nugrant/helper/env/exporter'
|
5
|
-
|
6
|
-
module Nugrant
|
7
|
-
module Helper
|
8
|
-
module Env
|
9
|
-
class TestExporter < ::Minitest::Test
|
10
|
-
def create_bag(parameters)
|
11
|
-
return Nugrant::Bag.new(parameters)
|
12
|
-
end
|
13
|
-
|
14
|
-
def assert_export(expected, key, value, options = {})
|
15
|
-
actual = Env::Exporter.command(:export, key, value, options)
|
16
|
-
|
17
|
-
assert_equal(expected, actual)
|
18
|
-
end
|
19
|
-
|
20
|
-
def assert_unset(expected, key, options = {})
|
21
|
-
actual = Env::Exporter.command(:unset, key, options)
|
22
|
-
|
23
|
-
assert_equal(expected, actual)
|
24
|
-
end
|
25
|
-
|
26
|
-
def assert_autoenv_exporter(expected, bag, options = {})
|
27
|
-
io = StringIO.new()
|
28
|
-
Env::Exporter.autoenv_exporter(bag, options.merge({:io => io}))
|
29
|
-
|
30
|
-
actual = io.string().split(/\r?\n/)
|
31
|
-
|
32
|
-
assert_equal(expected, actual)
|
33
|
-
end
|
34
|
-
|
35
|
-
def assert_script_exporter(expected, bag, options = {})
|
36
|
-
io = StringIO.new()
|
37
|
-
Env::Exporter.script_exporter(bag, options.merge({:io => io}))
|
38
|
-
|
39
|
-
actual = io.string().split(/\r?\n/)
|
40
|
-
|
41
|
-
assert_equal(expected, actual)
|
42
|
-
end
|
43
|
-
|
44
|
-
def assert_terminal_exporter(expected, bag, options = {})
|
45
|
-
io = StringIO.new()
|
46
|
-
Env::Exporter.terminal_exporter(bag, options.merge({:io => io}))
|
47
|
-
|
48
|
-
actual = io.string().split(/\r?\n/)
|
49
|
-
|
50
|
-
assert_equal(expected, actual)
|
51
|
-
end
|
52
|
-
|
53
|
-
def assert_unset_commands(expected, bag, options = {})
|
54
|
-
actual = Env::Exporter.unset_commands(bag, options)
|
55
|
-
|
56
|
-
assert_equal(expected, actual)
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_valid_exporter
|
60
|
-
assert_equal(true, Env::Exporter.valid?(:autoenv))
|
61
|
-
assert_equal(true, Env::Exporter.valid?(:script))
|
62
|
-
assert_equal(true, Env::Exporter.valid?(:terminal))
|
63
|
-
assert_equal(false, Env::Exporter.valid?(:foreman))
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_export_command
|
67
|
-
assert_export("export TEST=\\\"running\\ with\\ space\\\"", "TEST", "\"running with space\"")
|
68
|
-
assert_export("export TEST=running with space", "TEST", "running with space", :escape_value => false)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_unset_command
|
72
|
-
assert_unset("unset TEST", "TEST")
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_terminal_exporter_export
|
76
|
-
bag = create_bag({
|
77
|
-
:level1 => {
|
78
|
-
:level2 => {
|
79
|
-
:first => "first with space",
|
80
|
-
:second => "\"second\\"
|
81
|
-
},
|
82
|
-
:third => "third"
|
83
|
-
},
|
84
|
-
:existing => "downcase",
|
85
|
-
})
|
86
|
-
|
87
|
-
stub_env(:existing => "exist", :EXISTING => "exist") do
|
88
|
-
assert_terminal_exporter([
|
89
|
-
"export EXISTING=downcase",
|
90
|
-
"export LEVEL1_LEVEL2_FIRST=first\\ with\\ space",
|
91
|
-
"export LEVEL1_LEVEL2_SECOND=\\\"second\\\\",
|
92
|
-
"export LEVEL1_THIRD=third",
|
93
|
-
], bag)
|
94
|
-
|
95
|
-
assert_terminal_exporter([
|
96
|
-
"export LEVEL1_LEVEL2_FIRST=first\\ with\\ space",
|
97
|
-
"export LEVEL1_LEVEL2_SECOND=\\\"second\\\\",
|
98
|
-
"export LEVEL1_THIRD=third",
|
99
|
-
], bag, :override => false)
|
100
|
-
|
101
|
-
assert_terminal_exporter([
|
102
|
-
"export EXISTING=downcase",
|
103
|
-
"export LEVEL1_LEVEL2_FIRST=first with space",
|
104
|
-
"export LEVEL1_LEVEL2_SECOND=\"second\\",
|
105
|
-
"export LEVEL1_THIRD=third",
|
106
|
-
], bag, :type => :export, :override => true, :escape_value => false)
|
107
|
-
|
108
|
-
default_namer = Env::Namer.default(".")
|
109
|
-
prefix_namer = Env::Namer.prefix("CONFIG", default_namer)
|
110
|
-
|
111
|
-
assert_terminal_exporter([
|
112
|
-
"export CONFIG.EXISTING=downcase",
|
113
|
-
"export CONFIG.LEVEL1.LEVEL2.FIRST=first with space",
|
114
|
-
"export CONFIG.LEVEL1.LEVEL2.SECOND=\"second\\",
|
115
|
-
"export CONFIG.LEVEL1.THIRD=third",
|
116
|
-
], bag, :override => true, :escape_value => false, :namer => prefix_namer)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_terminal_exporter_unset
|
121
|
-
bag = create_bag({
|
122
|
-
:level1 => {
|
123
|
-
:level2 => {
|
124
|
-
:first => "first",
|
125
|
-
:second => "second"
|
126
|
-
},
|
127
|
-
:third => "third"
|
128
|
-
},
|
129
|
-
:existing => "downcase",
|
130
|
-
})
|
131
|
-
|
132
|
-
stub_env(:existing => "exist", :EXISTING => "exist") do
|
133
|
-
assert_terminal_exporter([
|
134
|
-
"unset EXISTING",
|
135
|
-
"unset LEVEL1_LEVEL2_FIRST",
|
136
|
-
"unset LEVEL1_LEVEL2_SECOND",
|
137
|
-
"unset LEVEL1_THIRD",
|
138
|
-
], bag, :type => :unset)
|
139
|
-
|
140
|
-
assert_terminal_exporter([
|
141
|
-
"unset LEVEL1_LEVEL2_FIRST",
|
142
|
-
"unset LEVEL1_LEVEL2_SECOND",
|
143
|
-
"unset LEVEL1_THIRD",
|
144
|
-
], bag, :override => false, :type => :unset)
|
145
|
-
|
146
|
-
default_namer = Env::Namer.default(".")
|
147
|
-
prefix_namer = Env::Namer.prefix("CONFIG", default_namer)
|
148
|
-
|
149
|
-
assert_terminal_exporter([
|
150
|
-
"unset CONFIG.EXISTING",
|
151
|
-
"unset CONFIG.LEVEL1.LEVEL2.FIRST",
|
152
|
-
"unset CONFIG.LEVEL1.LEVEL2.SECOND",
|
153
|
-
"unset CONFIG.LEVEL1.THIRD",
|
154
|
-
], bag, :override => true, :namer => prefix_namer, :type => :unset)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_autoenv_exporter
|
159
|
-
bag = create_bag({
|
160
|
-
:level1 => {
|
161
|
-
:level2 => {
|
162
|
-
:first => "first",
|
163
|
-
:second => "second"
|
164
|
-
},
|
165
|
-
:third => "third"
|
166
|
-
},
|
167
|
-
:existing => "downcase",
|
168
|
-
})
|
169
|
-
|
170
|
-
assert_autoenv_exporter([
|
171
|
-
"export EXISTING=downcase",
|
172
|
-
"export LEVEL1_LEVEL2_FIRST=first",
|
173
|
-
"export LEVEL1_LEVEL2_SECOND=second",
|
174
|
-
"export LEVEL1_THIRD=third",
|
175
|
-
], bag, :type => :export)
|
176
|
-
|
177
|
-
assert_autoenv_exporter([
|
178
|
-
"unset EXISTING",
|
179
|
-
"unset LEVEL1_LEVEL2_FIRST",
|
180
|
-
"unset LEVEL1_LEVEL2_SECOND",
|
181
|
-
"unset LEVEL1_THIRD",
|
182
|
-
], bag, :type => :unset)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_script_exporter
|
186
|
-
bag = create_bag({
|
187
|
-
:level1 => {
|
188
|
-
:level2 => {
|
189
|
-
:first => "first",
|
190
|
-
:second => "second"
|
191
|
-
},
|
192
|
-
:third => "third"
|
193
|
-
},
|
194
|
-
:existing => "downcase",
|
195
|
-
})
|
196
|
-
|
197
|
-
assert_script_exporter([
|
198
|
-
"#!/bin/env sh",
|
199
|
-
"",
|
200
|
-
"export EXISTING=downcase",
|
201
|
-
"export LEVEL1_LEVEL2_FIRST=first",
|
202
|
-
"export LEVEL1_LEVEL2_SECOND=second",
|
203
|
-
"export LEVEL1_THIRD=third",
|
204
|
-
], bag, :type => :export)
|
205
|
-
|
206
|
-
assert_script_exporter([
|
207
|
-
"#!/bin/env sh",
|
208
|
-
"",
|
209
|
-
"unset EXISTING",
|
210
|
-
"unset LEVEL1_LEVEL2_FIRST",
|
211
|
-
"unset LEVEL1_LEVEL2_SECOND",
|
212
|
-
"unset LEVEL1_THIRD",
|
213
|
-
], bag, :type => :unset)
|
214
|
-
end
|
215
|
-
|
216
|
-
def replace_env(variables)
|
217
|
-
ENV.clear()
|
218
|
-
|
219
|
-
variables = Hash[variables.map do |name, value|
|
220
|
-
[name.to_s, value]
|
221
|
-
end]
|
222
|
-
|
223
|
-
ENV.update(variables)
|
224
|
-
end
|
225
|
-
|
226
|
-
def stub_env(new = {})
|
227
|
-
old = ENV.to_hash()
|
228
|
-
|
229
|
-
replace_env(new)
|
230
|
-
yield
|
231
|
-
|
232
|
-
ensure
|
233
|
-
replace_env(old)
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|