2.0.0
This commit is contained in:
parent
57f212eecc
commit
62d29b45fd
8 changed files with 91 additions and 28 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -54,3 +54,5 @@ com_crashlytics_export_strings.xml
|
||||||
crashlytics.properties
|
crashlytics.properties
|
||||||
crashlytics-build.properties
|
crashlytics-build.properties
|
||||||
fabric.properties
|
fabric.properties
|
||||||
|
|
||||||
|
.dart_tool
|
2
CHANGELOG.md
Normal file
2
CHANGELOG.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# 2.0.0
|
||||||
|
* Angel 2 + Dart 2 updates.
|
|
@ -46,10 +46,10 @@ The `renderHtml` function does all the magic for you.
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Angel app) async {
|
||||||
// Wire it up!
|
// Wire it up!
|
||||||
app.before.add(renderHtml());
|
app.fallback(renderHtml());
|
||||||
|
|
||||||
// You can pass a custom StringRenderer if you need more control over the output.
|
// You can pass a custom StringRenderer if you need more control over the output.
|
||||||
app.before.add(renderHtml(renderer: new StringRenderer(html5: false)));
|
app.fallback(renderHtml(renderer: new StringRenderer(html5: false)));
|
||||||
|
|
||||||
app.get('/greet/:name', (RequestContext req) {
|
app.get('/greet/:name', (RequestContext req) {
|
||||||
return html(lang: 'en', c: [
|
return html(lang: 'en', c: [
|
||||||
|
@ -76,7 +76,7 @@ client doesn't accept `*/*` or `text/html`.
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Angel app) async {
|
||||||
// Wire it up!
|
// Wire it up!
|
||||||
app.before.add(renderHtml(enforceAcceptHeader: true));
|
app.fallback(renderHtml(enforceAcceptHeader: true));
|
||||||
|
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
|
|
4
analysis_options.yaml
Normal file
4
analysis_options.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
include: package:pedantic/analysis_options.yaml
|
||||||
|
analyzer:
|
||||||
|
strong-mode:
|
||||||
|
implicit-casts: false
|
46
example/main.dart
Normal file
46
example/main.dart
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:angel_framework/http.dart';
|
||||||
|
import 'package:angel_html/angel_html.dart';
|
||||||
|
import 'package:html_builder/elements.dart';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
|
main() async {
|
||||||
|
var app = Angel(), http = AngelHttp(app);
|
||||||
|
app.logger = Logger('angel_html')
|
||||||
|
..onRecord.listen((rec) {
|
||||||
|
print(rec);
|
||||||
|
if (rec.error != null) print(rec.error);
|
||||||
|
if (rec.stackTrace != null) print(rec.stackTrace);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.fallback(renderHtml());
|
||||||
|
|
||||||
|
app.get('/html', (req, res) {
|
||||||
|
return html(c: [
|
||||||
|
head(c: [
|
||||||
|
title(c: [text('ok')])
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get(
|
||||||
|
'/strict',
|
||||||
|
chain([
|
||||||
|
renderHtml(
|
||||||
|
enforceAcceptHeader: true,
|
||||||
|
renderer: StringRenderer(
|
||||||
|
doctype: null,
|
||||||
|
pretty: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(req, res) {
|
||||||
|
return div(c: [text('strict')]);
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
|
||||||
|
app.fallback((req, res) => throw AngelHttpException.notFound());
|
||||||
|
|
||||||
|
await http.startServer('127.0.0.1', 3000);
|
||||||
|
print('Listening at ${http.uri}');
|
||||||
|
}
|
|
@ -7,8 +7,7 @@ import 'package:html_builder/html_builder.dart';
|
||||||
/// You can provide a custom [renderer]. The default renders minified HTML5 pages.
|
/// You can provide a custom [renderer]. The default renders minified HTML5 pages.
|
||||||
///
|
///
|
||||||
/// Set [enforceAcceptHeader] to `true` to throw a `406 Not Acceptable` if the client doesn't accept HTML responses.
|
/// Set [enforceAcceptHeader] to `true` to throw a `406 Not Acceptable` if the client doesn't accept HTML responses.
|
||||||
RequestMiddleware renderHtml(
|
RequestHandler renderHtml({StringRenderer renderer, bool enforceAcceptHeader}) {
|
||||||
{StringRenderer renderer, bool enforceAcceptHeader}) {
|
|
||||||
renderer ??= new StringRenderer(pretty: false, html5: true);
|
renderer ??= new StringRenderer(pretty: false, html5: true);
|
||||||
|
|
||||||
return (RequestContext req, ResponseContext res) {
|
return (RequestContext req, ResponseContext res) {
|
||||||
|
@ -21,11 +20,11 @@ RequestMiddleware renderHtml(
|
||||||
if (enforceAcceptHeader == true && !req.accepts('text/html'))
|
if (enforceAcceptHeader == true && !req.accepts('text/html'))
|
||||||
throw new AngelHttpException.notAcceptable();
|
throw new AngelHttpException.notAcceptable();
|
||||||
|
|
||||||
var content = renderer.render(data);
|
var content = renderer.render(data as Node);
|
||||||
res
|
res
|
||||||
..headers['content-type'] = 'text/html'
|
..headers['content-type'] = 'text/html'
|
||||||
..write(content)
|
..write(content);
|
||||||
..end();
|
res.close();
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
14
pubspec.yaml
14
pubspec.yaml
|
@ -1,14 +1,16 @@
|
||||||
name: angel_html
|
name: angel_html
|
||||||
version: 1.0.0
|
version: 2.0.0
|
||||||
description: Easily render html_builder AST's as responses in Angel.
|
description: Support for rendering html_builder AST's as responses in Angel.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/html_builder
|
homepage: https://github.com/angel-dart/html_builder
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=1.19.0"
|
sdk: ">=2.0.0-dev <3.0.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
angel_framework: ^1.0.0
|
angel_framework: ^2.0.0-alpha
|
||||||
html_builder: ^1.0.0
|
html_builder: ^1.0.0
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
angel_test: ^1.0.0
|
angel_test: ^2.0.0-alpha
|
||||||
html: ^0.13.2
|
html: ^0.13.2
|
||||||
test: ^0.12.0
|
logging: ^0.11.0
|
||||||
|
test: ^1.0.0
|
||||||
|
pedantic: ^1.0.0
|
|
@ -12,9 +12,9 @@ main() {
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
app = new Angel();
|
app = new Angel();
|
||||||
|
|
||||||
app.before.add(renderHtml());
|
app.fallback(renderHtml());
|
||||||
|
|
||||||
app.get('/html', () {
|
app.get('/html', (req, res) {
|
||||||
return html(c: [
|
return html(c: [
|
||||||
head(c: [
|
head(c: [
|
||||||
title(c: [text('ok')])
|
title(c: [text('ok')])
|
||||||
|
@ -22,14 +22,21 @@ main() {
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
app
|
app.get(
|
||||||
.chain(renderHtml(
|
'/strict',
|
||||||
|
chain([
|
||||||
|
renderHtml(
|
||||||
enforceAcceptHeader: true,
|
enforceAcceptHeader: true,
|
||||||
renderer: new StringRenderer(doctype: null, pretty: false)))
|
renderer: new StringRenderer(
|
||||||
.get('/strict', () {
|
doctype: null,
|
||||||
|
pretty: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(req, res) {
|
||||||
return div(c: [text('strict')]);
|
return div(c: [text('strict')]);
|
||||||
});
|
},
|
||||||
|
]),
|
||||||
|
);
|
||||||
client = await connectTo(app);
|
client = await connectTo(app);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -41,8 +48,10 @@ main() {
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
response,
|
response,
|
||||||
allOf(hasContentType('text/html'),
|
allOf(
|
||||||
hasBody('<!DOCTYPE html><html><head><title>ok</title></head></html>')));
|
hasContentType('text/html'),
|
||||||
|
hasBody(
|
||||||
|
'<!DOCTYPE html><html><head><title>ok</title></head></html>')));
|
||||||
});
|
});
|
||||||
|
|
||||||
group('enforce accept header', () {
|
group('enforce accept header', () {
|
||||||
|
@ -62,8 +71,7 @@ main() {
|
||||||
test('throws if incorrect or no accept', () async {
|
test('throws if incorrect or no accept', () async {
|
||||||
var response = await client.get('/strict');
|
var response = await client.get('/strict');
|
||||||
print('Response: ${response.body}');
|
print('Response: ${response.body}');
|
||||||
expect(response,
|
expect(response, hasStatus(406));
|
||||||
isAngelHttpException(statusCode: 406, message: '406 Not Acceptable'));
|
|
||||||
|
|
||||||
response = await client
|
response = await client
|
||||||
.get('/strict', headers: {'accept': 'application/json,text/xml'});
|
.get('/strict', headers: {'accept': 'application/json,text/xml'});
|
||||||
|
|
Loading…
Reference in a new issue