Sha256: 370e242f1b0dc3245ac7ca366c9b03cb0c79b9dd96d44bdefe28a809b38f8007

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module Galago
  class Router
    class Path

      REPEATED_SLASH = /\/{1,}/
      TRAILING_SLASH = /\/$/

      def self.join(*paths)
        path = "/#{paths.join('/')}"
        path = path.gsub(REPEATED_SLASH, '/')
        path = path.gsub(TRAILING_SLASH, '')
        path
      end

      def initialize(path)
        @path = path.to_s
      end

      def recognizes?(request_path)
        request_path =~ regex
      end

      def named_parameters
        @path_parameters ||= @path.scan(/\:(\w+)/).flatten
      end

      def add_path_params_to_env(env)
        request = Rack::Request.new(env)

        if path_params = identify_params_in_path(request.path)
          path_params.each { |key, value| request.update_param(key, value) }
        end
      end

      def to_s
        @path
      end

      private

      def regex
        @regex_path ||= convert_path_to_regex(@path)
      end

      def convert_path_to_regex(path)
        regexp = path.to_s.gsub(/\:\w+/, '([\w-]+)')
        /\A#{regexp}$/
      end

      def identify_params_in_path(path)
        if match = regex.match(path)
          named_parameters.zip(match.captures)
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
galago-router-0.1.1 lib/galago/router/path.rb