42
This commit is contained in:
parent
c771e82ad3
commit
f00705d2d0
5 changed files with 78 additions and 55 deletions
|
@ -2,11 +2,7 @@
|
|||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7b89ff1e-1260-4dcf-9c3d-345de0471ea1" name="Default" comment="">
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/runConfigurations/DI_Tests.xml" afterPath="$PROJECT_DIR$/.idea/runConfigurations/DI_Tests.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" afterPath="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/controller.dart" afterPath="$PROJECT_DIR$/lib/src/http/controller.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/memory_service.dart" afterPath="$PROJECT_DIR$/lib/src/http/memory_service.dart" />
|
||||
</list>
|
||||
<ignored path="$PROJECT_DIR$/.tmp/" />
|
||||
<ignored path="$PROJECT_DIR$/temp/" />
|
||||
|
@ -62,8 +58,8 @@
|
|||
<file leaf-file-name="server.dart" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="175">
|
||||
<caret line="237" column="42" lean-forward="true" selection-start-line="237" selection-start-column="42" selection-end-line="237" selection-end-column="42" />
|
||||
<state relative-caret-position="205">
|
||||
<caret line="239" column="43" lean-forward="false" selection-start-line="239" selection-start-column="43" selection-end-line="239" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#38#58#0" expanded="true" />
|
||||
<marker date="1483149636000" expanded="true" signature="14571:14573" ph="{...}" />
|
||||
|
@ -384,7 +380,7 @@
|
|||
<workItem from="1481377809918" duration="1319000" />
|
||||
<workItem from="1481389675241" duration="158000" />
|
||||
<workItem from="1481390924053" duration="19000" />
|
||||
<workItem from="1483149948840" duration="913000" />
|
||||
<workItem from="1483149948840" duration="930000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Re-designed exception">
|
||||
<created>1481237183504</created>
|
||||
|
@ -421,7 +417,14 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1483150316138</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="6" />
|
||||
<task id="LOCAL-00006" summary="I love stack overflows!!!">
|
||||
<created>1483150975010</created>
|
||||
<option name="number" value="00006" />
|
||||
<option name="presentableId" value="LOCAL-00006" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1483150975010</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="7" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TestHistory">
|
||||
|
@ -457,7 +460,7 @@
|
|||
</history-entry>
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="3597000" />
|
||||
<option name="totallyTimeSpent" value="3614000" />
|
||||
</component>
|
||||
<component name="TodoView">
|
||||
<todo-panel id="selected-file">
|
||||
|
@ -479,7 +482,7 @@
|
|||
<window_info id="Dart Analysis" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32802936" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="ANTLR Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32925338" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32925338" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32680538" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
|
@ -506,7 +509,8 @@
|
|||
<MESSAGE value="Fixed todo" />
|
||||
<MESSAGE value="Done???" />
|
||||
<MESSAGE value="findExpose" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="findExpose" />
|
||||
<MESSAGE value="I love stack overflows!!!" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="I love stack overflows!!!" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
|
@ -881,8 +885,8 @@
|
|||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="175">
|
||||
<caret line="237" column="42" lean-forward="true" selection-start-line="237" selection-start-column="42" selection-end-line="237" selection-end-column="42" />
|
||||
<state relative-caret-position="205">
|
||||
<caret line="239" column="43" lean-forward="false" selection-start-line="239" selection-start-column="43" selection-end-line="239" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#38#58#0" expanded="true" />
|
||||
<marker date="1483149636000" expanded="true" signature="14571:14573" ph="{...}" />
|
||||
|
|
18
README.md
18
README.md
|
@ -1,6 +1,22 @@
|
|||
# angel_framework
|
||||
|
||||
[![pub 1.0.0-dev.40](https://img.shields.io/badge/pub-1.0.0--dev.40-red.svg)](https://pub.dartlang.org/packages/angel_framework)
|
||||
[![pub 1.0.0-dev.42](https://img.shields.io/badge/pub-1.0.0--dev.42-red.svg)](https://pub.dartlang.org/packages/angel_framework)
|
||||
[![build status](https://travis-ci.org/angel-dart/framework.svg)](https://travis-ci.org/angel-dart/framework)
|
||||
|
||||
Core libraries for the Angel Framework.
|
||||
|
||||
```dart
|
||||
import 'package:angel_framework/angel_framework.dart';
|
||||
|
||||
main() async {
|
||||
var app = new Angel();
|
||||
|
||||
app
|
||||
..get('/hello', (req, res) {
|
||||
res.write('world!');
|
||||
})
|
||||
..post('/date', () => new DateTime.now().toString());
|
||||
|
||||
await app.startServer();
|
||||
}
|
||||
```
|
|
@ -45,7 +45,6 @@ class Controller {
|
|||
}
|
||||
|
||||
var routable = new Routable(debug: debug);
|
||||
|
||||
app.use(exposeDecl.path, routable);
|
||||
TypeMirror typeMirror = reflectType(this.runtimeType);
|
||||
String name = exposeDecl.as?.isNotEmpty == true
|
||||
|
@ -79,21 +78,23 @@ class Controller {
|
|||
|
||||
var reflectedMethod = instanceMirror.getField(methodName).reflectee;
|
||||
var middleware = []..addAll(handlers)..addAll(exposeDecl.middleware);
|
||||
String name = exposeDecl.as?.isNotEmpty == true
|
||||
? exposeDecl.as
|
||||
: MirrorSystem.getName(methodName);
|
||||
|
||||
// Check if normal
|
||||
if (method.parameters.length == 2 &&
|
||||
method.parameters[0].type.reflectedType == RequestContext &&
|
||||
method.parameters[1].type.reflectedType == ResponseContext) {
|
||||
// Create a regular route
|
||||
routable.addRoute(exposeDecl.method, exposeDecl.path, reflectedMethod,
|
||||
middleware: middleware);
|
||||
routeMappings[name] = routable
|
||||
.addRoute(exposeDecl.method, exposeDecl.path, (req, res) async {
|
||||
var result = await reflectedMethod(req, res);
|
||||
return result is RequestHandler ? await result(req, res) : result;
|
||||
}, middleware: middleware);
|
||||
return;
|
||||
}
|
||||
|
||||
String name = exposeDecl.as?.isNotEmpty == true
|
||||
? exposeDecl.as
|
||||
: MirrorSystem.getName(methodName);
|
||||
|
||||
routeMappings[name] = routable.addRoute(
|
||||
exposeDecl.method,
|
||||
exposeDecl.path,
|
||||
|
@ -119,40 +120,43 @@ RequestHandler handleContained(handler, InjectionRequest injection) {
|
|||
List args = [];
|
||||
|
||||
void inject(requirement) {
|
||||
for (var requirement in injection.required) {
|
||||
if (requirement == RequestContext) {
|
||||
args.add(req);
|
||||
} else if (requirement == ResponseContext) {
|
||||
args.add(res);
|
||||
} else if (requirement is String) {
|
||||
if (req.params.containsKey(requirement)) {} else if (req.injections
|
||||
.containsKey(requirement))
|
||||
args.add(req.injections[requirement]);
|
||||
else {
|
||||
throw new ArgumentError(
|
||||
"Cannot resolve parameter '$requirement' within handler.");
|
||||
}
|
||||
if (requirement == RequestContext) {
|
||||
args.add(req);
|
||||
} else if (requirement == ResponseContext) {
|
||||
args.add(res);
|
||||
} else if (requirement is String) {
|
||||
if (req.params.containsKey(requirement)) {
|
||||
args.add(req.params[requirement]);
|
||||
} else if (requirement is List) {
|
||||
for (var child in requirement) {
|
||||
try {
|
||||
inject(child);
|
||||
break;
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
} else if (requirement is Type && requirement != dynamic) {
|
||||
args.add(
|
||||
req.app.container.make(requirement, injecting: req.injections));
|
||||
} else {
|
||||
} else if (req.injections.containsKey(requirement))
|
||||
args.add(req.injections[requirement]);
|
||||
else {
|
||||
throw new ArgumentError(
|
||||
'$requirement cannot be injected into a request handler.');
|
||||
"Cannot resolve parameter '$requirement' within handler.");
|
||||
}
|
||||
} else if (requirement is List &&
|
||||
requirement.length == 2 &&
|
||||
requirement.first is String &&
|
||||
requirement.last is Type) {
|
||||
String key = requirement.first;
|
||||
Type type = requirement.last;
|
||||
|
||||
if (req.params.containsKey(key) || req.injections.containsKey(key)) {
|
||||
inject(key);
|
||||
} else
|
||||
inject(type);
|
||||
} else if (requirement is Type && requirement != dynamic) {
|
||||
if (req.injections.containsKey(requirement))
|
||||
args.add(req.injections[requirement]);
|
||||
else
|
||||
args.add(req.app.container.make(requirement));
|
||||
} else {
|
||||
throw new ArgumentError(
|
||||
'$requirement cannot be injected into a request handler.');
|
||||
}
|
||||
}
|
||||
|
||||
injection.required.forEach(inject);
|
||||
return Function.apply(handler, args);
|
||||
var result = Function.apply(handler, args);
|
||||
return result is Future ? await result : result;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -321,10 +321,9 @@ class Angel extends AngelBase {
|
|||
/// Runs with DI, and *always* reflects. Prefer [runContained].
|
||||
Future runReflected(
|
||||
Function handler, RequestContext req, ResponseContext res) async {
|
||||
var injection = preInjection(handler);
|
||||
|
||||
_preContained[handler] = injection;
|
||||
return handleContained(handler, injection);
|
||||
var h =
|
||||
handleContained(handler, _preContained[handler] = preInject(handler));
|
||||
return await h(req, res);
|
||||
// return await closureMirror.apply(args).reflectee;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: angel_framework
|
||||
version: 1.0.0-dev.41
|
||||
version: 1.0.0-dev.42
|
||||
description: Core libraries for the Angel framework.
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
homepage: https://github.com/angel-dart/angel_framework
|
||||
|
|
Loading…
Reference in a new issue