Functional effect system driven rules engine
npm install @totalperspective/pondermatic 
   
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
- Introduction
- Getting Started
- Installation
- Examples
- API Reference
- API Reference (JavaScript)
- Features
- Rules
- Syntax
Add the following dependency to your deps.edn file:
``clojure`
{:deps {tech.totalperspective/pondermatic {:mvn/version "1.11.10"}}}
Install via npm:
`sh`
npm install @totalperspective/pondermatic
`clojure
(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);
``