Horse Versions Save

Fast, opinionated, minimalist web framework for Delphi

3.1.5

6 months ago
  • 🔺 12d7255dacafc81d9b932aafd83dc020beacacca Correção de erro no provider VCL Bug fix VCL

3.1.4

6 months ago
  • ⭐ 26ca310c08efd96b1600e74bc793fad46f23db9f Overload do método construtor com opção para informar o erro Created a overload constructor with string parameter

  • ⭐ 24dc9b2667e399448a27d0d90e3ecf5da933f5bc 3589a8d16184eb9b648d8307aa397b291449d4bd Adicionado Contains, StartsWith e EndsWith no LHS Brackets Add new LHS Brackets: Contains, StartsWith and EndsWith

  • ⭐ 5b7065a2cfc65ad495dabac3b165d502a874ad24 Adicionado a property Detail e adicionado o método ToJsonObject Added Detail property and ToJsonObject method

  • ✔ f3088cdd4394a58569d3c135376bdc1a80ba1e7b 897108df7f2dbf5f91138f02e1d76c58be876aec Melhorias no código Code improvements

  • 🔺 a63094cae39b8dc3e86ea292b824fef525f99a76 Hotfix Correção do Get Environment Variables usando Delphi para Linux Get Environment Variables using Delphi for Linux

  • 🔺 0d839f9fec3721a388fe03903cb73d1c66d019a3 Correção de erro no provider VCL (Alexandre Magno) Bug fix VCL provider (Alexandre Magno)

  • 🔺 8e266969324c506e0ea43e7e3089581c5f9fc1fc Correção do uses na unit Horse.Exception para FPC Fix uses clause of Horse.Exception when FPC is defined

3.1.3

9 months ago

🔺 f1fc61e00e2dd07a5d453f0ea9cf941c3792849d Bug na compilação para Lazarus Bug fix: lazarus build

3.1.2

9 months ago
  • ✔ 30c0e2e5dd4b41081de00e04dea0bc4272e136bf KeepConnectionAlive como padrão será True KeepConnectionAlive default is true

  • 🔺 cb824bcc45f30840ee8dcd3f6aae8e5b8ab4b8d5 Correção de erro: query params com espaços em branco Bug fix: Query params field with blank space

  • 🔺 c73c237f64914f3aa4570c47601c68e2dc082a00 Correção de erro: ao acessar um endpoint que não existe Bug fix: not found

3.1.1

10 months ago
  • ⭐ b0bea0f1e1c2aed3bf260dfa53469d8e637bfabb #330 Horse.Exception - Preencher propriedade Message Horse.Exception - Populate Message property

  • ✔ 5b412a5e6b32e8ca9278c7254c01ac8cf1858a31 1f1859ec83941385f436210233609e7c90af9e04 Alteração do README.md Updated README.md

  • 🔺 e99d380e195cbbcbd6bfc9d47060608155cf6d75 #332 - Alterando a comparação de String.IsEmpty para igual a EmptyStr, para compatibilidade com Delphi 10 Seattle Changing comparison of String.IsEmpty to equal EmptyStr, for compatibility with Delphi 10 Seattle

3.1.0

11 months ago

Horse 3.1.0

  • ⭐ b9171261455d067847789317a1a112ae2fe6f4ab Nova unit Horse.Mime que implementa a classe THorseMimeTypes responsável por retornar o tipo MIME associado à extensão de um arquivo New Horse.Mime unit that implements the THorseMimeTypes class responsible for returning the MIME type associated with a file extension

  • ⭐ 7d2e174950913f89925e9d403d78b1c8ae0ca425 Adicionado a opção de poder trabalhar com regex nas rotas Added the option to work with regex on routes

THorse.Get('/(discussion|page)/:id',
  procedure(Req: THorseRequest; Res: THorseResponse)
  begin
    Res.Send('Hello - ID: ' + Req.Params.Items['id']);
  end);

