Module: VagrantDockerCertificatesManager::UiHelpers
- Defined in:
- lib/vagrant-docker-certificates-manager/helpers.rb
Defined Under Namespace
Classes: MissingTranslationError, UnsupportedLocaleError
Constant Summary
collapse
- SUPPORTED =
[:en, :fr].freeze
- NAMESPACE =
"vdcm".freeze
- OUR_SPACES =
%w[messages. errors. usage. help. prompts. log. emoji. cli. add. remove. list. install.
uninstall.].freeze
- EMOJI =
{
success: "โ
",
info: "๐",
ongoing: "๐",
warning: "โ ๏ธ",
error: "โ",
version: "๐พ",
broom: "๐งน",
question: "โ",
bug: "๐"
}.freeze
Class Method Summary
collapse
-
.append_help_section(lines, label, body_lines) ⇒ Object
-
.build_topic_help_lines(topic, fields, no_emoji) ⇒ Object
-
.debug(env_or_ui, msg) ⇒ Object
-
.debug_enabled? ⇒ Boolean
-
.e(key, no_emoji: false) ⇒ Object
-
.emit_lines(lines, ui) ⇒ Object
-
.exists?(key) ⇒ Boolean
-
.level_to_emoji(level) ⇒ Object
-
.ns_key(key) ⇒ Object
-
.our_key?(k) ⇒ Boolean
-
.print_general_help(no_emoji: false, ui: nil) ⇒ Object
-
.print_topic_help(topic, no_emoji: false, ui: nil) ⇒ Object
-
.say(env_or_ui, level, key = nil, raw: nil, no_emoji: false, **kv) ⇒ Object
-
.set_locale!(lang, strict: false) ⇒ Object
-
.setup_i18n! ⇒ Object
-
.t(key, **opts) ⇒ Object
-
.t!(key, **opts) ⇒ Object
-
.t_hash(key) ⇒ Object
-
.topic_help_empty?(fields) ⇒ Boolean
-
.topic_help_fields(base) ⇒ Object
Class Method Details
.append_help_section(lines, label, body_lines) ⇒ Object
202
203
204
205
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 202
def append_help_section(lines, label, body_lines)
lines << " #{label}"
body_lines.each { |line| lines << line }
end
|
.build_topic_help_lines(topic, fields, no_emoji) ⇒ Object
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 179
def build_topic_help_lines(topic, fields, no_emoji)
lines = []
lines << "#{e(:info, no_emoji: no_emoji)} #{fields[:title] || t('help.topic_fallback_title', topic: topic)}"
lines << " #{t('help.usage_label')}"
lines << " #{fields[:usage] || 'vagrant certs help'}"
desc = fields[:desc]
append_help_section(lines, t("help.description_label"), [" #{desc}"]) if desc && !desc.strip.empty?
unless fields[:opts].empty?
append_help_section(lines, t("help.options_label"), fields[:opts].values.map do |l|
" #{l}"
end)
end
exs = fields[:exs]
if exs.is_a?(Array) && !exs.empty?
append_help_section(lines, t("help.examples_label"), exs.map do |ex|
" #{ex}"
end)
end
lines
end
|
.debug(env_or_ui, msg) ⇒ Object
130
131
132
133
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 130
def debug(env_or_ui, msg)
return unless debug_enabled?
say(env_or_ui, :info, nil, raw: "#{e(:bug)} #{msg}")
end
|
.debug_enabled? ⇒ Boolean
101
102
103
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 101
def debug_enabled?
ENV["VDCM_DEBUG"].to_s == "1"
end
|
.e(key, no_emoji: false) ⇒ Object
64
65
66
67
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 64
def e(key, no_emoji: false)
return "" if no_emoji || ENV["VDCM_NO_EMOJI"] == "1"
EMOJI[key] || ""
end
|
.emit_lines(lines, ui) ⇒ Object
145
146
147
148
149
150
151
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 145
def emit_lines(lines, ui)
if ui
lines.each { |ln| ui.info(ln) }
else
lines.each { |ln| puts ln }
end
end
|
.exists?(key) ⇒ Boolean
93
94
95
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 93
def exists?(key)
::I18n.exists?(ns_key(key), ::I18n.locale)
end
|
.level_to_emoji(level) ⇒ Object
105
106
107
108
109
110
111
112
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 105
def level_to_emoji(level)
case level
when :success then :success
when :warn then :warning
when :error then :error
else :info
end
end
|
.ns_key(key) ⇒ Object
69
70
71
72
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 69
def ns_key(key)
k = key.to_s
k.start_with?("#{NAMESPACE}.") ? k : "#{NAMESPACE}.#{k}"
end
|
.our_key?(k) ⇒ Boolean
97
98
99
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 97
def our_key?(k)
OUR_SPACES.any? { |ns| k.start_with?("#{NAMESPACE}.#{ns}") || k.start_with?(ns) }
end
|
.print_general_help(no_emoji: false, ui: nil) ⇒ Object
135
136
137
138
139
140
141
142
143
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 135
def print_general_help(no_emoji: false, ui: nil)
setup_i18n!
lines = []
lines << "#{e(:info, no_emoji: no_emoji)} #{t('help.general_title')}"
lines << " #{t('cli.usage')}"
t_hash("help.commands").each_value { |line| lines << " #{line}" }
emit_lines(lines, ui)
end
|
.print_topic_help(topic, no_emoji: false, ui: nil) ⇒ Object
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 153
def print_topic_help(topic, no_emoji: false, ui: nil)
setup_i18n!
topic = (topic || "").to_s.strip.downcase
return print_general_help(no_emoji: no_emoji, ui: ui) if topic.empty?
fields = topic_help_fields("help.topic.#{topic}")
return print_general_help(no_emoji: no_emoji, ui: ui) if topic_help_empty?(fields)
emit_lines(build_topic_help_lines(topic, fields, no_emoji), ui)
end
|
.say(env_or_ui, level, key = nil, raw: nil, no_emoji: false, **kv) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 114
def say(env_or_ui, level, key = nil, raw: nil, no_emoji: false, **kv)
setup_i18n!
ui = (env_or_ui.respond_to?(:[]) ? (env_or_ui[:ui] || env_or_ui[:machine]&.ui) : env_or_ui)
msg = raw || (key ? t(key, **kv) : nil)
return if ui.nil? || msg.nil?
prefix = e(level_to_emoji(level), no_emoji: no_emoji)
line = prefix.empty? ? msg : "#{prefix} #{msg}"
case level
when :warn then ui.warn(line)
when :error then ui.error(line)
else ui.info(line)
end
end
|
.set_locale!(lang, strict: false) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 46
def set_locale!(lang, strict: false)
setup_i18n!
raw = (lang || ENV["VDCM_LANG"] || ENV["LANG"] || "en").to_s
sym = raw[0, 2].to_s.downcase.to_sym
sym = :en if sym.nil? || sym == :""
unless SUPPORTED.include?(sym)
if strict
raise UnsupportedLocaleError,
"#{e(:error)} Unsupported language: #{sym}. Available: #{SUPPORTED.join(', ')}"
else
sym = :en
end
end
::I18n.locale = sym
::I18n.backend.load_translations
sym
end
|
.setup_i18n! ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 30
def setup_i18n!
return if defined?(@i18n_setup) && @i18n_setup
::I18n.enforce_available_locales = false
base = File.expand_path("../../locales", __dir__)
paths = Dir[File.join(base, "*.yml")]
if paths.empty? && File.directory?(base)
paths = Dir.children(base).grep(/\.ya?ml\z/).map { |file| File.join(base, file) }
end
::I18n.load_path |= paths
::I18n.available_locales = SUPPORTED
default = ((ENV["VDCM_LANG"] || ENV["LANG"] || "en")[0, 2] rescue "en").to_sym
::I18n.default_locale = SUPPORTED.include?(default) ? default : :en
::I18n.backend.load_translations
@i18n_setup = true
end
|
.t(key, **opts) ⇒ Object
74
75
76
77
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 74
def t(key, **opts)
setup_i18n!
::I18n.t(ns_key(key), **opts)
end
|
.t!(key, **opts) ⇒ Object
79
80
81
82
83
84
85
86
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 79
def t!(key, **opts)
setup_i18n!
k = ns_key(key)
if our_key?(k) && !::I18n.exists?(k, ::I18n.locale)
raise MissingTranslationError, "#{e(:error)} [#{::I18n.locale}] Missing translation for key: #{k}"
end
::I18n.t(k, **opts)
end
|
.t_hash(key) ⇒ Object
88
89
90
91
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 88
def t_hash(key)
v = t(key, default: {})
v.is_a?(Hash) ? v : {}
end
|
.topic_help_empty?(fields) ⇒ Boolean
174
175
176
177
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 174
def topic_help_empty?(fields)
fields[:title].nil? && fields[:usage].nil? && fields[:desc].nil? &&
fields[:opts].empty? && fields[:exs].empty?
end
|
.topic_help_fields(base) ⇒ Object
164
165
166
167
168
169
170
171
172
|
# File 'lib/vagrant-docker-certificates-manager/helpers.rb', line 164
def topic_help_fields(base)
{
title: t("#{base}.title", default: nil),
usage: t("#{base}.usage", default: nil),
desc: t("#{base}.description", default: nil),
opts: t_hash("#{base}.options"),
exs: ::I18n.t(ns_key("#{base}.examples"), default: [])
}
end
|