สร้างด้วย ❤︎ โดย Hiukky
Grule เป็นกลไกขั้นต่ำสำหรับการทดสอบเงื่อนไขกับค่าโดยใช้รูปแบบ JSON วัตถุประสงค์หลักคือทำงานเป็นกลไก Rete และเพื่อแก้ไขการดำเนินการทั้งหมดอย่างมีประสิทธิภาพและเรียบง่าย
npm i grule
yarn add grule
หากต้องการตั้งค่ารูปแบบกฎของคุณ เพียงทำตามขั้นตอนด้านล่าง
หากต้องการสร้างอินสแตนซ์ทดสอบ คุณจะต้องมีข้อเท็จจริงมากมายในการขับเคลื่อนเครื่องยนต์
// Import Engine
import { Grule } from 'grule'
// Create an type
type IUser = {
id : number
name : string
}
// Create metadata
const metadata : IUser = {
id : 3 ,
name : 'test' ,
}
// Create instance
const grule = new Grule < IUser > ( metadata )
หลังจากสร้างอินสแตนซ์ของกลไกแล้ว โดยโหลดข้อเท็จจริงไว้ล่วงหน้าแล้ว ขั้นตอนต่อไปคือการลงทะเบียนกฎ หากต้องการลงทะเบียนกฎ คุณต้องนำเข้าอินเทอร์เฟซ IRules <T>
และสร้างชุดกฎสำหรับแอตทริบิวต์ที่ประกาศในข้อเท็จจริง
กฎเกณฑ์เป็นไปตามโครงสร้างของข้อมูลที่ประกาศในข้อเท็จจริง สำหรับแต่ละแอตทริบิวต์ กฎจะถูกดำเนินการ
ฟังก์ชันการสร้างกฎมี 2 อาร์กิวเมนต์ ข้อแรกคือ attributes
และข้อที่สองคือ events
คุณสามารถใช้นิพจน์เชิงตรรกะสำหรับการทดสอบแต่ละรายการและดำเนินการตามที่คุณต้องการ หรือคุณสามารถใช้เหตุการณ์ when
และ then
เพื่อทดสอบและดำเนินการตามผลลัพธ์ นี่เป็นตัวเลือกที่ดีสำหรับการทดสอบแบบไดนามิก
หลังจากสร้างอินสแตนซ์และลงทะเบียนกฎแล้ว คุณสามารถดำเนินการวิธีการเรียกใช้ได้โดยการส่งกฎที่กำหนดเป็นพารามิเตอร์ เมื่อสิ้นสุดการทดสอบ หากไม่มีข้อผิดพลาดที่ขัดจังหวะการทดสอบ ค่าบูลีนจะถูกส่งกลับ
true
ทุกเงื่อนไขผ่านแล้วfalse
เงื่อนไขใดเงื่อนไขหนึ่งหรือทั้งหมดล้มเหลว // ... Previous code
// Create Rules
const rules : IRules < IUser > = ( { id , name } , { when } ) => ( {
id : when ( id . diff ( 1 ) ) . then ( ( ) => {
throw new Error ( 'User not allowed.' )
} ) ,
name : name . in ( [ 'foo' , 'test' ] ) ,
} )
// Enroll rules
grule . run ( rules )
คุณยังสามารถลดความซับซ้อนของโฟลว์ก่อนหน้าด้วยวิธีที่สะอาดยิ่งขึ้นได้อีกด้วย (ตัวอย่างโค้ดสุดท้าย)
// Import Engine
import { Grule } from 'grule'
// Create an type
type IUser = {
id : number
name : string
}
// Create instance
new Grule < IUser > ( {
id : 3 ,
name : 'test' ,
} ) . run ( ( { id , name } , { when } ) => ( {
id : when ( id . diff ( 1 ) ) . then ( ( ) => {
throw new Error ( 'User not allowed.' )
} ) ,
name : name . in ( [ 'foo' , 'test' ] ) ,
} ) )
แต่ละแอตทริบิวต์มี 9 วิธีสำหรับการทดสอบนั่นคือ
// Type: less(value: ILess): boolean
// Acceptable: ['number', 'bigint']
// Type: lessOrEqual(value: ILess): boolean
// Acceptable: ['number', 'bigint']
// Type: greater(value: IGreater): boolean
// Acceptable: ['number', 'bigint']
// Type: greaterOrEqual(value: IGreater): boolean
// Acceptable: ['number', 'bigint']
// Type: equal(value: IEqual): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'date']
// Type: diff(value: IEqual): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'date']
// Type: in(value: In): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'array']
// Type: notIn(value: In): boolean
// Acceptable: ['bigint', 'boolean', 'number', 'string', 'array']
// Type: eval(operator: IOperatorsList, arg1: A): boolean
// Acceptable: [Idle]
ปัจจุบัน Grule มีกิจกรรมเดียวเท่านั้นจาก when
โดยจะส่งคืนสัญญาพร้อมผลลัพธ์บูลีนจากการทดสอบที่ดำเนินการ
// Type: when(test: boolean): Promise<boolean>
// Acceptable: ['boolean']
Grule อยู่ในเวอร์ชันเริ่มต้นที่ยังไม่มีฟีเจอร์มากมาย แต่คุณสามารถส่งคำแนะนำหรือเปิด PR ได้ตามใจชอบ