require "sinatra/base" require "sinatra/json" module Maptool class App < Sinatra::Base set :public_folder, File.join(__dir__, "public") set :views, File.join(__dir__, "views") OFFLINE_PMTILES_PATH = File.join(__dir__, "data", "offline.pmtiles") get "/" do erb :index end get "/api/health" do json status: "ok" end get "/api/offline-tiles" do json available: File.exist?(OFFLINE_PMTILES_PATH) end # Served as a plain range-request-capable file, not decoded server-side: # pmtiles.js reads the archive's directory and fetches only the byte # ranges it needs for the tiles currently on screen. get "/tiles/offline.pmtiles" do halt 404 unless File.exist?(OFFLINE_PMTILES_PATH) send_file OFFLINE_PMTILES_PATH, type: "application/octet-stream" end end end