Daniele Teti 2022-03-25 10:49:12 +01:00
parent 9a9b74ee22
commit c2d3cbc859
22 changed files with 3219 additions and 263 deletions

View File

@ -687,6 +687,8 @@ The current beta release is named 3.2.2-nitrogen. If you want to stay on the-edg
- Fix https://github.com/danieleteti/delphimvcframework/issues/451
- Merged [PR#543](https://github.com/danieleteti/delphimvcframework/pull/543) (Now the `PathInfo` is trimmed so the router convert this "http://myserver.com/one " to this "http://myserver.com/one")
- Fix for nil objects in lists during serialization
- Fix a very subtle bug in `MaxRecordCount` parameter for RQL based methods in `TMVCActiveRecord`
@ -701,6 +703,8 @@ The current beta release is named 3.2.2-nitrogen. If you want to stay on the-edg
- Fix https://github.com/danieleteti/delphimvcframework/issues/526 (Thanks to [David Moorhouse](https://github.com/fastbike))
- Fix https://github.com/danieleteti/delphimvcframework/issues/542 (Thanks to [Lamberto Lodi](https://github.com/llodi-csw) for the hints)
- Fixed *fileupload* sample
- Fixed an `IFDEF` compatibility problem on mobile platforms (Thanks to Marco Cotroneo)

View File

@ -26,7 +26,7 @@ package loggerproRT;
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'LoggerPro'}
{$LIBSUFFIX '110'}
{$LIBSUFFIX '111'}
{$RUNONLY}
{$IMPLICITBUILD ON}

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<ProjectGuid>{1611FBE6-5266-48FE-BDF5-E46EEAA922BE}</ProjectGuid>
<MainSource>loggerproRT.dpk</MainSource>
<ProjectVersion>19.3</ProjectVersion>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
@ -94,6 +94,7 @@
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Description>LoggerPro</DCC_Description>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=Daniele Teti;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DllSuffix>111</DllSuffix>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
@ -143,26 +144,13 @@
<Source Name="MainSource">loggerproRT.dpk</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k280.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp280.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp280.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX64">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\loggerproRT.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>loggerproRT.bpl</RemoteName>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -171,16 +159,27 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX64">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\loggerproRT.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>loggerproRT.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
@ -973,17 +972,17 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Android">False</Platform>

View File

@ -22,6 +22,6 @@
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DMVCFramework - Copyright (2010-2021) Daniele Teti and the DMVCFramework Team'}
{$DESCRIPTION 'DMVCFramework - Copyright (2010-2022) Daniele Teti and the DMVCFramework Team'}
{$RUNONLY}
{$IMPLICITBUILD ON}

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<ProjectGuid>{84344511-1DC2-41BA-8689-9F36C1D475BE}</ProjectGuid>
<MainSource>dmvcframeworkDT.dpk</MainSource>
<ProjectVersion>19.3</ProjectVersion>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
@ -189,7 +189,7 @@
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
@ -199,8 +199,8 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -209,8 +209,13 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX64">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -220,11 +225,6 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX64">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
@ -1248,17 +1248,17 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Android">False</Platform>

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<ProjectGuid>{96D17257-AF74-48CB-9893-7BCCB56A069D}</ProjectGuid>
<MainSource>dmvcframeworkRT.dpk</MainSource>
<ProjectVersion>19.3</ProjectVersion>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
@ -222,22 +222,16 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\dmvcframeworkRT110.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>dmvcframeworkRT.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
@ -248,6 +242,12 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\dmvcframeworkRT110.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>dmvcframeworkRT.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
@ -1271,17 +1271,17 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Android">False</Platform>

View File

