Functional effect system-driven rules engine for Clojure/ClojureScript & Javascript
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.
- 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
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.
- Introduction
- Getting Started
- Installation
- Examples
- API Reference
- API Reference (JavaScript)
- Features
- Rules
Add the following dependency to your deps.edn
file:
{:deps {tech.totalperspective/pondermatic {:mvn/version "1.11.10"}}}
Install via npm:
npm install @totalperspective/pondermatic
(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)
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);
- Improved performance optimizations
- Enhanced data source integrations
- Additional rule definition capabilities
- Expanded documentation and examples
Contributions are welcome! Please read the Contributing Guidelines for more information.
This project is governed by the Code of Conduct. By participating, you are expected to uphold this code.