Sha256: ae2733bdde4a0f06d8759dc4b8790e332632c30ef9b38c9bb66f510191c1b3c7

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'mustermann'

module Angelo

  module Mustermann

    # hrm, sneaky
    #
    def self.included base
      base.extend ClassMethods
      base.class_eval do
        def_delegator :@responder, :mustermann
      end

      [Responder, WebsocketResponder].each do |res|
        res.class_eval do
          attr_accessor :mustermann
        end
      end
    end

    module ClassMethods

      HTTPABLE.each do |m|
        define_method m do |path, &block|
          path = ::Mustermann.new path
          routes[m][path] = Responder.new &block
        end
      end

      def websocket path, &block
        path = ::Mustermann.new path
        super path, &block
      end

      def routes
        @routes ||= {}
        ROUTABLE.each do |m|
          @routes[m] ||= RouteMap.new
        end
        @routes
      end

    end

    def params
      @params ||= super.merge mustermann.params(request.path)
    end

    class RouteMap < Hash
      def [] route
        responder = nil
        mustermann = keys.select {|k| k.match(route)}.first
        if mustermann
          responder = fetch mustermann
          responder.mustermann = mustermann
        end
        responder
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
angelo-0.1.8 lib/angelo/mustermann.rb