[why]
expand erb templates need a class to save context
[how]
Context class provides a readable property @info,
it will save the context required by erb,
and a expand_erb method, it can expand a erb templates based on @info.
Signed-off-by: Xiao Shenwei <xiaoshenwei96(a)163.com>
---
providers/lib/context.rb | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
create mode 100644 providers/lib/context.rb
diff --git a/providers/lib/context.rb b/providers/lib/context.rb
new file mode 100644
index 0000000..6f9f579
--- /dev/null
+++ b/providers/lib/context.rb
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: MulanPSL-2.0+
+# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
+# frozen_string_literal: true
+
+require 'erb'
+require_relative "#{ENV['LKP_SRC']}/lib/hashugar"
+
+# saves the context required by expand erb templates
+class Context
+ attr_reader :info
+
+ def initialize(mac, hostname, queues)
+ @info = {
+ 'mac' => mac,
+ 'hostname' => hostname,
+ 'queues' => queues
+ }
+ end
+
+ def merge!(hash)
+ @info.merge!(hash)
+ end
+
+ # existing variables of @info, can be used by erb
+ # @info: { 'name' => 'xxx' }
+ # Templates:
+ # This is <%= name %>
+ # After expanding:
+ # This is xxx
+ def expand_erb(template, context_hash = {})
+ @info.merge!(context_hash)
+ context = Hashugar.new((a)info).instance_eval { binding }
+ ERB.new(template, nil, '%').result(context)
+ end
+end
--
2.23.0