Class: ChefCLI::Command::ShellInit
- Inherits:
-
Base
- Object
- Base
- ChefCLI::Command::ShellInit
show all
- Defined in:
- lib/chef-cli/command/shell_init.rb
Constant Summary
collapse
- SUPPORTED_SHELLS =
%w{ bash fish zsh sh powershell posh}.map(&:freeze).freeze
Instance Method Summary
collapse
Methods inherited from Base
#needs_help?, #needs_version?, #run_with_default_options
Methods included from Helpers
#err, #fetch_chef_cli_version_pkg, #get_pkg_install_path, #get_pkg_prefix, #git_bin_dir, #git_windows_bin_dir, #habitat_chef_dke?, #habitat_env, #habitat_install?, #habitat_standalone?, #msg, #omnibus_bin_dir, #omnibus_embedded_bin_dir, #omnibus_env, #omnibus_expand_path, #omnibus_install?, #package_home, #stderr, #stdout, #system_command, #usr_bin_path, #usr_bin_prefix
Constructor Details
Returns a new instance of ShellInit.
87
88
89
90
|
# File 'lib/chef-cli/command/shell_init.rb', line 87
def initialize
super
@shell_completion_template_context = nil
end
|
Instance Method Details
#check_license_acceptance ⇒ Object
188
189
190
191
|
# File 'lib/chef-cli/command/shell_init.rb', line 188
def check_license_acceptance
end
|
#completion_for(shell) ⇒ Object
126
127
128
129
130
131
132
133
|
# File 'lib/chef-cli/command/shell_init.rb', line 126
def completion_for(shell)
return "" unless (completion_template_basename = completion_template_for(shell))
completion_template_path = expand_completion_template_path(completion_template_basename)
erb = ERB.new(File.read(completion_template_path), trim_mode: "-")
context_binding = shell_completion_template_context.get_binding
erb.result(context_binding)
end
|
#completion_template_for(shell) ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/chef-cli/command/shell_init.rb', line 135
def completion_template_for(shell)
case shell
when "bash"
"bash.sh.erb"
when "fish"
"chef.fish.erb"
when "zsh"
"zsh.zsh.erb"
else
nil
end
end
|
#emit_shell_cmd(cmd) ⇒ Object
122
123
124
|
# File 'lib/chef-cli/command/shell_init.rb', line 122
def emit_shell_cmd(cmd)
msg(cmd) unless cmd.empty?
end
|
#expand_completion_template_path(basename) ⇒ Object
149
150
151
|
# File 'lib/chef-cli/command/shell_init.rb', line 149
def expand_completion_template_path(basename)
File.join(File.expand_path("../completions", __dir__), basename)
end
|
#export(shell, var, val) ⇒ Object
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/chef-cli/command/shell_init.rb', line 157
def export(shell, var, val)
case shell
when "sh", "bash", "zsh"
posix_shell_export(var, val)
when "fish"
fish_shell_export(var, val)
when "powershell", "posh"
powershell_export(var, val)
end
end
|
#fish_shell_export(var, val) ⇒ Object
172
173
174
175
176
177
178
179
180
181
182
|
# File 'lib/chef-cli/command/shell_init.rb', line 172
def fish_shell_export(var, val)
if var == "PATH"
emit_shell_cmd(%Q{set -gx #{var} "#{val.split(":").join('" "')}" 2>/dev/null;})
else
emit_shell_cmd(%Q{set -gx #{var} "#{val}";})
end
end
|
#omnibus_root ⇒ Object
92
93
94
|
# File 'lib/chef-cli/command/shell_init.rb', line 92
def omnibus_root
config[:omnibus_dir] || super
end
|
#posix_shell_export(var, val) ⇒ Object
168
169
170
|
# File 'lib/chef-cli/command/shell_init.rb', line 168
def posix_shell_export(var, val)
emit_shell_cmd(%Q{export #{var}="#{val}"})
end
|
#powershell_export(var, val) ⇒ Object
184
185
186
|
# File 'lib/chef-cli/command/shell_init.rb', line 184
def powershell_export(var, val)
emit_shell_cmd(%Q{$env:#{var}="#{val}"})
end
|
#run(argv) ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/chef-cli/command/shell_init.rb', line 96
def run(argv)
remaining_args = parse_options(argv)
shell_name = remaining_args.first
if shell_name.nil?
err("Please specify what shell you are using\n")
err(opt_parser.to_s)
return 1
elsif !SUPPORTED_SHELLS.include?(shell_name)
err("Shell `#{shell_name}' is not currently supported")
err("Supported shells are: #{SUPPORTED_SHELLS.join(" ")}")
return 1
end
env = (habitat_install? ? habitat_env : omnibus_env).dup
path = env.delete("PATH")
export(shell_name, "PATH", path)
env.each do |var_name, value|
export(shell_name, var_name, value)
end
emit_shell_cmd(completion_for(shell_name))
0
end
|
#shell_completion_template_context ⇒ Object
153
154
155
|
# File 'lib/chef-cli/command/shell_init.rb', line 153
def shell_completion_template_context
@shell_completion_template_context ||= ShellCompletionTemplateContext.new
end
|