lib/rack/app/router/dynamic.rb in rack-app-5.10.0 vs lib/rack/app/router/dynamic.rb in rack-app-5.10.1

- old
+ new

@@ -116,37 +116,35 @@ ::Rack::App::Constants::HTTP::METHODS end def get_app(env) find_by_path_infos(env) do |path_info| - c = fetch_context(get_request_method(env), path_info) - - if c.is_a?(Hash) - c[:app] - else - nil - end + fetch_context(get_request_method(env), path_info) end end def fetch_context(request_method, path_info) + current_cluster = main_cluster(request_method) - last_mounted_directory = nil last_mounted_app = nil - current_cluster = main_cluster(request_method) - - path_info.split('/').each do |path_part| + last_mounted_directory = nil + path_parts = path_info.split('/') + path_parts << '' if path_parts.empty? + path_parts.each do |path_part| + last_mounted_directory = current_cluster[MOUNTED_DIRECTORY] || last_mounted_directory last_mounted_app = current_cluster[MOUNTED_APPLICATION] || last_mounted_app current_cluster = current_cluster[path_part] || current_cluster[DYNAMIC_REQUEST_PATH_PART] last_mounted_directory = (current_cluster || {})[MOUNTED_DIRECTORY] || last_mounted_directory last_mounted_app = (current_cluster || {})[MOUNTED_APPLICATION] || last_mounted_app if current_cluster.nil? + + if last_mounted_directory current_cluster = last_mounted_directory break elsif last_mounted_app @@ -159,10 +157,14 @@ end end end - return current_cluster + return extract_app(current_cluster) || extract_app(last_mounted_app) || extract_app(last_mounted_directory) + end + + def extract_app(hash) + hash.is_a?(Hash) ? hash[:app] : nil end end