Files
jube-fork/Jube.Migrations/Branches/GitHubIssueBranch95.cs
richard-churchman 20caa92619 Implemented a refactor of Inline Script functionality:
* Updated documentation for the revised Inline Script approach, aligning with context, strategy, and pipeline patterns. Inline Scripts now use a transient instance model; dependencies are assumed to exist in the context, and state is not supported.
* Added a syntax tree helper parser for VB.net and C# in the data layer, enhancing queries for request XPath fields and Inline Script properties in the UI. The syntax tree helper is a Roslyn-based parser for Inline Scripts that extracts public properties without a full compile, enabling property access in the UI for rule writing and abstraction rules.
* Inline Script properties fully supported in parser, completions for coder and builder, and abstraction rule grouping keys, with search keys synchronized via the `SearchKey` attribute.
* Refactored Inline Script methdology to be a transient instance class, merging payload values from public properties via reflection, removing the need to manually add properties.
* Added migrations to include a language identifier for Inline Scripts.
* Inline Scripts now fully support C# and Visual Basic (VB.net).
* Removed `ClassName` and `MethodName` from the `EntityAnalysisInlineScript` table, now derived from the IInlineScript interface.
* Updated Activation Rule Library to fall back to Inline Script properties if Latitude and Longitude are not specified in the Request XPath.
* Moved Inline Script execution to asynchronous methods to avoid blocking IO during potential remote calls; updated reflection helpers accordingly.
* Renamed variables to better match POCO conventions, as came across them.
* Updated assembly loading for Inline Scripts to include all assemblies in the Jube.App context.
* Optimized Inline Script synchronization to reduce unnecessary reflection during invocation.
* Created Jube.Sandbox for testing and deploying Inline Scripts outside the main application.
* Updated Inline Script OTP demo code new Inline Script Interface signature.
2026-01-11 16:14:54 +02:00

80 lines
3.1 KiB
C#

/* Copyright (C) 2022-present Jube Holdings Limited.
*
* This file is part of Jube™ software.
*
* Jube™ is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* Jube™ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License along with Jube™. If not,
* see <https://www.gnu.org/licenses/>.
*/
namespace Jube.Migrations.Branches
{
using FluentMigrator;
[Migration(20260102110500)]
public class GitHubIssueBranch95 : Migration
{
public override void Up()
{
Alter.Table("EntityAnalysisInlineScript")
.AddColumn("LanguageId")
.AsByte().Nullable();
Delete.Column("ClassName").FromTable("EntityAnalysisInlineScript");
Delete.Column("MethodName").FromTable("EntityAnalysisInlineScript");
const string code = """
Imports System
Imports System.Net.Http
Imports System.Threading
Imports System.Threading.Tasks
Imports Newtonsoft.Json.Linq
Imports Jube.Engine.Attributes
Imports Jube.Engine.EntityAnalysisModelInvoke.Context
Imports Jube.Engine.Interfaces
Public Class IssueOTP
Implements IInlineScript
Public Property OTP As String
Public Async Function ExecuteAsync(context As Context) As Task Implements IInlineScript.ExecuteAsync
OTP = RandomDigits(6)
End Function
Private Function RandomDigits(ByVal length As Integer) As String
Dim random = New Random()
Dim s As String = String.Empty
For i As Integer = 0 To length - 1
s = String.Concat(s, random.[Next](10).ToString())
Next
Return s
End Function
End Class
""";
Update.Table("EntityAnalysisInlineScript").Set(new
{
LanguageId = 1
}).AllRows();
Update.Table("EntityAnalysisInlineScript").Set(new
{
Code = code
}).Where(new
{
Id = 1
});
}
public override void Down()
{
}
}
}