class Natour::MapGeoAdmin
Public Class Methods
new(port: 0)
click to toggle source
# File lib/natour/map_geo_admin.rb, line 10 def initialize(port: 0) @doc_root = Dir.mktmpdir FileUtils.cp_r("#{__dir__}/data/js", @doc_root) event = Concurrent::Event.new @server = WEBrick::HTTPServer.new( StartCallback: -> { event.set }, Logger: WEBrick::Log.new(File.open(File::NULL, 'w')), AccessLog: [], DocumentRoot: @doc_root, BindAddress: 'localhost', Port: port ) @server.mount('/map', MapServlet) @thread = Thread.new { @server.start } event.wait @browser = Ferrum::Browser.new( slowmo: 2.0, window_size: [5000, 5000], browser_options: { 'no-sandbox': nil } ) end
open(*args) { |map| ... }
click to toggle source
# File lib/natour/map_geo_admin.rb, line 56 def self.open(*args) map = MapGeoAdmin.new(*args) return map unless block_given? yield(map) ensure map&.close end
Public Instance Methods
close()
click to toggle source
# File lib/natour/map_geo_admin.rb, line 32 def close @browser.quit @server.shutdown @thread.join FileUtils.remove_entry(@doc_root) end
save_image(filename, tracks: [], layers: [], size: [1200, 900])
click to toggle source
# File lib/natour/map_geo_admin.rb, line 39 def save_image(filename, tracks: [], layers: [], size: [1200, 900]) FileUtils.cp(tracks, @doc_root) FileUtils.mkdir_p(Pathname(filename).dirname) uri = URI("http://#{@server[:BindAddress]}:#{@server[:Port]}/map") uri.query = URI.encode_www_form( tracks: tracks.map { |track| Pathname(track).basename }.join(','), layers: layers.join(','), size: size.map { |dim| dim.is_a?(String) ? dim : "#{dim}px" }.join(',') ) @browser.goto(uri) @browser.screenshot( path: filename, quality: 100, selector: '.map' ) end