From 6e55c3ae199660e194aadd4835fb38acb6010970 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Sun, 5 Nov 2023 08:13:35 +0100 Subject: Added vault page --- bin/vault.rb | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 bin/vault.rb (limited to 'bin') diff --git a/bin/vault.rb b/bin/vault.rb new file mode 100644 index 0000000..1a664ea --- /dev/null +++ b/bin/vault.rb @@ -0,0 +1,60 @@ +require 'nokogiri' +require 'net/http' +require 'uri' + +url = "https://mitjafelicijan.fra1.digitaloceanspaces.com/" + +def truncate_filename(filename, max_length) + return filename if filename.length <= max_length + + file_extension = filename.split('.').last + "#{filename[0...max_length - file_extension.length - 5]}….#{file_extension}" +end + +uri = URI(url) +response = Net::HTTP.get_response(uri) + +if response.is_a?(Net::HTTPSuccess) + xml_data = response.body + root = Nokogiri::XML(xml_data) + + root.remove_namespaces! + tree = {} + + root.xpath("//Contents").each do |content| + key = content.xpath("Key").text + parts = key.split("/") + node = tree + parts.each do |part| + next if part.empty? + node[part] ||= {} + node = node[part] + end + end + + def tree_to_md(tree, url, indent = 0, path = "") + md = "" + tree.each do |k, v| + if v.empty? # If the node is empty, it's a file + file_url = "#{url}#{path}#{k}" + file_name = truncate_filename(k, 500) + md += "#{" " * indent}- [#{file_name}](#{file_url})\n" + else # If the node has children, it's a directory + md += "#{" " * indent}- #{k}\n" + md += tree_to_md(v, url, indent + 1, "#{path}#{k}/") + end + end + md + end + + md = tree_to_md(tree, url) + puts md + + File.open("_layouts/vault.md", "r") do |file| + content = file.read + new_content = content.gsub("{CONTENT}", md) + File.open("vault.md", "w") { |f| f.write(new_content) } + end +else + puts "Failed to fetch XML data. Status code: #{response.code}" +end -- cgit v1.2.3