THorse.Get('/(\d{5})',
  procedure(Req: THorseRequest; Res: THorseResponse)
  begin
    Res.Send('Hello - ID: ' + Req.RawWebRequest.PathInfo);
  end);
  • ⭐ ed21e211e8e4da2313d2d348c3e232bd37f47668 Adicionado o KeepAlive no provider VCL, LCL e DAEMON Added KeepAlive in VCL, LCL and DAEMON provider
THorse.KeepConnectionAlive := True;
  • ⭐ c235bcaacd17b1c0673451bcdb46eee43cb67387 Adicionado as propriedades CipherList e DHParamsFile (Diffie–Hellman) na IOHandleSSL Added Cipher List and DHParams File (Diffie–Hellman) properties in IOHandleSSL
THorse.IOHandleSSL
  .DHParamsFile('')
  .CipherList('');
  • ⭐ a95e9b72c4a3fd07988d7b53cdc5fe1ac9165e25 Adição do campo Hint na classe de exceção EHorseException, para descrever a solução do erro Added a Hint field in the EHorseException exception class to describe the error solution
raise EHorseException.New.Hint('');
  • ⭐ e5dc69cf3119591768f13c2c0dea60ae69a9c33b Possibilidade de excluir um header do response Possibility to exclude a response header
Res.RemoveHeader('');
  • ⭐ 413a10423474433f09de3ef680930b823c9f8917 Endpoint genérico para responder a qualquer chamada não registrada Generic endpoint to answer any unregistered call
THorse.All('*',
  procedure(Req: THorseRequest; Res: THorseResponse)
  begin
    Res.Send(Req.PathInfo);
  end);
  • ⭐ ae4b30fd90e9cb04bb9fadada8e9cfb0365c8f69 Adicionada as funções Host, PathInfo e ContentType na THorseRequest Added Host, PathInfo and ContentType functions in THorseRequest
Req.Host;
Req.PathInfo;
Req.ContentType;
  • ✔ f29a9f9f778d75b2b5a26c3f6a056b54241ba9a3 Refatoração da unit Horse.Core.Files para utilização da classe THorseMimeTypes da unit Horse.Mime Refactoring of the Horse.Core.Files unit to use the THorseMimeTypes class of the Horse.Mime unit

  • ✔ 73b6bd0c8886344d92bf52eab6fb12a7aaf218f8 Refatoração da unit Horse.Response para utilização da classe THorseMimeTypes da unit Horse.Mime Refactoring of the Horse.Response unit to use the THorseMimeTypes class of the Horse.Mime unit

  • ✔ 378af0a7b0d84ba18fc124f3fc3070bce796618e Melhorias no código Code improvements

  • ✔ dcb1b6392412c864273c5549d59fdcd498755c13 Agora o Horse vai definir o position igual a zero por padrão na função SendFile e a passagem do nome do arquivo se tornou opcional Now Horse will set position equal to zero by default in the SendFile function and passing the file name has become optional

  • ✔ b15e33373afdd39f3ac348b23400972e7aea0bef Agora o Horse vai definir o position igual a zero por padrão na função Download Now Horse will set the position equal to zero by default in the Download function

  • ✔ 6c6be4f31417be4e639b3c06d31576435483570a Implementação da interface IHorseProviderIOHandleSSL e refatoração do código Implementing the IHorseProviderIOHandleSSL interface and refactoring the code

// Antes / Old
THorse.IOHandleSSL.KeyFile := leKey.Text;
THorse.IOHandleSSL.CertFile := leCrt.Text;
THorse.IOHandleSSL.OnGetPassword := Self.OnGetPassword;
THorse.IOHandleSSL.SSLVersions := [sslvTLSv1_2];
THorse.IOHandleSSL.Active := True;

