This commit is contained in:
thosakwe 2016-06-24 15:02:35 -04:00
parent 98838cd8de
commit d588411d67
5 changed files with 70 additions and 8 deletions

View file

@ -2,7 +2,18 @@
library angel_client; library angel_client;
import 'dart:async'; import 'dart:async';
export 'src/rest.dart'; import 'dart:convert' show JSON;
import 'package:http/http.dart';
part 'rest.dart';
/// Represents an Angel server that we are querying.
abstract class Angel {
String basePath;
Angel(String this.basePath);
Service service(Pattern path);
}
/// Queries a service on an Angel server, with the same API. /// Queries a service on an Angel server, with the same API.
abstract class Service { abstract class Service {

View file

@ -1,9 +1,4 @@
library angel_client.rest; part of angel_client;
import 'dart:async';
import 'dart:convert' show JSON;
import 'package:http/http.dart';
import '../angel_client.dart';
_buildQuery(Map params) { _buildQuery(Map params) {
if (params == null || params == {}) if (params == null || params == {})
@ -22,12 +17,24 @@ const Map _writeHeaders = const {
"Content-Type": "application/json" "Content-Type": "application/json"
}; };
class Rest extends Angel {
BaseClient client;
Rest(String path, BaseClient this.client):super(path);
@override
RestService service(String path) {
String uri = path.replaceAll(new RegExp(r"(^\/)|(\/+$)"), "");
return new RestService._base("$basePath/$uri", client);
}
}
/// Queries an Angel service via REST. /// Queries an Angel service via REST.
class RestService extends Service { class RestService extends Service {
String basePath; String basePath;
BaseClient client; BaseClient client;
RestService(Pattern path, BaseClient this.client) { RestService._base(Pattern path, BaseClient this.client) {
this.basePath = (path is RegExp) ? path.pattern : path; this.basePath = (path is RegExp) ? path.pattern : path;
} }

1
test/packages Symbolic link
View file

@ -0,0 +1 @@
../packages

37
test/rest.dart Normal file
View file

@ -0,0 +1,37 @@
import 'dart:io';
import 'package:angel_client/angel_client.dart' as client;
import 'package:angel_framework/angel_framework.dart' as server;
import 'package:http/http.dart' as http;
import 'package:test/test.dart';
import 'shared.dart';
main() {
group("rest", () {
server.Angel serverApp = new server.Angel();
server.HookedService serverPostcards;
client.Angel clientApp;
client.Service clientPostcards;
HttpServer httpServer;
setUp(() async {
httpServer =
await serverApp.startServer(InternetAddress.LOOPBACK_IP_V4, 3000);
serverApp.use("/postcards", new server.MemoryService<Postcard>());
serverPostcards = serverApp.service("postcards");
clientApp = new client.Rest("http://localhost:3000", new http.Client());
clientPostcards = clientApp.service("postcards");
});
tearDown(() async {
await httpServer.close(force: true);
});
test("index", () async {
Postcard niagaraFalls = await serverPostcards.create(
new Postcard(location: "Niagara Falls", message: "Missing you!"));
List<Map> indexed = await clientPostcards.index();
print(indexed);
});
});
}

6
test/shared.dart Normal file
View file

@ -0,0 +1,6 @@
class Postcard {
String location;
String message;
Postcard({String this.location, String this.message});
}