@ -0,0 +1,32 @@
package dmvcframeworkDT;
{$I ..\common_defines_design.inc}
{$LIBSUFFIX '111'}
requires
rtl,
designide,
ExpertsCreators,
IndySystem,
IndyProtocols,
IndyCore,
dbrtl,
dmvcframeworkRT;
contains
DMVC.Expert.CodeGen.NewControllerUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewControllerUnit.pas',
DMVC.Expert.CodeGen.NewDMVCProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewDMVCProject.pas',
DMVC.Expert.CodeGen.NewProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewProject.pas',
DMVC.Expert.CodeGen.NewUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewUnit.pas',
DMVC.Expert.CodeGen.NewWebModuleUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewWebModuleUnit.pas',
DMVC.Expert.CodeGen.SourceFile in '..\..\ideexpert\DMVC.Expert.CodeGen.SourceFile.pas',
DMVC.Expert.CodeGen.Templates in '..\..\ideexpert\DMVC.Expert.CodeGen.Templates.pas',
DMVC.Expert.Forms.NewProjectWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewProjectWizard.pas' {frmDMVCNewProject},
DMVC.Expert.Forms.NewUnitWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewUnitWizard.pas' {frmDMVCNewUnit},
DMVC.Expert.NewUnitWizardEx in '..\..\ideexpert\DMVC.Expert.NewUnitWizardEx.pas',
DMVC.Expert.ProjectWizardEx in '..\..\ideexpert\DMVC.Expert.ProjectWizardEx.pas',
DMVC.Expert.Registration in '..\..\ideexpert\DMVC.Expert.Registration.pas',
DMVC.Splash.Registration in '..\..\ideexpert\DMVC.Splash.Registration.pas';
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
package dmvcframeworkRT;
{$I ..\common_defines.inc}
{$LIBSUFFIX '111'}
requires
rtl,
inet,
FireDAC,
IndyCore,
IndyProtocols,
FireDACIBDriver,
FireDACMySQLDriver,
loggerproRT,
FireDACPgDriver,
FireDACSqliteDriver;
contains
{$I '..\common_contains.inc'}
MVCFramework in '..\..\sources\MVCFramework.pas',
MVCFramework.ActiveRecord in '..\..\sources\MVCFramework.ActiveRecord.pas',
MVCFramework.ActiveRecordController in '..\..\sources\MVCFramework.ActiveRecordController.pas',
MVCFramework.ApplicationSession in '..\..\sources\MVCFramework.ApplicationSession.pas',
MVCFramework.Cache in '..\..\sources\MVCFramework.Cache.pas',
MVCFramework.Commons in '..\..\sources\MVCFramework.Commons.pas',
MVCFramework.Console in '..\..\sources\MVCFramework.Console.pas',
MVCFramework.DataSet.Utils in '..\..\sources\MVCFramework.DataSet.Utils.pas',
MVCFramework.DuckTyping in '..\..\sources\MVCFramework.DuckTyping.pas',
MVCFramework.FireDAC.Utils in '..\..\sources\MVCFramework.FireDAC.Utils.pas',
MVCFramework.HMAC in '..\..\sources\MVCFramework.HMAC.pas',
MVCFramework.JSONRPC.Client in '..\..\sources\MVCFramework.JSONRPC.Client.pas',
MVCFramework.JSONRPC in '..\..\sources\MVCFramework.JSONRPC.pas',
MVCFramework.JWT in '..\..\sources\MVCFramework.JWT.pas',
MVCFramework.Logger in '..\..\sources\MVCFramework.Logger.pas',
MVCFramework.Middleware.Analytics in '..\..\sources\MVCFramework.Middleware.Analytics.pas',
MVCFramework.Middleware.Authentication in '..\..\sources\MVCFramework.Middleware.Authentication.pas',
MVCFramework.Middleware.Authentication.RoleBasedAuthHandler in '..\..\sources\MVCFramework.Middleware.Authentication.RoleBasedAuthHandler.pas',
MVCFramework.Middleware.Compression in '..\..\sources\MVCFramework.Middleware.Compression.pas',
MVCFramework.Middleware.CORS in '..\..\sources\MVCFramework.Middleware.CORS.pas',
MVCFramework.Middleware.JWT in '..\..\sources\MVCFramework.Middleware.JWT.pas',
MVCFramework.Middleware.SecurityHeaders in '..\..\sources\MVCFramework.Middleware.SecurityHeaders.pas',
MVCFramework.MultiMap in '..\..\sources\MVCFramework.MultiMap.pas',
MVCFramework.Patches in '..\..\sources\MVCFramework.Patches.pas',
MVCFramework.RESTAdapter in '..\..\sources\MVCFramework.RESTAdapter.pas',
MVCFramework.Router in '..\..\sources\MVCFramework.Router.pas',
MVCFramework.RQL.AST2FirebirdSQL in '..\..\sources\MVCFramework.RQL.AST2FirebirdSQL.pas',
MVCFramework.RQL.AST2InterbaseSQL in '..\..\sources\MVCFramework.RQL.AST2InterbaseSQL.pas',
MVCFramework.RQL.AST2MySQL in '..\..\sources\MVCFramework.RQL.AST2MySQL.pas',
MVCFramework.RQL.AST2PostgreSQL in '..\..\sources\MVCFramework.RQL.AST2PostgreSQL.pas',
MVCFramework.RQL.AST2SQLite in '..\..\sources\MVCFramework.RQL.AST2SQLite.pas',
MVCFramework.RQL.Parser in '..\..\sources\MVCFramework.RQL.Parser.pas',
MVCFramework.Rtti.Utils in '..\..\sources\MVCFramework.Rtti.Utils.pas',
MVCFramework.Serializer.Abstract in '..\..\sources\MVCFramework.Serializer.Abstract.pas',
MVCFramework.Serializer.Commons in '..\..\sources\MVCFramework.Serializer.Commons.pas',
MVCFramework.Serializer.Defaults in '..\..\sources\MVCFramework.Serializer.Defaults.pas',
MVCFramework.Serializer.Intf in '..\..\sources\MVCFramework.Serializer.Intf.pas',
MVCFramework.Serializer.JsonDataObjects.CustomTypes in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.CustomTypes.pas',
MVCFramework.Serializer.JsonDataObjects in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas',
MVCFramework.Session in '..\..\sources\MVCFramework.Session.pas',
MVCFramework.SysControllers in '..\..\sources\MVCFramework.SysControllers.pas',
MVCFramework.SystemJSONUtils in '..\..\sources\MVCFramework.SystemJSONUtils.pas',
MVCFramework.View.Cache in '..\..\sources\MVCFramework.View.Cache.pas',
MVCFramework.Controllers.Register in '..\..\sources\MVCFramework.Controllers.Register.pas',
MVCFramework.SQLGenerators.Firebird in '..\..\sources\MVCFramework.SQLGenerators.Firebird.pas',
MVCFramework.SQLGenerators.Interbase in '..\..\sources\MVCFramework.SQLGenerators.Interbase.pas',
MVCFramework.SQLGenerators.MySQL in '..\..\sources\MVCFramework.SQLGenerators.MySQL.pas',
MVCFramework.SQLGenerators.PostgreSQL in '..\..\sources\MVCFramework.SQLGenerators.PostgreSQL.pas',
MVCFramework.SQLGenerators.Sqlite in '..\..\sources\MVCFramework.SQLGenerators.Sqlite.pas',
MVCFramework.Swagger.Commons in '..\..\sources\MVCFramework.Swagger.Commons.pas',
MVCFramework.Middleware.Swagger in '..\..\sources\MVCFramework.Middleware.Swagger.pas',
MVCFramework.Middleware.Trace in '..\..\sources\MVCFramework.Middleware.Trace.pas',
MVCFramework.Nullables in '..\..\sources\MVCFramework.Nullables.pas',
MVCFramework.Serializer.HTML in '..\..\sources\MVCFramework.Serializer.HTML.pas',
MVCFramework.LRUCache in '..\..\sources\MVCFramework.LRUCache.pas',
MVCFramework.RESTClient.Commons in '..\..\sources\MVCFramework.RESTClient.Commons.pas',
MVCFramework.RESTClient.Indy in '..\..\sources\MVCFramework.RESTClient.Indy.pas',
MVCFramework.RESTClient.Intf in '..\..\sources\MVCFramework.RESTClient.Intf.pas',
MVCFramework.RESTClient in '..\..\sources\MVCFramework.RESTClient.pas',
MVCFramework.Utils in '..\..\sources\MVCFramework.Utils.pas';
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,60 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{EA879EE4-1245-4456-AED9-57FDF63577E6}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Projects Include="..\..\lib\loggerpro\packages\d110\loggerproRT.dproj">
<Dependencies/>
</Projects>
<Projects Include="dmvcframeworkRT.dproj">
<Dependencies/>
</Projects>
<Projects Include="dmvcframeworkDT.dproj">
<Dependencies/>
</Projects>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Default.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Default.Personality/>
</BorlandProject>
</ProjectExtensions>
<Target Name="loggerproRT">
<MSBuild Projects="..\..\lib\loggerpro\packages\d110\loggerproRT.dproj"/>
</Target>
<Target Name="loggerproRT:Clean">
<MSBuild Projects="..\..\lib\loggerpro\packages\d110\loggerproRT.dproj" Targets="Clean"/>
</Target>
<Target Name="loggerproRT:Make">
<MSBuild Projects="..\..\lib\loggerpro\packages\d110\loggerproRT.dproj" Targets="Make"/>
</Target>
<Target Name="dmvcframeworkRT">
<MSBuild Projects="dmvcframeworkRT.dproj"/>
</Target>
<Target Name="dmvcframeworkRT:Clean">
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Clean"/>
</Target>
<Target Name="dmvcframeworkRT:Make">
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Make"/>
</Target>
<Target Name="dmvcframeworkDT">
<MSBuild Projects="dmvcframeworkDT.dproj"/>
</Target>
<Target Name="dmvcframeworkDT:Clean">
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Clean"/>
</Target>
<Target Name="dmvcframeworkDT:Make">
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Make"/>
</Target>
<Target Name="Build">
<CallTarget Targets="loggerproRT;dmvcframeworkRT;dmvcframeworkDT"/>
</Target>
<Target Name="Clean">
<CallTarget Targets="loggerproRT:Clean;dmvcframeworkRT:Clean;dmvcframeworkDT:Clean"/>
</Target>
<Target Name="Make">
<CallTarget Targets="loggerproRT:Make;dmvcframeworkRT:Make;dmvcframeworkDT:Make"/>
</Target>
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
</Project>

