Class: Startback::Websocket::Hub::Builder
- Inherits:
-
Object
- Object
- Startback::Websocket::Hub::Builder
- Defined in:
- lib/startback/websocket/hub/builder.rb
Instance Method Summary collapse
- #command(name, &bl) ⇒ Object
-
#initialize(context, default_handler = nil, *bl_args, &bl) ⇒ Builder
constructor
A new instance of Builder.
- #room(name, &bl) ⇒ Object
- #to_handler ⇒ Object
- #to_websocket_app ⇒ Object
- #use(middleware, *opts) ⇒ Object
Constructor Details
#initialize(context, default_handler = nil, *bl_args, &bl) ⇒ Builder
Returns a new instance of Builder.
7 8 9 10 11 12 13 14 15 |
# File 'lib/startback/websocket/hub/builder.rb', line 7 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 |
Instance Method Details
#command(name, &bl) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/startback/websocket/hub/builder.rb', line 21 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 |
#room(name, &bl) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/startback/websocket/hub/builder.rb', line 28 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 |
#to_handler ⇒ Object
39 40 41 42 43 44 45 46 |
# File 'lib/startback/websocket/hub/builder.rb', line 39 def to_handler default_handler = @default_handler || proc {} @middlewares .reverse .reduce(default_handler) do |handler, mw| mw.call(handler) end end |
#to_websocket_app ⇒ Object
48 49 50 |
# File 'lib/startback/websocket/hub/builder.rb', line 48 def to_websocket_app App.new(@context, @rooms, to_handler) end |
#use(middleware, *opts) ⇒ Object
17 18 19 |
# File 'lib/startback/websocket/hub/builder.rb', line 17 def use(middleware, *opts) @middlewares << proc { |app| middleware.new(app, *opts) } end |