This commit is contained in:
thosakwe 2017-01-13 10:33:35 -05:00
parent a39ee0779a
commit d5ac07d399
5 changed files with 73 additions and 2 deletions

1
.travis.yml Normal file
View file

@ -0,0 +1 @@
language: dart

View file

@ -1,4 +1,7 @@
# shelf
[![version 1.0.0](https://img.shields.io/badge/pub-v1.0.0-brightgreen.svg)](https://pub.dartlang.org/packages/angel_shelf)
[![build status](https://travis-ci.org/angel-dart/shelf.svg)](https://travis-ci.org/angel-dart/shelf)
Shelf interop with Angel. Will be deprecated by v2.0.0.
By version 2 of Angel, I will migrate the server to run on top of `shelf`.
@ -23,8 +26,8 @@ main() async {
// Re-route all other traffic to an
// existing shelf/Redstone application.
app.mount('/', embedShelf(
shelf.Pipeline()
app.after.add(embedShelf(
new shelf.Pipeline()
.addMiddleware(shelf.logRequests())
.addHandler(_echoRequest)
));

13
lib/angel_shelf.dart Normal file
View file

@ -0,0 +1,13 @@
import 'package:angel_framework/angel_framework.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
/// Simply passes an incoming request to a `shelf` handler.
RequestHandler embedShelf(shelf.Handler handler) {
return (RequestContext req, ResponseContext res) async {
res
..willCloseItself = true
..end();
io.handleRequest(req.io, handler);
};
}

13
pubspec.yaml Normal file
View file

@ -0,0 +1,13 @@
name: angel_shelf
description: Shelf interop with Angel. Will be deprecated by v2.0.0.
version: 1.0.0
author: Tobe O <thosakwe@gmail.com>
homepage: https://github.com/angel-dart/shelf
environment:
sdk: ">=1.19.0"
dependencies:
angel_framework: ^1.0.0-dev
shelf: ^0.6.0
dev_dependencies:
angel_test: ^1.0.0-dev
test: ^0.12.0

41
test/all_test.dart Normal file
View file

@ -0,0 +1,41 @@
import 'dart:convert';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_shelf/angel_shelf.dart';
import 'package:angel_test/angel_test.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
import 'package:test/test.dart';
main() async {
Angel app;
TestClient client;
setUp(() async {
var handler = new shelf.Pipeline()
.addMiddleware(shelf.logRequests())
.addHandler(_echoRequest);
app = new Angel();
app.get('/angel', 'Angel');
app.after.add(embedShelf(handler));
client = await connectTo(app);
});
tearDown(() => client.close());
test('expose angel side', () async {
var response = await client.get('/angel');
expect(JSON.decode(response.body), equals('Angel'));
});
test('expose shelf side', () async {
var response = await client.get('/foo');
expect(response, hasStatus(200));
expect(response.body, equals('Request for "foo"'));
});
}
shelf.Response _echoRequest(shelf.Request request) {
return new shelf.Response.ok('Request for "${request.url}"');
}