Sha256: b5cfc2dd2f1d37db867f5a3a69590170397a27ccccca627b9475833ee4184cec

Contents?: true

Size: 963 Bytes

Versions: 1

Compression:

Stored size: 963 Bytes

Contents

module Galago
  class Router
    class Path

      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-]+)')
        Regexp.new("^#{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.0.2 lib/galago/router/path.rb