delphimvcframework/ideexpert/DMVC.Expert.Commons.pas

128 lines
5.0 KiB
ObjectPascal

// ***************************************************************************
//
// Delphi MVC Framework
//
// Copyright (c) 2010-2024 Daniele Teti and the DMVCFramework Team
//
// https://github.com/danieleteti/delphimvcframework
//
// ***************************************************************************
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// ***************************************************************************
unit DMVC.Expert.Commons;
interface
uses
MVCFramework.Commons, System.SysUtils, JsonDataObjects, ToolsAPI;
type
IGenCommand = interface
['{B5F6B048-FB5A-48EA-80F9-D8395B4DE40D}']
procedure ExecuteInterface(Section: TStringBuilder; Model: TJSONObject);
procedure ExecuteImplementation(Section: TStringBuilder; Model: TJSONObject);
end;
TCustomCommand = class abstract(TInterfacedObject, IGenCommand)
protected
procedure CheckFor(const Key: String; Model: TJSONObject);
public
procedure ExecuteInterface(Section: TStringBuilder; Model: TJSONObject); virtual; abstract;
procedure ExecuteImplementation(Section: TStringBuilder; Model: TJSONObject); virtual; abstract;
end;
TDefaultValues = class sealed
public
const sDefaultControllerName = 'TMyController';
const sDefaultWebModuleName = 'TMyWebModule';
const sDefaultServerPort = '8080';
end;
TConfigKey = class sealed
public const
program_name = 'program.name';
program_default_server_port= 'program.default_server_port';
program_msheap='program.msheap';
program_sqids='program.sqids';
program_dotenv='program.dotenv';
program_ssv_templatepro='program.ssv.templatepro';
program_ssv_webstencils='program.ssv.webstencils';
program_ssv_mustache='program.ssv.mustache';
program_service_container_generate = 'program.service.container.generate';
program_service_container_unit_name = 'program.service.container.unit_name';
mustache_helpers_unit_name = 'mustache.helpers_unit_name';
templatepro_helpers_unit_name = 'templatepro.helpers_unit_name';
webstencils_helpers_unit_name = 'webstencils.helpers_unit_name';
controller_unit_name='controller.unit_name';
controller_classname= 'controller.classname';
controller_index_methods_generate= 'controller.index_methods.generate';
controller_action_filters_generate= 'controller.action_filters.generate';
controller_crud_methods_generate= 'controller.crud_methods.generate';
controller_actions_profiling_generate= 'controller.actions.profiling.generate';
entity_generate= 'entity.generate';
entity_classname= 'entity.classname';
entity_unit_name='entity.unit_name';
jsonrpc_generate= 'jsonrpc.generate';
jsonrpc_classname= 'jsonrpc.classname';
jsonrpc_unit_name='jsonrpc.unit_name';
serializer_name_case= 'serializer.name_case';
webmodule_classname= 'webmodule.classname';
webmodule_unit_name= 'webmodule.unit_name';
webmodule_middleware_analytics= 'webmodule.middleware.analytics';
webmodule_middleware_staticfiles= 'webmodule.middleware.staticfiles';
webmodule_middleware_trace= 'webmodule.middleware.trace';
webmodule_middleware_compression= 'webmodule.middleware.compression';
webmodule_middleware_etag= 'webmodule.middleware.etag';
webmodule_middleware_cors= 'webmodule.middleware.cors';
webmodule_middleware_activerecord= 'webmodule.middleware.activerecord';
webmodule_middleware_activerecord_con_def_name= 'webmodule.middleware.activerecord.con_def_name';
webmodule_middleware_activerecord_con_def_filename= 'webmodule.middleware.activerecord.con_def_filename';
end;
procedure ChangeIOTAModuleFileNamePrefix(const IOTA: IOTAModule; const FileNamePrefix: String);
implementation
uses
System.IOUtils;
{ TCustomCommand }
procedure TCustomCommand.CheckFor(const Key: String;
Model: TJSONObject);
begin
if (not Model.Contains(Key)) or Model.S[Key].IsEmpty then
begin
raise Exception.CreateFmt('Required key "%s" not found or empty while processing %s', [Key, ClassName]);
end;
end;
procedure ChangeIOTAModuleFileNamePrefix(const IOTA: IOTAModule; const FileNamePrefix: String);
var
lDirName: string;
lFileName: string;
lFileExt: string;
begin
lDirName := TPath.GetDirectoryName(IOTA.FileName);
lFileName := TPath.GetFileNameWithoutExtension(IOTA.FileName);
lFileExt := TPath.GetExtension(IOTA.FileName);
lFileName := FileNamePrefix;
// IOTA.FileName := TPath.Combine(lDirName, lFileName + lFileExt);
// IOTA.Refresh(False);
end;
end.