Daniele Teti 2020-03-31 00:47:35 +02:00
parent 1fd7740048
commit 841edeb114
6 changed files with 18 additions and 12 deletions

View File

@ -61,9 +61,9 @@ Congratulations to Daniele Teti and all the staff for the excellent work!" -- Ma
* Works on Linux (Delphi 10.2 Tokyo or better)
* Completely unit tested (more than 130 unit tests)
* There is a sample for each functionality (check the [dmvcframework_(yourversion)_samples.zip](https://github.com/danieleteti/delphimvcframework/releases))
* Server side generated pages using [Mustache for Delphi](https://github.com/synopse/dmustache)
* Server side generated pages using [Mustache for Delphi](https://github.com/synopse/dmustache) or [TemplatePro](https://github.com/danieleteti/templatepro)
* Specific trainings are available (email to `professionals@bittime.it` for a date and a place)
* Messaging extension using [ServerSentEvents](https://github.com/danieleteti/delphimvcframework/tree/master/samples/serversentevents)
* Push notifications support using [ServerSentEvents](https://github.com/danieleteti/delphimvcframework/tree/master/samples/serversentevents)
* Automatic documentation through `/system/describeserver.info`
* Driven by its huge community (Facebook group https://www.facebook.com/groups/delphimvcframework)
* Semantic Versioning
@ -195,6 +195,8 @@ end;
- New! Added `TMVCActiveRecord.Count<T>(RQL)` to count record based on RQL criteria
- New! `TMVCActiveRecord` can handle non autogenerated primary key.
- New! Calling `<jsonrpcendpoint>/describe` returns the methods list available for that endpoint.
- New! Experimental (alpha stage) support for Android servers!
@ -249,9 +251,9 @@ begin
end;
```
- New! Shortcut render' methods which simplify RESTful API development
- `procedure ResponseCreated(const Location: String = ''; const Reason: String = 'Created'); virtual;`
- ` procedure ResponseAccepted(const HREF: String; const ID: String; const Reason: String = 'Accepted'); virtual;`
- `procedure ResponseNoContent(const Reason: String = 'No Content'); virtual;`
- `procedure Render201Created(const Location: String = ''; const Reason: String = 'Created'); virtual;`
- ` procedure Render202Accepted(const HREF: String; const ID: String; const Reason: String = 'Accepted'); virtual;`
- `procedure Render204NoContent(const Reason: String = 'No Content'); virtual;`
- Added de/serializing iterables (e.g. generic lists) support without `MVCListOf` attribute (Thank you to [João Antônio Duarte](https://github.com/joaoduarte19)).
@ -277,6 +279,8 @@ end;
- New! The **MVCAREntitiesGenerator** can optionally register all the generated entities also in the `ActiveRecordMappingRegistry` (Thanks to [Fabrizio Bitti](https://twitter.com/fabriziobitti) from [bit Time Software](http://www.bittime.it))
- Fixed! [issue38](https://github.com/danieleteti/delphimvcframework/issues/38)
- Fixed! [issue184](https://github.com/danieleteti/delphimvcframework/issues/184)
- Fixed! [issue278](https://github.com/danieleteti/delphimvcframework/issues/278)
@ -305,6 +309,8 @@ end;
- Fixed! [issue345](https://github.com/danieleteti/delphimvcframework/issues/345)
- Fixed! [issue349](https://github.com/danieleteti/delphimvcframework/issues/349)
- **Breaking Change!** In `MVCActiveRecord` attribute `MVCPrimaryKey` has been removed and merged with `MVCTableField`, so now `TMVCActiveRecordFieldOption` is a set of `foPrimaryKey`, `foAutoGenerated`, `foTransient` (check `activerecord_showcase.dproj` sample).
- **Breaking Change!** Middleware `OnAfterControllerAction` are now invoked in the same order of `OnBeforeControllerAction` (previously were invoked in reversed order).

View File

@ -912,7 +912,7 @@ begin
begin
aRTTIField.SetValue(AObject, BCDtoCurrency(AField.AsBCD));
end;
ftFloat:
ftFloat, ftSingle:
begin
aRTTIField.SetValue(AObject, AField.AsFloat);
end;

View File

@ -188,7 +188,7 @@ begin
Assert.AreEqual('OnBeforeLoad|MapDatasetToObject|OnAfterLoad', lCustomer.GetHistory);
lCustomer.ClearHistory;
lCustomer.Delete;
Assert.AreEqual('OnBeforeDelete|OnBeforeExecuteSQL|MapObjectToParams|OnAfterDelete', lCustomer.GetHistory);
Assert.AreEqual('OnValidation|OnBeforeDelete|OnBeforeExecuteSQL|MapObjectToParams|OnAfterDelete', lCustomer.GetHistory);
finally
lCustomer.Free;
end;

View File

@ -99,7 +99,7 @@ type
function GetHistory: String;
procedure ClearHistory;
protected
procedure OnValidation; override;
procedure OnValidation(const Action: TMVCEntityAction); override;
procedure OnAfterLoad; override;
procedure OnBeforeLoad; override;
procedure OnBeforeInsert; override;
@ -1058,7 +1058,7 @@ begin
fHistory.Add('OnBeforeUpdate');
end;
procedure TCustomerWithLF.OnValidation;
procedure TCustomerWithLF.OnValidation(const Action: TMVCEntityAction);
begin
inherited;
fHistory.Add('OnValidation');

View File

@ -608,17 +608,17 @@ end;
procedure TTestServerController.TestResponseAccepted;
begin
ResponseAccepted('http://pippo.it/1234', '1234', 'thisisthereason');
Render202Accepted('http://pippo.it/1234', '1234', 'thisisthereason');
end;
procedure TTestServerController.TestResponseCreated;
begin
ResponseCreated('thisisthelocation', 'thisisthereason');
Render201Created('thisisthelocation', 'thisisthereason');
end;
procedure TTestServerController.TestResponseNoContent;
begin
ResponseNoContent('thisisthereason');
Render204NoContent('thisisthereason');
end;
procedure TTestServerController.TestSerializeNullables;