// Agora / New
THorse.IOHandleSSL
  .KeyFile(leKey.Text)
  .CertFile(leCrt.Text)
  .OnGetPassword(Self.OnGetPassword)
  .SSLVersions([sslvTLSv1_2])
  .Active(True);
  • ✔ 14e88c6525c7f71621b9d34ae00dbe0f189e94e4 Adicionado um atalho para a classe THorseMimeTypes na unit principal do Horse Added a shortcut for the THorseMimeTypes class in the main Horse unit

  • ✔ b0bea0f1e1c2aed3bf260dfa53469d8e637bfabb Preenchimento da propriedade Message ao definir o erro de uma exceção do Horse Completion of the Message property when defining the error of a Horse exception

  • ✔ 8794e0f466b188731abc9bce484033612ab3a1e1 Ajustes dos exemplos e remoção de hints e warnings do Horse no lazarus Example tweaks and removal of Horse hints and warnings in lazarus

  • ✔ be629fbe3dc7124ec582fd04e3bdfb830651319d Remoção de Hints Removing Hints

  • ✔ 86846502b56c9a3327ac6bc3f42d56129ef37622 Remoção do parâmetro no callback do THorse.Listen Removal of the parameter in the THorse.Listen callback

// Antes / Old
THorse.Listen(9000,
  procedure(Horse: THorse)
  begin
    Writeln(Format('Server is runing on %s:%d', [Horse.Host, Horse.Port]));
    Readln;
  end);

// Agora / New
THorse.Listen(9000,
  procedure
  begin
    Writeln(Format('Server is runing on %s:%d', [THorse.Host, THorse.Port]));
    Readln;
  end);
  • ✔ ee33a2ab922c4a5172b387758db1bb268c959e37 eb995d470112fa7d1ee97a7c1007eddb37b0c958 Alterações referentes ao novo FPC Changes related to the new FPC

  • 🔺 9678960c4ac6cab1ab25a957e76b4b2e040fa14c Ajustes na unit Horse.Provider.FPC.LCL para não congelar a tela quando executar (Contribuição do Alexandre Magno) Adjustments in the Horse.Provider.FPC.LCL unit to not freeze the screen when running (Contributed by Alexandre Magno)

  • 🔺 76dc02edc369a6031a6054cb7da85fbb125b364f Correção da falha ao ler os headers no Apache com Delphi Fixed crash when reading headers in Apache with Delphi

  • 🔺 d69190ed2d46f3971a1c050fc32ddfef6ab092c9 Ajustes para compilação no Lazarus Lazarus build tweaks

  • 🔺 cc35d4dc61fe0aaa58ae8b37cb8c6368e5be684b Correção do erro ao ler os parâmetros do formulário no Delphi Seattle Fixed error when reading form parameters in Delphi Seattle

  • 🔺 039bbe0ccceba1e7e2df75726cb00b3f7e4dce5c 118dcc1893be37d7ac5dde7e970390f1e1385d79 Correção no exemplo para definição das rotas Correction in the example for defining routes

  • 🔺 be376bceedf03daec8eb90b7fbb0de5c3c776308 5d43ba692e82b804bbec6c248f47777bc1411e58 Correção do erro ao ler os headers no CGI Fixed error when reading headers in CGI

  • 🔺 b6e3ea5284a8ae043082546292c670267868cefb f63e3db46c151cd047d1dfd375bbf85ce81aeb61 22519149cc48b8465fdb93001fe8f8ac672f8a28 Correção na leitura do PathInfo com CGI quando o PathInfo estiver vazio Fix for reading PathInfo with CGI when PathInfo is empty

Jhonson

Basic Authentication

  • 🔺 0cd4d3f7feadaaafb255a667f1182e121fae6d9c O header de autenticação no módulo Apache deve ser lido de "Raw WebRequest" The authentication Header under Apache Module must be readed from "RawWebRequest"

JWT

Exception

  • c2186f9d78310aa8ebb864401ac8ead008d85bb2 Refatoração do código de geração do JSON da classe de erro EHorseException, para utilizar o método ToJSON da classe EHorseException Refactoring of the JSON generation code of the EHorseException error class, to use the ToJSON method of the EHorseException class

  • 🔺 567f8d763d4d9ecd66325c6dd41f7364727e0841 Ajuste para compilação Lazarus Tweak for Lazarus build

Logger

3.0.2

1 year ago

Horse 3.0.2

  • ⭐ f6cbe82d0fdd1ae7bc9dc98ec9e9474b64561447 Suporte ao LHS Brackets LHS Brackets support

Example: http://localhost:9000/ping?test[eq]=1234&test[lt]=321&test[ne]=111

procedure GetPing(Req: THorseRequest; Res: THorseResponse);
var
  LPong: TJSONArray;
  LLhsBracketType: TLhsBracketsType;
  LJson: TJSONObject;
begin
  THorseCoreParamConfig.GetInstance.CheckLhsBrackets(True);

  LPong := TJSONArray.Create;
  for LLhsBracketType in Req.Query.Field('test').LhsBrackets.Types do
  begin
    LJson := TJSONObject.Create;
    LJson.Add(Format('test %s =', [LLhsBracketType.ToString]) , Req.Query.Field('test').LhsBrackets.GetValue(LLhsBracketType));
    LPong.Add(LJson);
  end;

  Res.Send(LPong.AsJSON);
end;
  • ⭐ f3650b7feb341897194bd67bf59a24a69d44947b Opção para pegar o ContentField como Stream Option to get ContentField as Stream
Req.ContentFields.Field('paramName').AsStream;
  • ⭐ 6777a47e429140140d92831ba5e816ad27b501a8 Opção para salvar ContentField como arquivo Option to save ContentField as file
Req.ContentFields.Field('paramName').SaveToFile('C:\file.txt');
  • ⭐ 9a11717633dbbf7221797be43e9032941a1dadc8 Possibilidade de adicionar um Header sem acessar o RawWebResponse Possibility to add a Header without accessing RawWebResponse
// before
Res.RawWebResponse.SetCustomHeader('', '');

// after
Res.AddHeader('', '');
  • ⭐ c415c52cc347b9f5c04d0eec0e6a266d1c702c2e Possibilidade de passar apenas os parâmetros necessários no callback dos endpoints no Lazarus Possibility to pass only the necessary parameters in the callback of the endpoints in Lazarus
procedure GetPing(Req: THorseRequest; Res: THorseResponse; Next: TNextProc);
begin
  Res.Send('Req, Res, Next');
end;

procedure GetPing1(Req: THorseRequest; Res: THorseResponse);
begin
  Res.Send('Req, Res');
end;

procedure GetPing2(Req: THorseRequest);
begin
  WriteLn('Req');
end;

begin
  THorse.Get('/ping', GetPing);
  THorse.Get('/ping1', GetPing1);
  THorse.Get('/ping2', GetPing2);

  THorse.Listen(9000);
end.
  • ⭐ 81ef2b605313665c3be582ccce78fe8e1732ee0e Método "All" (Equivale a todos os verbos HTTP) "All" method (Equivalent to all HTTP verbs)
THorse.All('/users', DoUsers);
  • ⭐ b4151dd67039ed25b35ce34ad52fd560bf1cdab7 Novos métodos de retorno New return methods
Res.SendFile('E:\temp\foto.jpg');
Res.Download('E:\temp\foto.jpg');
Res.Render('E:\Temp\Client.html');
  • 🔺 edfc02c049efb4e37c6812655dbd77f3718c15a9 Correção da falha no SkipRoutes dos middlewares Basic Auth e JWT Fixed SkipRoutes crash in Basic Auth and JWT middleware

3.0.1

1 year ago

Horse 3.0.1

  • ⭐ 8f46ee306bcebe9564d3dd415143f1ede56083cc Adicionado uma função para pegar a versão atual do framework Horse Added a function to get the current version of the Horse framework
  THorse.Version;
  • ⭐ 08614722a877550d7c4f7f084908d330c0d171a6 Adicionado a opção de adicionar mais de um callback por rota Added the option to add more than one callback per route
  THorse
    .AddCallbacks([Callback1, Callback2, Callback3])
    .Get('/users', DoListUsers);
  • ⭐ 079c9e67dfc29934c3204267a8b8be29f63b1112 Agora o THorse.Group aceita a passagem de callbacks sem a necessidade de informar todos os parâmetros (Req, Res e Next) Now THorse.Group accepts passing callbacks without having to inform all parameters (Req, Res and Next)
  • ⭐ eab6232ce204e9e056df313a5dd848a68c1a6ff6 Agora o THorse.Route aceita a passagem de callbacks sem a necessidade de informar todos os parâmetros (Req, Res e Next) Now THorse.Route accepts passing callbacks without having to inform all parameters (Req, Res and Next)
  • ⭐ ecc1af651494ec72e39490b019db368cfc660c26 https://github.com/HashLoad/horse/issues/240 Adicionado os métodos TryGetSession e Contains na classe THorseSessions Added TryGetSession and Contains methods in THorseSessions class
  • ✔️ b80baaeac1686d1f92a0ab2ca652a2600ee34084 2c5250613613c122e9ebab50fa560ce857461d92 Melhorias no código Code improvements
  • ✔️ f40b1a097489211b859d75f491db034f25fdcc8e Remoção da função GetDefaultInstance Removed GetDefaultInstance function

3.0.0

2 years ago

Horse 3.0.0

Live de lançamento em português: Youtube Launch live in Portuguese: Youtube

  • ⭐https://github.com/HashLoad/horse/pull/230 Adicionado um exemplo de como visualizar os memory leaks em uma aplicação console Added an example of how to view memory leaks in a console application
  • ⭐Adicionado uma função para pegar a lista de headers enviados na requisição Added a function to get the list of headers sent in the request
  THorse.Get('/headers',
    procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
    var
      LData: TJSONObject;
      LHeader: TPair<string, string>;
    begin
      LData := TJSONObject.Create;
      for LHeader in Req.Headers.ToArray do
        LData.AddPair(LHeader.Key, LHeader.Value);
      Res.Send(LData);
    end);
  • ⭐https://github.com/HashLoad/horse/pull/178 Implementado uma classe de sessão (antigamente só tinha uma variável de sessão) Implemented a session class (previously only had a session variable)
  • ⭐https://github.com/HashLoad/horse/pull/225 Adicionado uma opção para pegar a instância do WebModule Added an option to grab the WebModule instance
  • ⭐https://github.com/HashLoad/horse/commit/8f46ee306bcebe9564d3dd415143f1ede56083cc Adicionado uma função que retorna a versão atual do Horse Added a function that returns the current version of Horse
  • ✔️Alterado a forma de passar um middleware para uma rota específica Changed the way to pass a middleware to a specific route
  • ✔️https://github.com/HashLoad/horse/commit/facab0721fde41a77f763318a8f8cdf660057740 Remoção de deprecated (THorseHackRequest, THorseHackResponse) Removal of deprecated (THorseHackRequest, THorseHackResponse)
  • ✔️Os parâmetros (path, query e headers) não são mais case sensitive Parameters (path, query and headers) are no longer case sensitive
  • ✔️Os parâmetros (path, query e headers) não são mais do tipo THorseList Parameters (path, query and headers) are no longer of type THorseList
  • ✔️Possibilidade de informar no callback do Horse, em projetos Delphi, apenas o que for usar Possibility to inform in the Horse callback, in Delphi projects, only what to use
  THorse.Get('/requests',
    procedure(Req: THorseRequest)
    begin
      // default status code 204 NoContent
    end);

  THorse.Get('/responses',
    procedure(Res: THorseResponse)
    begin
      Res.Send('ok');
    end);

  THorse.Get('/requests/responses',
    procedure(Req: THorseRequest; Res: THorseResponse)
    begin
      Res.Send('ok');
    end);
  • ✔️https://github.com/HashLoad/horse/commit/a490433e51658832c5b4cde59ea15e21f1090644 Alteração na classe EHorseException Change in the EHorseException class
  • 🔺Erro quando na requisição vinha dois parâmetros com o mesmo nome Error when the request came with two parameters with the same name
http://localhost:9000/ping?nome=vinicius&nome=sanchez

Jhonson

  • ✔️https://github.com/HashLoad/jhonson/pull/12 Tratamento para verificar se o JSON é um JSON válido Handling to check if JSON is valid JSON

horse-basic-auth

  • ⭐https://github.com/HashLoad/horse-basic-auth/commit/3180ae97ef4b242a999cd8bd4a24fe923481bd8a Exemplo rodando no Lazarus Example running on Lazarus
  • ⭐https://github.com/HashLoad/horse-basic-auth/commit/d3513cc16739cea610e5d1f504c809111fef4093 Implementado a opção para ignorar rotas Implemented option to ignore routes
  • 🔺https://github.com/HashLoad/horse-basic-auth/commit/bdd7153e9740b4e166038e5975f49c107c152fb9 Ajustado erro no ISAPI Fixed error in ISAPI
  • 🔺https://github.com/HashLoad/horse-basic-auth/commit/3dbe145fc6fa46667f78afbe12c4e49128e180da Quando o usuário tinha um espaço, a autenticação apresentava erro When the user had a space, authentication got an error
  • 🔺https://github.com/HashLoad/horse-basic-auth/issues/10 Authentication not found in Apache 2.2.x Authentication not found in Apache 2.2.x

horse-octet-stream

  • ✔️Melhoria na documentação (Github) Improved documentation (Github)

horse-cors

  • ⭐https://github.com/HashLoad/horse-cors/issues/6 Exemplo rodando no Lazarus Example running on Lazarus
  • ⭐https://github.com/HashLoad/horse-cors/issues/5 Exemplo rodando no Delphi Example running in Delphi
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)

horse-logger

  • ✔️Melhoria na documentação (Github) Improved documentation (Github)

horse-logger-provider-logfile

  • ⭐https://github.com/HashLoad/horse-logger/pull/10 Adicionado a opção para pegar o content da requisição e da resposta na geração do log Added option to get request and response content in log generation
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)
  • ✔️https://github.com/HashLoad/horse-logger-provider-logfile/commit/a75664058cc5fa0aa088d067e1a9737d367bf81e Criação do diretório para salvar o arquivo de forma automática caso não exista Creating the directory to automatically save the file if it does not exist

horse-logger-provider-console

  • ⭐https://github.com/HashLoad/horse-logger/pull/10 Adicionado a opção para pegar o content da requisição e da resposta na geração do log Added option to get request and response content in log generation
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)

handle-exception

  • ⭐https://github.com/HashLoad/handle-exception/commit/aa6c9928e774e8b01cf2ca3c0922f7ec3b4829dd Exemplo rodando no Lazarus Example running on Lazarus
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)
  • 🔺https://github.com/HashLoad/handle-exception/commit/5f21d3c43db5d8aeb2622f2bfcfd04c80a50e829 Manter o status code quando informado Maintain status code when informed

horse-compression

  • ⭐https://github.com/HashLoad/horse-compression/commit/72d05bca56d5b4e38f366e065be30770e7bf3ba3 Exemplo rodando no Lazarus Example running on Lazarus
  • ⭐https://github.com/HashLoad/horse-compression/commit/64dce705c1e3a52983f1a2ca908fdebdadc362fd Compressão de strings String compression
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)
  • 🔺https://github.com/HashLoad/horse-compression/commit/4ed28e00c7a7d43b817a6691336859cd18ab91f2 Verificação se existe o header Accept-Encoding Check if Accept-Encoding header exists

horse-jwt

  • ⭐https://github.com/HashLoad/horse-jwt/commit/243fa47a5aa0f5e79600910c667595e03778c604 Implementado a opção para ignorar rotas Implemented option to ignore routes
  • ⭐https://github.com/HashLoad/horse-jwt/pull/23 Implementado a compatibilidade com Lazarus Implemented support for Lazarus
  • ✔️https://github.com/HashLoad/horse-jwt/commit/6baf5d5da3ca9d7e97eeec043b3d627fc78a2fb2 Alteração na interface IHorseConfigJWT Change in the IHorseConfigJWT interface
  • ✔️Melhoria na documentação (Github) Improved documentation (Github)
  • 🔺https://github.com/HashLoad/horse-jwt/commit/1e678ad358511c6c36437daf829d1db2a1d23178 Quando informado mais de um espaço entre o Bearer e o Token When informed more than one space between the Bearer and the Token

v2.0.14

2 years ago