# frozen_string_literal: true require "yaml" require_relative "skeksis/version" require_relative "skeksis/parser" require_relative "skeksis/htmlize" module Skeksis #class Error < StandardError; end Header = <<~HTML Gembridge

Directory Listing

HTML Footer = <<~HTML HTML class GemBridge def initialize @gemini_uri = YAML.load(File.read("config.yml"))['skeksis_config']['gemini_uri'] end def query(path, env) if Dir.exist?(path) #return Dir.each_child(path).map {|i| "#{i}\n"} return create_dir_listing(path, env) elsif File.exist?(path) file = File.open(path, 'r') data = file.readlines [htmlize(data, env)] else # path is invalid return nil end end def htmlize(data, env) Skeksis::Parser.parse(data, strip_blanks=true).htmlize(env['REQUEST_URI'], @gemini_uri) end private def create_dir_listing(path, env) http = URI.parse(env['REQUEST_URI']) listing = Dir.each_child(path).map do |i| path = Pathname.new(env['PATH_INFO']).join(i) uri = URI::HTTP.build(host: http.host, port: http.port, path: path.to_s) "#{i}
" end.join("\n") [Header + listing + Footer] end end end