Skip to content

Functional effect system driven rules engine for Clojure/ClojureScript

License

Notifications You must be signed in to change notification settings

totalperspective/pondermatic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pondermatic

Functional effect system-driven rules engine for Clojure/ClojureScript & Javascript

Clojars Project npm version

JVM CLLS Browser CLJS NodeJS NodeJS

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.

About

Functional effect system driven rules engine for Clojure/ClojureScript

Resources

License

Stars

Watchers

Forks

Packages

No packages published