@totalperspective/pondermatic
v1.24.1
Published
Functional effect system driven rules engine
Downloads
1,842
Readme
Pondermatic
Functional effect system-driven rules engine for Clojure/ClojureScript & Javascript
Overview
Pondermatic is a functional effect system-driven rules engine designed for use with Clojure, ClojureScript, and JavaScript. It provides a robust framework for defining and executing rules in a declarative manner. Pondermatic helps manage side effects in a predictable and composable way, making it easier to integrate with various data sources and build complex rule-based systems.
Features
- Functional effect system for managing side effects in a predictable and composable way
- Seamless integration with Clojure, ClojureScript, and JavaScript projects
- Declarative rule definitions for clear and concise rule management
- Integration with various data sources for flexible data handling
Architecture
Pondermatic's architecture consists of the following key components:
- Ruleset: Defines the rules to be executed.
- Dataset: Contains the data to be processed by the rules.
- Engine: Executes the rules on the dataset and manages the state.
Documentation
Installation
Clojure/ClojureScript
Add the following dependency to your deps.edn
file:
{:deps {tech.totalperspective/pondermatic {:mvn/version "1.11.10"}}}
JavaScript
Install via npm:
npm install @totalperspective/pondermatic
Usage
Clojure/ClojureScript
(ns example.core
(:require [pondermatic.core :as p]))
(def rules
(p/ruleset
[{:id :example-rule
:rule/when {:data/key ?value}
:rule/then {:data/new-key ?value}}]))
(def data
(p/dataset
[{:key "value"}]))
(def engine (p/->engine "example" :reset-db? true))
(-> engine
(p/|> {:->db rules})
(p/|> {:->db data})
p/stop)
JavaScript
import pondermatic from '@totalperspective/pondermatic';
// Create a new engine instance
const engine = pondermatic.createEngine('example', true);
// Define a ruleset
const rules = pondermatic.ruleset([
{
id: 'example-rule',
'rule/when': { 'data/key': '?value' },
'rule/then': { 'data/new-key': '?value' }
}
]);
// Define a dataset
const data = pondermatic.dataset([{ key: 'value' }]);
// Load the ruleset into the engine
pondermatic.sh(engine, { '->db': rules });
// Load the dataset into the engine
pondermatic.sh(engine, { '->db': data });
// Stop the engine
pondermatic.stop(engine);
Community
Roadmap
- Improved performance optimizations
- Enhanced data source integrations
- Additional rule definition capabilities
- Expanded documentation and examples
Contributing
Contributions are welcome! Please read the Contributing Guidelines for more information.
Code of Conduct
This project is governed by the Code of Conduct. By participating, you are expected to uphold this code.