2.0.5
This commit is contained in:
parent
1c5e572688
commit
555b028ac1
15 changed files with 37 additions and 83 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -71,3 +71,7 @@ crashlytics.properties
|
||||||
crashlytics-build.properties
|
crashlytics-build.properties
|
||||||
fabric.properties
|
fabric.properties
|
||||||
|
|
||||||
|
|
||||||
|
.idea
|
||||||
|
.dart_tool
|
||||||
|
*.iml
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="WEB_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.pub" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="Dart SDK" level="project" />
|
|
||||||
<orderEntry type="library" name="Dart Packages" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
|
@ -1,28 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="JavaScriptSettings">
|
<component name="ProjectRootManager">
|
||||||
<option name="languageLevel" value="ES6" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
|
||||||
<component name="ProjectInspectionProfilesVisibleTreeState">
|
|
||||||
<entry key="Project Default">
|
|
||||||
<profile-state>
|
|
||||||
<expanded-state>
|
|
||||||
<State>
|
|
||||||
<id />
|
|
||||||
</State>
|
|
||||||
<State>
|
|
||||||
<id>General</id>
|
|
||||||
</State>
|
|
||||||
<State>
|
|
||||||
<id>XPath</id>
|
|
||||||
</State>
|
|
||||||
</expanded-state>
|
|
||||||
<selected-state>
|
|
||||||
<State>
|
|
||||||
<id>AngularJS</id>
|
|
||||||
</State>
|
|
||||||
</selected-state>
|
|
||||||
</profile-state>
|
|
||||||
</entry>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -2,7 +2,7 @@
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<modules>
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/angel_route.iml" filepath="$PROJECT_DIR$/.idea/angel_route.iml" />
|
<module fileurl="file://$PROJECT_DIR$/route.iml" filepath="$PROJECT_DIR$/route.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -1,7 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="All Tests" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true">
|
|
||||||
<option name="filePath" value="$PROJECT_DIR$/test" />
|
|
||||||
<option name="scope" value="FOLDER" />
|
|
||||||
<method />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Navigate Tests" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true">
|
|
||||||
<option name="filePath" value="$PROJECT_DIR$/test/navigate_test.dart" />
|
|
||||||
<method />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Params Tests" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true">
|
|
||||||
<option name="filePath" value="$PROJECT_DIR$/test/params_test.dart" />
|
|
||||||
<method />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Server Tests" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true">
|
|
||||||
<option name="filePath" value="$PROJECT_DIR$/test/server_test.dart" />
|
|
||||||
<method />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
|
@ -1 +1,4 @@
|
||||||
language: dart
|
language: dart
|
||||||
|
dart:
|
||||||
|
- dev
|
||||||
|
- stable
|
2
CHANGELOG.md
Normal file
2
CHANGELOG.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# 2.0.5
|
||||||
|
* Patch to work with `combinator@1.0.0`.
|
|
@ -1,9 +1,11 @@
|
||||||
part of angel_route.src.router;
|
part of angel_route.src.router;
|
||||||
|
|
||||||
class RouteGrammar {
|
class RouteGrammar {
|
||||||
|
static final RegExp rgx = new RegExp(r'\((.+)\)');
|
||||||
static final Parser<String> notSlash =
|
static final Parser<String> notSlash =
|
||||||
match(new RegExp(r'[^/]+')).value((r) => r.span.text);
|
match(new RegExp(r'[^/]+')).value((r) => r.span.text);
|
||||||
static final Parser<RegExp> regExp = new _RegExpParser();
|
static final Parser<RegExp> regExp =
|
||||||
|
match(rgx).map((r) => new RegExp(r.scanner.lastMatch[1]));
|
||||||
static final Parser<String> parameterName =
|
static final Parser<String> parameterName =
|
||||||
match(new RegExp(r':([A-Za-z0-9_]+)'))
|
match(new RegExp(r':([A-Za-z0-9_]+)'))
|
||||||
.value((r) => r.span.text.substring(1));
|
.value((r) => r.span.text.substring(1));
|
||||||
|
@ -32,6 +34,7 @@ class RouteGrammar {
|
||||||
.surroundedBy(match('/').star().opt());
|
.surroundedBy(match('/').star().opt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
class _RegExpParser extends Parser<RegExp> {
|
class _RegExpParser extends Parser<RegExp> {
|
||||||
static final RegExp rgx = new RegExp(r'\((.+)\)');
|
static final RegExp rgx = new RegExp(r'\((.+)\)');
|
||||||
|
|
||||||
|
@ -41,7 +44,7 @@ class _RegExpParser extends Parser<RegExp> {
|
||||||
return new ParseResult(this, true, [],
|
return new ParseResult(this, true, [],
|
||||||
span: scanner.lastSpan, value: new RegExp(scanner.lastMatch[1]));
|
span: scanner.lastSpan, value: new RegExp(scanner.lastMatch[1]));
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
class RouteDefinition {
|
class RouteDefinition {
|
||||||
final List<RouteSegment> segments;
|
final List<RouteSegment> segments;
|
||||||
|
@ -66,6 +69,7 @@ class RouteDefinition {
|
||||||
|
|
||||||
abstract class RouteSegment {
|
abstract class RouteSegment {
|
||||||
Parser<Map<String, dynamic>> compile(bool isLast);
|
Parser<Map<String, dynamic>> compile(bool isLast);
|
||||||
|
|
||||||
Parser<Map<String, dynamic>> compileNext(
|
Parser<Map<String, dynamic>> compileNext(
|
||||||
Parser<Map<String, dynamic>> p, bool isLast);
|
Parser<Map<String, dynamic>> p, bool isLast);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Route {
|
||||||
: _routeDefinition = RouteGrammar.routeDefinition
|
: _routeDefinition = RouteGrammar.routeDefinition
|
||||||
.parse(new SpanScanner(path.replaceAll(_straySlashes, '')))
|
.parse(new SpanScanner(path.replaceAll(_straySlashes, '')))
|
||||||
.value {
|
.value {
|
||||||
if (_routeDefinition.segments.isEmpty) _parser = match('').value((r) => {});
|
if (_routeDefinition?.segments?.isNotEmpty != true) _parser = match('').value((r) => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
factory Route.join(Route a, Route b) {
|
factory Route.join(Route a, Route b) {
|
||||||
|
|
|
@ -10,12 +10,12 @@ part 'symlink_route.dart';
|
||||||
part 'route.dart';
|
part 'route.dart';
|
||||||
part 'routing_result.dart';
|
part 'routing_result.dart';
|
||||||
|
|
||||||
final RegExp _param = new RegExp(r':([A-Za-z0-9_]+)(\((.+)\))?');
|
/*final RegExp _param = new RegExp(r':([A-Za-z0-9_]+)(\((.+)\))?');
|
||||||
final RegExp _rgxEnd = new RegExp(r'\$+$');
|
final RegExp _rgxEnd = new RegExp(r'\$+$');
|
||||||
final RegExp _rgxStart = new RegExp(r'^\^+');
|
final RegExp _rgxStart = new RegExp(r'^\^+');
|
||||||
final RegExp _rgxStraySlashes =
|
final RegExp _rgxStraySlashes =
|
||||||
new RegExp(r'(^((\\+/)|(/))+)|(((\\+/)|(/))+$)');
|
new RegExp(r'(^((\\+/)|(/))+)|(((\\+/)|(/))+$)');
|
||||||
final RegExp _slashDollar = new RegExp(r'/+\$');
|
final RegExp _slashDollar = new RegExp(r'/+\$');*/
|
||||||
final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
|
final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
|
||||||
|
|
||||||
/// An abstraction over complex [Route] trees. Use this instead of the raw API. :)
|
/// An abstraction over complex [Route] trees. Use this instead of the raw API. :)
|
||||||
|
|
10
pubspec.yaml
10
pubspec.yaml
|
@ -1,13 +1,17 @@
|
||||||
name: angel_route
|
name: angel_route
|
||||||
description: A powerful, isomorphic routing library for Dart.
|
description: A powerful, isomorphic routing library for Dart.
|
||||||
version: 2.0.4
|
version: 2.0.5
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/angel_route
|
homepage: https://github.com/angel-dart/angel_route
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=1.19.0"
|
sdk: ">=1.19.0 <3.0.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
combinator: ^1.0.0-beta
|
combinator: ^1.0.0
|
||||||
|
meta: ^1.0.0
|
||||||
|
path: ^1.0.0
|
||||||
|
string_scanner: ^1.0.0
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
browser: ">=0.10.0 < 0.11.0"
|
browser: ">=0.10.0 < 0.11.0"
|
||||||
|
dart2_constant: ^1.0.0
|
||||||
http: ">=0.11.3 <0.12.0"
|
http: ">=0.11.3 <0.12.0"
|
||||||
test: ">=0.12.15 <0.13.0"
|
test: ">=0.12.15 <0.13.0"
|
|
@ -1,6 +1,6 @@
|
||||||
import 'dart:convert';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:angel_route/angel_route.dart';
|
import 'package:angel_route/angel_route.dart';
|
||||||
|
import 'package:dart2_constant/convert.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ main() {
|
||||||
|
|
||||||
router.group('/people', (router) {
|
router.group('/people', (router) {
|
||||||
router.get('/', (req, res) {
|
router.get('/', (req, res) {
|
||||||
res.write(JSON.encode(people));
|
res.write(json.encode(people));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@ main() {
|
||||||
router.get('/', (req, res) {
|
router.get('/', (req, res) {
|
||||||
// In a real application, we would take the param,
|
// In a real application, we would take the param,
|
||||||
// but not here...
|
// but not here...
|
||||||
res.write(JSON.encode(people.first));
|
res.write(json.encode(people.first));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/name', (req, res) {
|
router.get('/name', (req, res) {
|
||||||
// In a real application, we would take the param,
|
// In a real application, we would take the param,
|
||||||
// but not here...
|
// but not here...
|
||||||
res.write(JSON.encode(people.first['name']));
|
res.write(json.encode(people.first['name']));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -76,7 +76,7 @@ main() {
|
||||||
client = new http.Client();
|
client = new http.Client();
|
||||||
|
|
||||||
router.dumpTree();
|
router.dumpTree();
|
||||||
server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 0);
|
server = await HttpServer.bind('127.0.0.1', 0);
|
||||||
url = 'http://${server.address.address}:${server.port}';
|
url = 'http://${server.address.address}:${server.port}';
|
||||||
|
|
||||||
server.listen((req) async {
|
server.listen((req) async {
|
||||||
|
@ -129,20 +129,20 @@ main() {
|
||||||
test('root', () async {
|
test('root', () async {
|
||||||
final res = await client.get('$url/people');
|
final res = await client.get('$url/people');
|
||||||
print('Response: ${res.body}');
|
print('Response: ${res.body}');
|
||||||
expect(JSON.decode(res.body), equals(people));
|
expect(json.decode(res.body), equals(people));
|
||||||
});
|
});
|
||||||
|
|
||||||
group('param', () {
|
group('param', () {
|
||||||
test('root', () async {
|
test('root', () async {
|
||||||
final res = await client.get('$url/people/0');
|
final res = await client.get('$url/people/0');
|
||||||
print('Response: ${res.body}');
|
print('Response: ${res.body}');
|
||||||
expect(JSON.decode(res.body), equals(people.first));
|
expect(json.decode(res.body), equals(people.first));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('path', () async {
|
test('path', () async {
|
||||||
final res = await client.get('$url/people/0/name');
|
final res = await client.get('$url/people/0/name');
|
||||||
print('Response: ${res.body}');
|
print('Response: ${res.body}');
|
||||||
expect(JSON.decode(res.body), equals(people.first['name']));
|
expect(json.decode(res.body), equals(people.first['name']));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue