Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3662)

Unified Diff: lib/server.dart

Issue 14267030: Added support for http methods when mounting routes. (Closed) Base URL: git@github.com:dart-lang/route.git@master
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/server_test.dart » ('j') | test/server_test.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/server.dart
diff --git a/lib/server.dart b/lib/server.dart
index 124c64b6fe41ecfc548e3ed4dee4437bfb5ec4a0..373a8a27a8a864af4de75f44845b546adea4683a 100644
--- a/lib/server.dart
+++ b/lib/server.dart
@@ -51,9 +51,9 @@ typedef Future<bool> Filter(HttpRequest request);
class Router {
final Stream<HttpRequest> _incoming;
- final Map<Pattern, StreamController> _controllers =
- new LinkedHashMap<Pattern, StreamController>();
-
+ final Map<RequestPattern, StreamController> _controllers =
justinfagnani 2013/04/19 19:20:51 Make _controllers a List. See comment below.
adambender 2013/04/19 19:43:11 Done.
+ new LinkedHashMap<RequestPattern, StreamController>();
+
final Map<Pattern, Filter> _filters = new LinkedHashMap<Pattern, Filter>();
final StreamController<HttpRequest> _defaultController =
@@ -71,12 +71,12 @@ class Router {
* Request whose URI matches [url] are sent to the stream created by this
* method, and not sent to any other router streams.
justinfagnani 2013/04/19 19:20:51 Add docs for [method]
adambender 2013/04/19 19:43:11 Done.
*/
- Stream<HttpRequest> serve(Pattern url) {
+ Stream<HttpRequest> serve(Pattern url, {String method}) {
var controller = new StreamController<HttpRequest>();
- _controllers[url] = controller;
+ _controllers[new RequestPattern(url, method:method)] = controller;
return controller.stream;
}
-
+
/**
* A [Filter] returns a [Future<bool>] that tells the router whether to apply
* the remaining filters and send requests to the streams created by [serve].
@@ -104,9 +104,9 @@ class Router {
}).then((_) {
if (cont) {
bool handled = false;
- for (Pattern pattern in _controllers.keys) {
- if (matchesFull(pattern, req.uri.path)) {
- _controllers[pattern].add(req);
+ for (RequestPattern reqPattern in _controllers.keys) {
justinfagnani 2013/04/19 19:20:51 if we want to be even more Darty, we can use Itera
adambender 2013/04/19 19:43:11 Done.
+ if (reqPattern.matches(req)) {
+ _controllers[reqPattern].add(req);
handled = true;
break;
}
@@ -128,3 +128,13 @@ void send404(HttpRequest req) {
req.response.write("Not Found");
req.response.close();
}
+
+class RequestPattern{
justinfagnani 2013/04/19 19:20:51 On the client-side I have a similar class called R
adambender 2013/04/19 19:43:11 Done.
+ final Pattern url;
+ final String method;
+ RequestPattern(this.url, {this.method});
+
+ bool matches(HttpRequest request){
justinfagnani 2013/04/19 19:20:51 space before {
justinfagnani 2013/04/19 19:20:51 you can use the "fat arrow syntax" here
adambender 2013/04/19 19:43:11 Done.
adambender 2013/04/19 19:43:11 Done.
+ return matchesFull(url, request.uri.path) && (method == null || request.method.toUpperCase() == method);
justinfagnani 2013/04/19 19:20:51 we're using an 80 col limit
adambender 2013/04/19 19:43:11 Done.
+ }
+}
« no previous file with comments | « no previous file | test/server_test.dart » ('j') | test/server_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698