Sha256: c3d75bcd72ee4bc7525a74d27e1fb1b2ef1c9a15a977cf60a6f739b84cf96edc

Contents?: true

Size: 1.3 KB

Versions: 6

Compression:

Stored size: 1.3 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

      def initialize
        @hash = Hash.new
      end

      def []= route, responder
        @hash[route] = responder
      end

      def [] route
        responder = nil
        if mustermann = @hash.keys.select {|k| k.match(route)}.first
          responder = @hash.fetch mustermann
          responder.mustermann = mustermann
        end
        responder
      end
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
angelo-0.1.14 lib/angelo/mustermann.rb
angelo-0.1.13 lib/angelo/mustermann.rb
angelo-0.1.12 lib/angelo/mustermann.rb
angelo-0.1.11 lib/angelo/mustermann.rb
angelo-0.1.10 lib/angelo/mustermann.rb
angelo-0.1.9 lib/angelo/mustermann.rb