require 'erb' module Templates def render(name, locals = {}) # caller_module = Module.nesting.first.to_s.split('::').last&.downcase || 'common' caller_file = caller_locations(1, 1)[0].absolute_path inferred_dir = File.basename(caller_file).sub(/^install-/, '').sub(/\.rb$/, '') puts "caller name: #{inferred_dir}" template_path = File.join(__dir__, 'data', 'templates', inferred_dir, "#{name}.erb") template = File.read(template_path) erb = ERB.new(template) # erb.result(binding) context = Struct.new(*locals.keys).new(*locals.values) erb.result(context.instance_eval { binding }) end end