View File

@ -0,0 +1,180 @@
create database 'C:\DEV\dmvcframework\samples\data\ACTIVERECORDDB.IB' default character set UTF8;
connect 'C:\DEV\dmvcframework\samples\data\ACTIVERECORDDB.IB';
CREATE TABLE articles (
id integer not null,
description varchar(100) character set utf8 NOT NULL,
price integer NOT NULL,
CONSTRAINT articles_pkey PRIMARY KEY (id)
);
CREATE TABLE customers (
id integer not null,
code varchar(20) character set utf8,
description varchar(200) character set utf8 ,
city varchar(200) character set utf8 ,
rating INTEGER,
NOTE BLOB SUB_TYPE 1,
CONSTRAINT customers_pk PRIMARY KEY (id)
);
CREATE TABLE customers_plain (
id integer NOT NULL,
code varchar(20) character set utf8 ,
description varchar(200) character set utf8 ,
city varchar(200) character set utf8 ,
note blob sub_type text,
rating smallint,
creation_time time,
creation_date date,
CONSTRAINT customers_plain_pk PRIMARY KEY (id)
);
CREATE TABLE customers_with_code (
code varchar(20) character set utf8 NOT null primary key,
description varchar(200) character set utf8 ,
city varchar(200) character set utf8 ,
NOTE BLOB SUB_TYPE 1,
rating smallint
);
CREATE TABLE order_details (
id integer not null,
id_order integer NOT NULL,
id_article integer NOT NULL,
unit_price numeric(18,2) NOT NULL,
discount integer DEFAULT 0 NOT NULL ,
quantity integer NOT NULL,
description varchar(200) character set utf8 NOT NULL ,
total numeric(18,2) NOT NULL,
CONSTRAINT order_details_pkey PRIMARY KEY (id)
);
CREATE TABLE orders (
id integer not null,
id_customer integer NOT NULL,
order_date date NOT NULL,
total numeric(18,4) NOT NULL,
CONSTRAINT orders_pkey PRIMARY KEY (id)
);
CREATE TABLE people (
id integer not null,
last_name varchar(100) character set utf8 NOT NULL ,
first_name varchar(100) character set utf8 NOT NULL ,
dob date NOT NULL,
full_name varchar(80) character set utf8 NOT NULL ,
is_male BOOLEAN DEFAULT TRUE NOT NULL,
note blob sub_type 1,
photo blob sub_type 0,
CONSTRAINT people_pkey PRIMARY KEY (id)
);
create table phones (
id integer not null,
phone_number varchar(200) character set utf8 not null ,
number_type varchar(200) character set utf8 not null ,
dob date,
id_person integer not null references people(id)
);
CREATE TABLE nullables_test (
f_int2 smallint ,
f_int8 integer ,
f_int4 integer ,
f_string varchar(200) ,
f_bool boolean ,
f_date date ,
f_time time ,
f_datetime timestamp,
f_float4 float,
f_float8 DOUBLE PRECISION,
f_currency numeric(18, 4),
f_blob blob sub_type 0
);
CREATE TABLE "customers with spaces" (
"id with spaces" INTEGER NOT NULL,
"code with spaces" VARCHAR(20),
"description with spaces" VARCHAR(200),
"city with spaces" VARCHAR(200),
"note with spaces" BLOB SUB_TYPE 1,
"rating with spaces" INTEGER,
CONSTRAINT cust_with_space_pk PRIMARY KEY ("id with spaces")
);
ALTER TABLE orders ADD CONSTRAINT orders_customers_fk FOREIGN KEY (id_customer) REFERENCES customers(id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE order_details ADD CONSTRAINT order_details_orders_fk FOREIGN KEY (id_order) REFERENCES orders(id) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE GENERATOR SEQ_ARTICLES_ID;
CREATE GENERATOR SEQ_CUSTOMERS_ID;
CREATE GENERATOR SEQ_ORDER_DETAILS_ID;
CREATE GENERATOR SEQ_ORDERS_ID;
CREATE GENERATOR SEQ_PEOPLE_ID;
CREATE GENERATOR SEQ_PHONES_ID;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ARTICLES_BI FOR ARTICLES
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_ARTICLES_ID, 1);
END
;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER CUSTOMERS_BI FOR CUSTOMERS
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_CUSTOMERS_ID, 1);
END
;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ORDERS_BI FOR ORDERS
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_ORDERS_ID, 1);
END
;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ORDER_DETAILS_BI FOR ORDER_DETAILS
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_ORDER_DETAILS_ID, 1);
END
;
CREATE TRIGGER PEOPLE_BI FOR PEOPLE
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_PEOPLE_ID, 1);
END
;
CREATE TRIGGER PHONES_BI FOR PHONES
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(SEQ_PHONES_ID, 1);
END
;

