diff options
Diffstat (limited to 'bin/vault.rb')
| -rw-r--r-- | bin/vault.rb | 60 |
1 files changed, 60 insertions, 0 deletions
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 @@ | |||
| 1 | require 'nokogiri' | ||
| 2 | require 'net/http' | ||
| 3 | require 'uri' | ||
| 4 | |||
| 5 | url = "https://mitjafelicijan.fra1.digitaloceanspaces.com/" | ||
| 6 | |||
| 7 | def truncate_filename(filename, max_length) | ||
| 8 | return filename if filename.length <= max_length | ||
| 9 | |||
| 10 | file_extension = filename.split('.').last | ||
| 11 | "#{filename[0...max_length - file_extension.length - 5]}….#{file_extension}" | ||
| 12 | end | ||
| 13 | |||
| 14 | uri = URI(url) | ||
| 15 | response = Net::HTTP.get_response(uri) | ||
| 16 | |||
| 17 | if response.is_a?(Net::HTTPSuccess) | ||
| 18 | xml_data = response.body | ||
| 19 | root = Nokogiri::XML(xml_data) | ||
| 20 | |||
| 21 | root.remove_namespaces! | ||
| 22 | tree = {} | ||
| 23 | |||
| 24 | root.xpath("//Contents").each do |content| | ||
| 25 | key = content.xpath("Key").text | ||
| 26 | parts = key.split("/") | ||
| 27 | node = tree | ||
| 28 | parts.each do |part| | ||
| 29 | next if part.empty? | ||
| 30 | node[part] ||= {} | ||
| 31 | node = node[part] | ||
| 32 | end | ||
| 33 | end | ||
| 34 | |||
| 35 | def tree_to_md(tree, url, indent = 0, path = "") | ||
| 36 | md = "" | ||
| 37 | tree.each do |k, v| | ||
| 38 | if v.empty? # If the node is empty, it's a file | ||
| 39 | file_url = "#{url}#{path}#{k}" | ||
| 40 | file_name = truncate_filename(k, 500) | ||
| 41 | md += "#{" " * indent}- [#{file_name}](#{file_url})\n" | ||
| 42 | else # If the node has children, it's a directory | ||
| 43 | md += "#{" " * indent}- #{k}\n" | ||
| 44 | md += tree_to_md(v, url, indent + 1, "#{path}#{k}/") | ||
| 45 | end | ||
| 46 | end | ||
| 47 | md | ||
| 48 | end | ||
| 49 | |||
| 50 | md = tree_to_md(tree, url) | ||
| 51 | puts md | ||
| 52 | |||
| 53 | File.open("_layouts/vault.md", "r") do |file| | ||
| 54 | content = file.read | ||
| 55 | new_content = content.gsub("{CONTENT}", md) | ||
| 56 | File.open("vault.md", "w") { |f| f.write(new_content) } | ||
| 57 | end | ||
| 58 | else | ||
| 59 | puts "Failed to fetch XML data. Status code: #{response.code}" | ||
| 60 | end | ||
