Bless up
This commit is contained in:
commit
31607686be
7 changed files with 150 additions and 0 deletions
65
.gitignore
vendored
Normal file
65
.gitignore
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
# Created by .ignore support plugin (hsz.mobi)
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||
|
||||
*.iml
|
||||
|
||||
## Directory-based project format:
|
||||
.idea/
|
||||
# if you remove the above rule, at least ignore the following:
|
||||
|
||||
# User-specific stuff:
|
||||
# .idea/workspace.xml
|
||||
# .idea/tasks.xml
|
||||
# .idea/dictionaries
|
||||
|
||||
# Sensitive or high-churn files:
|
||||
# .idea/dataSources.ids
|
||||
# .idea/dataSources.xml
|
||||
# .idea/sqlDataSources.xml
|
||||
# .idea/dynamic.xml
|
||||
# .idea/uiDesigner.xml
|
||||
|
||||
# Gradle:
|
||||
# .idea/gradle.xml
|
||||
# .idea/libraries
|
||||
|
||||
# Mongo Explorer plugin:
|
||||
# .idea/mongoSettings.xml
|
||||
|
||||
## File-based project format:
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
# IntelliJ
|
||||
/out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
### Dart template
|
||||
# Don’t commit the following directories created by pub.
|
||||
.buildlog
|
||||
.pub/
|
||||
build/
|
||||
packages
|
||||
.packages
|
||||
|
||||
# Or the files created by dart2js.
|
||||
*.dart.js
|
||||
*.js_
|
||||
*.js.deps
|
||||
*.js.map
|
||||
|
||||
# Include when developing application packages.
|
||||
pubspec.lock
|
||||
|
4
lib/angel_framework.dart
Normal file
4
lib/angel_framework.dart
Normal file
|
@ -0,0 +1,4 @@
|
|||
/// A controller-based MVC + WebSocket framework in Dart.
|
||||
library angel_framework;
|
||||
|
||||
export 'src/http/http.dart';
|
11
lib/src/http/http.dart
Normal file
11
lib/src/http/http.dart
Normal file
|
@ -0,0 +1,11 @@
|
|||
/// HTTP logic
|
||||
library angel_framework.http;
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:json_god/json_god.dart';
|
||||
import 'package:route/server.dart';
|
||||
|
||||
part 'route.dart';
|
||||
part 'routable.dart';
|
||||
part 'server.dart';
|
10
lib/src/http/routable.dart
Normal file
10
lib/src/http/routable.dart
Normal file
|
@ -0,0 +1,10 @@
|
|||
part of angel_framework.http;
|
||||
|
||||
/// A routable server that can handle dynamic requests.
|
||||
class Routable {
|
||||
/// Additional filters to be run on designated requests.
|
||||
Map <String, Object> middleware = {};
|
||||
|
||||
/// Dynamic request paths that this server will respond to.
|
||||
Map <Route, Object> routes = {};
|
||||
}
|
14
lib/src/http/route.dart
Normal file
14
lib/src/http/route.dart
Normal file
|
@ -0,0 +1,14 @@
|
|||
part of angel_framework.http;
|
||||
|
||||
class Route {
|
||||
Pattern matcher;
|
||||
String method;
|
||||
|
||||
Route(String method, Pattern path, [List handlers]) {
|
||||
this.method = method;
|
||||
if (path is RegExp) this.matcher = path;
|
||||
else this.matcher = new RegExp('^' +
|
||||
path.toString().replaceAll(new RegExp('\/'), r'\/').replaceAll(
|
||||
new RegExp(':[a-zA-Z_]+'), '([^\/]+)') + r'$');
|
||||
}
|
||||
}
|
39
lib/src/http/server.dart
Normal file
39
lib/src/http/server.dart
Normal file
|
@ -0,0 +1,39 @@
|
|||
part of angel_framework.http;
|
||||
|
||||
/// A function that binds
|
||||
typedef Future<HttpServer> ServerGenerator(InternetAddress address, int port);
|
||||
|
||||
/// A powerful real-time/REST/MVC server class.
|
||||
class Angel extends Routable {
|
||||
ServerGenerator _serverGenerator;
|
||||
|
||||
_startServer(InternetAddress address, int port) async {
|
||||
var server = await _serverGenerator(
|
||||
address ?? InternetAddress.LOOPBACK_IP_V4, port);
|
||||
var router = new Router(server);
|
||||
|
||||
this.routes.forEach((Route route, value) {
|
||||
router.serve(route.matcher, method: route.method).listen((
|
||||
HttpRequest request) {
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/// Starts the server.
|
||||
void listen({InternetAddress address, int port: 3000}) {
|
||||
runZoned(() async {
|
||||
await _startServer(address, port);
|
||||
}, onError: onError);
|
||||
}
|
||||
|
||||
/// Handles a server error.
|
||||
void onError(e, [StackTrace stackTrace]) {
|
||||
|
||||
}
|
||||
|
||||
Angel() {}
|
||||
|
||||
/// Creates an HTTPS server.
|
||||
Angel.secure() {}
|
||||
}
|
7
pubspec.yaml
Normal file
7
pubspec.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
name: angel_framework
|
||||
version: 0.0.1-dev
|
||||
description: Core libraries for the Angel framework.
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
dependencies:
|
||||
json_god: any
|
||||
route: any
|
Loading…
Reference in a new issue