View File

@ -0,0 +1,3 @@
set ISQL=C:\Program Files (x86)\Embarcadero\InterBase\bin\isql.exe
del ACTIVERECORDDB.IB
"%ISQL%" -user sysdba -password masterkey -input C:\DEV\dmvcframework\samples\data\activerecorddb_interbase_script.sql C:\ProgramData\Embarcadero\InterBase\gds_db\examples\database\EMPLOYEE.GDB

View File

@ -30,7 +30,7 @@ uses
FireDAC.Comp.Client,
Vcl.ComCtrls,
Vcl.ExtCtrls,
MVCFramework.JSONRPC.Client;
MVCFramework.JSONRPC.Client, Vcl.Mask;
type
TMainForm = class(TForm)

View File

@ -1641,14 +1641,24 @@ end;
function TMVCWebRequest.GetQueryParams: TDictionary<string, string>;
var
I: Integer;
lRow: String;
begin
if not Assigned(FQueryParams) then
begin
FQueryParams := TDictionary<string, string>.Create;
for I := 0 to Pred(FWebRequest.QueryFields.Count) do
begin
FQueryParams.Add(LowerCase(FWebRequest.QueryFields.Names[I]),
FWebRequest.QueryFields.ValueFromIndex[I]);
lRow := FWebRequest.QueryFields[i];
if lRow.Contains('=') then
begin
FQueryParams.Add(
LowerCase(Trim(FWebRequest.QueryFields.Names[I])),
FWebRequest.QueryFields.ValueFromIndex[I]);
end
else
begin
FQueryParams.AddOrSetValue(LowerCase(lRow), '');
end;
end;
end;
Result := FQueryParams;

