class Fluffle::Handlers::Dispatcher

Lightweight DSL for defining handler blocks for a given message

Examples

dispatcher = Fluffle::Handlers::Dispatcher.new
dispatcher.handle('upcase') { |str| str.upcase }

# Also exposed through the `Fluffle::Server#drain` method
server.drain do |dispatcher|
  dispatcher.handle('upcase') { |str| str.upcase }
end

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/fluffle/handlers/dispatcher.rb, line 16
def initialize
  @routes = []

  yield self if block_given?
end

Public Instance Methods

call(method:, params:, **_) click to toggle source
# File lib/fluffle/handlers/dispatcher.rb, line 28
def call(method:, params:,  **_)
  @routes.each do |(pattern, block)|
    next if pattern != method

    return block.call(*params)
  end

  raise NoMethodError, "Undefined method '#{method}'"
end
handle(pattern, &block) click to toggle source

pattern - Right now just a String that 1-to-1 matches the `method` block - Block to call with the `params`

# File lib/fluffle/handlers/dispatcher.rb, line 24
def handle(pattern, &block)
  @routes << [pattern, block]
end