Sha256: 8071c4c9c1f79d9bddcf783d7b9cb6008f27943b8d8c3d8ad2fd036c2d4e26ca

Contents?: true

Size: 1.83 KB

Versions: 16

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

require 'opal/simple_server'

module Opal
  module CliRunners
    class Server
      def self.call(data)
        runner = new(data)
        runner.run
        runner.exit_status
      end

      def initialize(data)
        options = data[:options] || {}
        @builder = data[:builder]

        @argv = data[:argv] || []

        @output = data[:output] || $stdout

        @port = options.fetch(:port, ENV['OPAL_CLI_RUNNERS_SERVER_PORT'] || 3000).to_i

        @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, :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(builder)

        @server = Rack::Server.start(
          app:       app,
          Port:      port,
          AccessLog: [],
          Logger:    Logger.new(output),
        )
      end

      def exit_status
        nil
      end

      def build_app(builder)
        app = App.new(builder: builder, main: 'cli-runner')

        if static_folder
          not_found = [404, {}, []]
          app = Rack::Cascade.new(
            [
              Rack::Static.new(->(_) { not_found }, urls: [''], root: static_folder),
              app
            ],
          )
        end

        app
      end

      class App < SimpleServer
        def initialize(options = {})
          @builder = options.fetch(:builder)
          super
        end

        def builder(_)
          @builder.call
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
opal-1.8.3.rc1 lib/opal/cli_runners/server.rb
opal-1.8.2 lib/opal/cli_runners/server.rb
opal-1.8.1 lib/opal/cli_runners/server.rb
opal-1.8.0 lib/opal/cli_runners/server.rb
opal-1.8.0.beta1 lib/opal/cli_runners/server.rb
opal-1.7.4 lib/opal/cli_runners/server.rb
opal-1.8.0.alpha1 lib/opal/cli_runners/server.rb
opal-1.7.3 lib/opal/cli_runners/server.rb
opal-1.7.2 lib/opal/cli_runners/server.rb
opal-1.7.1 lib/opal/cli_runners/server.rb
opal-1.7.0 lib/opal/cli_runners/server.rb
opal-1.7.0.rc1 lib/opal/cli_runners/server.rb
opal-1.6.1 lib/opal/cli_runners/server.rb
opal-1.6.0 lib/opal/cli_runners/server.rb
opal-1.6.0.rc1 lib/opal/cli_runners/server.rb
opal-1.6.0.alpha1 lib/opal/cli_runners/server.rb