View File

@ -12,7 +12,7 @@ from pathlib import Path
init()
DEFAULT_DELPHI_VERSION = "11"
DEFAULT_DELPHI_VERSION = "11.1"
g_releases_path = "releases"
g_output = "bin"
@ -44,12 +44,13 @@ def build_delphi_project(
delphi_version=DEFAULT_DELPHI_VERSION,
):
delphi_versions = {
"10": {"path": "17.0", "desc": "Delphi 10 Seattle"},
"10": {"path": "17.0", "desc": "Delphi 10 Seattle"},
"10.1": {"path": "18.0", "desc": "Delphi 10.1 Berlin"},
"10.2": {"path": "19.0", "desc": "Delphi 10.2 Tokyo"},
"10.3": {"path": "20.0", "desc": "Delphi 10.3 Rio"},
"10.4": {"path": "21.0", "desc": "Delphi 10.4 Sydney"},
"11": {"path": "22.0", "desc": "Delphi 11 Alexandria"}
"11": {"path": "22.0", "desc": "Delphi 11 Alexandria"},
"11.1": {"path": "22.0", "desc": "Delphi 11.1 Alexandria"},
}
assert delphi_version in delphi_versions, (
@ -306,7 +307,7 @@ def tests(ctx, delphi_version=DEFAULT_DELPHI_VERSION):
import subprocess
print("\nExecuting tests...")
subprocess.Popen([r"unittests\general\TestServer\bin\TestServer.exe"])
subprocess.Popen([r"unittests\general\TestServer\bin\TestServer.exe"], shell=True)
r = subprocess.run([r"unittests\general\Several\bin\DMVCFrameworkTests.exe"])
if r.returncode != 0:
return Exit("Compilation failed: \n" + str(r.stdout))

View File

@ -0,0 +1,27 @@
unit UtilsU;
interface
function IsReservedKeyword(const Value: String): Boolean;
implementation
uses
System.SysUtils;
const PASCAL_KEYWORDS = ';and;array;as;as;asm;begin;break;case;class;class;const;' +
'constref;constref;constructor;continue;destructor;dispose;dispose;div;do;downto;' +
'else;end;except;except;exit;exit;exports;false;file;finalization;finally;for;function;' +
'goto;if;implementation;in;inherited;initialization;inline;interface;is;label;' +
'library;mod;new;nil;not;object;of;on;on;operator;or;out;packed;procedure;program;' +
'property;raise;record;reference;repeat;self;set;shl;shr;string;then;threadvar;to;' +
'true;try;type;unit;until;uses;var;while;with;xor;';
function IsReservedKeyword(const Value: String): Boolean;
begin
Result := PASCAL_KEYWORDS.Contains(';' + Value.ToLower + ';');
end;
end.

View File

@ -1,7 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{0582DE6A-D716-46D3-8CBD-84AD73A4B536}</ProjectGuid>
<ProjectVersion>19.3</ProjectVersion>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">TESTINSIGHT</Config>
@ -321,43 +321,13 @@
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="Win32\Debug\DMVCFrameworkTests.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="GUI" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="TESTINSIGHT" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\DMVCFrameworkTests.rsm" Configuration="Debug" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossim32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="CONSOLE" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -379,6 +349,36 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="CONSOLE" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="GUI" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\DMVCFrameworkTests.rsm" Configuration="TESTINSIGHT" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\DMVCFrameworkTests.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\DMVCFrameworkTests.rsm" Configuration="Debug" Class="DebugSymbols">
<Platform Name="Win32">
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
@ -1398,18 +1398,18 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Win32">True</Platform>

View File

@ -384,105 +384,6 @@ begin
FConfig.Free;
end;
// procedure TTestRouting.TestClassNameMethodNameRouting;
// var
// Params: TMVCRequestParamsTable;
// ResponseContentType: string;
// ResponseContentEncoding: string;
// begin
// Params := TMVCRequestParamsTable.Create;
// try
// Assert.isTrue(Router.ExecuteRouting('/TNotSoSimpleController/Method1', httpGET, 'text/plain', Controllers,
// Params, ResponseContentType, ResponseContentEncoding));
// Assert.areEqual(0, Params.Count);
// Assert.areEqual('TSimpleController', Router.MVCControllerClass.ClassName);
// Assert.areEqual('Index', Router.MethodToCall.Name);
// finally
// Params.Free;
// end;
// end;
// procedure TTestMappers.TestCheckMapperSerializeAsStringIsEmptyStrIfObjIsNil;
// var
// Obj: TMyStreamObject;
// JSONObj: TJSONObject;
// DesObj: TMyStreamObject;
// begin
// // ARRANGE
// Obj := TMyStreamObject.Create;
// try
// Obj.PropStream := nil;
// Obj.Prop8Stream := nil;
// // ACT
// JSONObj := TSystemJSON.ObjectToJSONObject(Obj);
// try
// GetDefaultSerializer.de
// DesObj := TSystemJSON.JSONObjectToObject<TMyStreamObject>(JSONObj);
// try
// // ASSERT
// Assert.isTrue(TStringStream(DesObj.PropStream).DataString.IsEmpty);
// Assert.isTrue(TStringStream(DesObj.Prop8Stream).DataString.IsEmpty);
// finally
// DesObj.Free;
// end;
// finally
// JSONObj.Free;
// end;
// finally
// Obj.Free;
// end;
// end;
// procedure TTestMappers.TestComplexObjectToJSONObjectAndBack;
// var
// Obj: TMyComplexObject;
// JObj: TJSONObject;
// Obj2: TMyComplexObject;
// begin
// Obj := GetMyComplexObject;
// try
// JObj := Mapper.ObjectToJSONObject(Obj);
// try
// Obj2 := Mapper.JSONObjectToObject<TMyComplexObject>(JObj);
// try
// Assert.isTrue(Obj.Equals(Obj2));
// finally
// Obj2.Free;
// end;
// finally
// JObj.Free;
// end;
// finally
// Obj.Free;
// end;
// end;
//
// procedure TTestMappers.TestComplexObjectToJSONObjectAndBackWithNilReference;
// var
// Obj: TMyComplexObject;
// JObj: TJSONObject;
// Obj2: TMyComplexObject;
// begin
// Obj := GetMyComplexObject;
// try
// Obj.ChildObject.Free;
// Obj.ChildObject := nil;
// JObj := Mapper.ObjectToJSONObject(Obj);
// try
// Obj2 := Mapper.JSONObjectToObject<TMyComplexObject>(JObj);
// try
// Assert.isTrue(Obj.Equals(Obj2));
// finally
// Obj2.Free;
// end;
// finally
// JObj.Free;
// end;
// finally
// Obj.Free;
// end;
// end;
procedure TTestRouting.TestComplexRoutings;
var
Params: TMVCRequestParamsTable;

View File

@ -289,6 +289,9 @@ type
[Category('renders')]
procedure TestIssue406;
[Test]
procedure TestIssue542;
end;
[TestFixture]
@ -1285,6 +1288,79 @@ begin
Assert.areEqual('{"message":"The Message"}', r.Content, r.Content);
end;
procedure TServerTest.TestIssue542;
var
lRes: IMVCRESTResponse;
lJSON: TJsonObject;
begin
lRes := RESTClient.Get('/issues/542?par1&par2');
lJSON := StrToJSONObject(lRes.Content);
try
Assert.AreEqual('par1=,par2=', lJSON.S['QueryStringParams_DelimitedText']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par1'] = jdtString);
Assert.AreEqual('', lJSON.S['QueryStringParam_par1']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par2'] = jdtString);
Assert.AreEqual('', lJSON.S['QueryStringParam_par2']);
Assert.AreEqual(2, lJSON.I['QueryParams_Count']);
Assert.AreEqual('', lJSON.S['QueryParams_par1']);
Assert.AreEqual('', lJSON.S['QueryParams_par2']);
finally
lJSON.Free;
end;
lRes := RESTClient.Get('/issues/542?par1=123&par2');
lJSON := StrToJSONObject(lRes.Content);
try
Assert.AreEqual('par1=123,par2=', lJSON.S['QueryStringParams_DelimitedText']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par1'] = jdtString);
Assert.AreEqual('123', lJSON.S['QueryStringParam_par1']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par2'] = jdtString);
Assert.AreEqual('', lJSON.S['QueryStringParam_par2']);
Assert.AreEqual(2, lJSON.I['QueryParams_Count']);
Assert.AreEqual('123', lJSON.S['QueryParams_par1']);
Assert.AreEqual('', lJSON.S['QueryParams_par2']);
finally
lJSON.Free;
end;
lRes := RESTClient.Get('/issues/542?par1=123&par2=234');
lJSON := StrToJSONObject(lRes.Content);
try
Assert.AreEqual('par1=123,par2=234', lJSON.S['QueryStringParams_DelimitedText']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par1'] = jdtString);
Assert.AreEqual('123', lJSON.S['QueryStringParam_par1']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par2'] = jdtString);
Assert.AreEqual('234', lJSON.S['QueryStringParam_par2']);
Assert.AreEqual(2, lJSON.I['QueryParams_Count']);
Assert.AreEqual('123', lJSON.S['QueryParams_par1']);
Assert.AreEqual('234', lJSON.S['QueryParams_par2']);
finally
lJSON.Free;
end;
lRes := RESTClient.Get('/issues/542?par1&par2=234');
lJSON := StrToJSONObject(lRes.Content);
try
Assert.AreEqual('par1=,par2=234', lJSON.S['QueryStringParams_DelimitedText']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par1'] = jdtString);
Assert.AreEqual('', lJSON.S['QueryStringParam_par1']);
Assert.IsTrue(lJSON.Types['QueryStringParam_par2'] = jdtString);
Assert.AreEqual('234', lJSON.S['QueryStringParam_par2']);
Assert.AreEqual(2, lJSON.I['QueryParams_Count']);
Assert.AreEqual('', lJSON.S['QueryParams_par1']);
Assert.AreEqual('234', lJSON.S['QueryParams_par2']);
finally
lJSON.Free;
end;
end;
procedure TServerTest.TestMiddlewareHandler;
var
r: IMVCRESTResponse;
@ -2277,7 +2353,7 @@ begin
lValues[3] := '"daniele teti"';
lValues[4] := '"daniele" "teti"';
lValues[5] := '"daniele" "teti"!';
lValues[6] := ' _\"daniele" "teti"!_ ';
lValues[6] := ' _\"daniele" "teti"!_';
for S in lValues do
begin
@ -2285,31 +2361,6 @@ begin
Assert.areEqual(HTTP_STATUS.OK, res.StatusCode, 'Cannot route when param is [' + S + ']');
Assert.areEqual('*' + S + '*', res.Content);
end;
// res := RESTClient.doGET('/typed/string1/daniele', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('daniele modified from server', res.BodyAsString);
//
// res := RESTClient.doGET('/typed/string1/dan''iele', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('dan''iele modified from server', res.BodyAsString);
//
// res := RESTClient.doGET('/typed/string1/"the value"', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('"the value" modified from server', res.BodyAsString);
//
// res := RESTClient.doGET('/typed/string1/"the:value"', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('"the value" modified from server', res.BodyAsString);
//
// res := RESTClient.doGET('/typed/string1/"the:value!"', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('"the value" modified from server', res.BodyAsString);
//
// res := RESTClient.doGET('/typed/string1/"the:value!?"', []);
// Assert.isTrue(res.ResponseCode = HTTP_STATUS.OK, 'Cannot route');
// Assert.areEqual('"the value" modified from server', res.BodyAsString);
end;
procedure TServerTest.TestTypedTGuid1;

View File

@ -7,7 +7,7 @@
<TargetedPlatforms>129</TargetedPlatforms>
<AppType>Console</AppType>
<FrameworkType>None</FrameworkType>
<ProjectVersion>19.3</ProjectVersion>
<ProjectVersion>19.4</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
@ -152,16 +152,8 @@
<Platform value="Win64">False</Platform>
</Platforms>
<Deployment Version="3">
<DeployFile LocalName="bin\www\static.html" Configuration="CI" Class="File">
<Platform Name="Linux64">
<RemoteDir>.\www</RemoteDir>
<RemoteName>static.html</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\customers.json" Configuration="CI" Class="File">
<Platform Name="Linux64">
<RemoteName>customers.json</RemoteName>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -175,8 +167,9 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<DeployFile LocalName="bin\customers.json" Configuration="CI" Class="File">
<Platform Name="Linux64">
<RemoteName>customers.json</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
@ -186,12 +179,6 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="TestServer" Configuration="CI" Class="ProjectOutput">
<Platform Name="Linux64">
<RemoteName>TestServer</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\TestServer.exe" Configuration="CI" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>TestServer.exe</RemoteName>
@ -205,6 +192,19 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="bin\www\static.html" Configuration="CI" Class="File">
<Platform Name="Linux64">
<RemoteDir>.\www</RemoteDir>
<RemoteName>static.html</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="TestServer" Configuration="CI" Class="ProjectOutput">
<Platform Name="Linux64">
<RemoteName>TestServer</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
@ -1184,17 +1184,17 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>

View File

@ -264,6 +264,10 @@ type
[MVCPath('/issue492/($stringvalue)')]
procedure GetIssue492;
[MVCHTTPMethod([httpGET])]
[MVCPath('/issue542/($stringvalue)')]
procedure GetIssue542;
{ injectable parameters }
[MVCHTTPMethod([httpGET])]
[MVCPath('/injectable10')]
@ -330,6 +334,10 @@ type
[MVCHTTPMethod([httpGET])]
[MVCPath('/issues/526')]
procedure TestIssue526;
[MVCHTTPMethod([httpGET])]
[MVCPath('/issues/542')]
procedure TestIssue542;
end;
[MVCPath('/private')]
@ -522,6 +530,11 @@ begin
// do nothing
end;
procedure TTestServerController.GetIssue542;
begin
// do nothing
end;
procedure TTestServerController.GetProject;
begin
// do nothing
@ -805,6 +818,24 @@ begin
RenderResponseStream;
end;
procedure TTestServerController.TestIssue542;
var
lJSON: TJDOJSONObject;
begin
lJSON := TJDOJSONObject.Create;
try
lJSON.S['QueryStringParams_DelimitedText'] := Context.Request.QueryStringParams.DelimitedText;
lJSON.S['QueryStringParam_par1'] := Context.Request.QueryStringParam('par1');
lJSON.S['QueryStringParam_par2'] := Context.Request.QueryStringParam('par2');
lJSON.I['QueryParams_Count'] := Context.Request.QueryParams.Count;
lJSON.S['QueryParams_par1'] := Context.Request.QueryParams['par1'];
lJSON.S['QueryParams_par2'] := Context.Request.QueryParams['par2'];
Render(lJSON, False);
finally
lJSON.Free;
end;
end;
procedure TTestServerController.TestJSONArrayAsObjectList;
var
lUsers: TObjectList<TCustomer>;