require 'ostruct'
require 'delegate'
module Common
module_function
def plugins
@plugins
end
def assign_data_level(cur_hash, key, cur_data)
if !cur_data && (cur_data.class == OpenStruct || cur_data.class == Array)
return
elsif !cur_data
cur_data = "false"
end
if cur_data.class == OpenStruct
wrap_hash_level(cur_hash, key, cur_data)
elsif cur_data.class == Array
wrap_array_level(cur_hash, key, cur_data)
else
cur_hash[key] = cur_data.to_s
end
end
def wrap_array_level(cur_hash, key, cur_data)
if !cur_data || cur_data.class != Array
return
end
cur_data.each do |val|
assign_data_level(cur_hash, key, val)
end
end
def wrap_hash_level(cur_hash, key, cur_data)
if !cur_data || cur_data.class != OpenStruct
return
end
if !cur_hash[key]
cur_hash[key] = Hash.new()
end
new_h = cur_data.to_h
new_h.each do |sub_key, val|
assign_data_level(cur_hash[key.to_s], sub_key.to_s, val)
end
end
def wrap_data(data)
@data = data
@plugins = Hash.new()
if !data || !data.plugins
return
end
data.plugins.each do |plugin|
h_plugin = plugin.to_h
h_plugin_lang = h_plugin.keys.first.to_s
lang_enum = h_plugin_lang == "JAVA" ? "JAVA_8" : h_plugin_lang
lang_enum = "panda::panda_file::SourceLang::" + lang_enum
@plugins[h_plugin_lang] = Hash.new()
@plugins[h_plugin_lang]["lang_enum"] = lang_enum
assign_data_level(@plugins, h_plugin_lang, h_plugin.values.first)
end
end
end
def Gen.on_require(data)
Common.wrap_data(data)
end