Sha256: 210fb290b6b05a4e65c4d84cf6adb2b54e373c89435fc2f90881fe3155e0e36a

Contents?: true

Size: 1.59 KB

Versions: 16

Compression:

Stored size: 1.59 KB

Contents

module Startback
  module Websocket
    module Hub
      class Builder

        def initialize(context, default_handler = nil, *bl_args, &bl)
          @context = context
          @default_handler = default_handler
          @middlewares = []
          @commands = {}
          @rooms = {}
          @bl_args
          instance_exec *bl_args, &bl
        end

        def use(middleware, *opts)
          @middlewares << proc { |app| middleware.new(app, *opts) }
        end

        def command(name, &bl)
          cname = name.to_sym
          raise "Command #{name} already defined: #{name}" if @commands[cname]
          @commands[cname] = proc { |app| Middleware::CommandHandler.new(app, { :name => name }, &bl) }
          @middlewares << @commands[cname]
        end

        def room(name, &bl)
          raise "Room names must be strings" unless name.is_a? String
          raise "Room '#{name}' already defined" if @rooms[name]

          @rooms[name] ||= Room.new(name)
          handler = Builder.new(@context, nil, @rooms[name], &bl).to_handler
          middleware = proc { |app| Middleware::RoomHandler.new(app, @rooms[name], handler) }

          @middlewares << middleware
        end

        def to_handler
          default_handler = @default_handler || proc {}
          @middlewares
            .reverse
            .reduce(default_handler) do |handler, mw|
              mw.call(handler)
            end
        end

        def to_websocket_app
          App.new(@context, @rooms, to_handler)
        end

      end # class Builder
    end # module Hub
  end # module Websocket
end # module Startback

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
startback-websocket-0.17.4 lib/startback/websocket/hub/builder.rb
startback-websocket-0.17.3 lib/startback/websocket/hub/builder.rb
startback-websocket-0.17.2 lib/startback/websocket/hub/builder.rb
startback-websocket-0.17.1 lib/startback/websocket/hub/builder.rb
startback-websocket-0.17.0 lib/startback/websocket/hub/builder.rb
startback-websocket-0.16.0 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.5 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.4 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.3 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.2 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.1 lib/startback/websocket/hub/builder.rb
startback-websocket-0.15.0 lib/startback/websocket/hub/builder.rb
startback-websocket-0.14.4 lib/startback/websocket/hub/builder.rb
startback-websocket-0.14.3 lib/startback/websocket/hub/builder.rb
startback-websocket-0.14.2 lib/startback/websocket/hub/builder.rb
startback-websocket-0.14.1 lib/startback/websocket/hub/builder.rb