lib/rack/handler/david.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Rack
  module Handler
    class David
      def self.run(app, options={})
        g = Celluloid::Supervision::Container.run!

        g.supervise(as: :server, type: ::David::Server, args: [app, options])
        g.supervise(as: :gc, type: ::David::GarbageCollector)

        if options[:Observe] != 'false'
          g.supervise(as: :observe, type: ::David::Observe)
        end

        begin
          Celluloid::Actor[:server].run
        rescue Interrupt
          Celluloid.logger.info 'Terminated'
          Celluloid.logger = nil
          g.terminate
        end
      end

      def self.valid_options
        host, port, maddrs =
          AppConfig::DEFAULT_OPTIONS.values_at(:Host, :Port, :MulticastGroups)

        {
          'Block=BOOLEAN'         => 'Support for blockwise transfer (default: true)',
          'CBOR=BOOLEAN'          => 'Transparent JSON/CBOR conversion (default: false)',
          'DefaultFormat=F'       => 'Content-Type if CoAP accept option on request is undefined',
          'Host=HOST'             => "Hostname to listen on (default: #{host})",
          'Log=LOG'               => 'Change logging (debug|none)',
          'Multicast=BOOLEAN'     => 'Multicast support (default: true)',
          'MulticastGroups=ARRAY' => "Multicast groups (default: #{maddrs.join(', ')})",
          'Observe=BOOLEAN'       => 'Observe support (default: true)',
          'Port=PORT'             => "Port to listen on (default: #{port})"
        }
      end
    end

    register(:david, David)
  end
end