lib/opal/cli_runners/server.rb in opal-1.5.1 vs lib/opal/cli_runners/server.rb in opal-1.6.0.alpha1
- old
+ new
@@ -1,7 +1,9 @@
# frozen_string_literal: true
+require 'opal/simple_server'
+
module Opal
module CliRunners
class Server
def self.call(data)
runner = new(data)
@@ -9,13 +11,12 @@
runner.exit_status
end
def initialize(data)
options = data[:options] || {}
- builder = data[:builder]
+ @builder = data[:builder]
- @code = builder.to_s + "\n" + builder.source_map.to_data_uri_comment
@argv = data[:argv] || []
@output = data[:output] || $stdout
@port = options.fetch(:port, ENV['OPAL_CLI_RUNNERS_SERVER_PORT'] || 3000).to_i
@@ -23,21 +24,21 @@
@static_folder = options[:static_folder] || ENV['OPAL_CLI_RUNNERS_SERVER_STATIC_FOLDER']
@static_folder = @static_folder == true ? 'public' : @static_folder
@static_folder = File.expand_path(@static_folder) if @static_folder
end
- attr_reader :output, :port, :server, :static_folder, :code, :argv
+ attr_reader :output, :port, :server, :static_folder, :builder, :argv
def run
unless argv.empty?
raise ArgumentError, 'Program arguments are not supported on the Server runner'
end
require 'rack'
require 'logger'
- app = build_app(code)
+ app = build_app(builder)
@server = Rack::Server.start(
app: app,
Port: port,
AccessLog: [],
@@ -47,12 +48,12 @@
def exit_status
nil
end
- def build_app(source)
- app = App.new(source)
+ def build_app(builder)
+ app = App.new(builder: builder, main: 'cli-runner')
if static_folder
not_found = [404, {}, []]
app = Rack::Cascade.new(
[
@@ -63,33 +64,17 @@
end
app
end
- class App
- def initialize(source)
- @source = source
+ class App < SimpleServer
+ def initialize(options = {})
+ @builder = options.fetch(:builder)
+ super
end
- BODY = <<-HTML
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <script src="/cli_runner.js"></script>
- </head>
- </html>
- HTML
-
- def call(env)
- case env['PATH_INFO']
- when '/'
- [200, { 'Content-Type' => 'text/html' }, [BODY]]
- when '/cli_runner.js'
- [200, { 'Content-Type' => 'text/javascript' }, [@source]]
- else
- [404, {}, ['not found']]
- end
+ def builder(_)
+ @builder.call
end
end
end
end
end