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