Ruby-Gem · Datentyp & Capabilities

Ein Datentyp, der sich selbst schachtelt.

Holatri stellt das Holon bereit: ein einzelnes Key/Value-Paar, das als Skalar, Liste oder benannte Menge auftritt.

Holons enthalten Holons — zusammen bilden sie eine Holarchie. Fähigkeiten wie Formeln, Suche oder Vernetzung kommen über ein schlankes Capability-System hinzu.

SINGLEein Skalar — Zahl, String, …
« CROWDeine Liste (Array)
TRIBEbenannte Menge (Hash)
Das Konzept

Ein Paar. Drei Ausprägungen. Beliebig tief.

Der Typ eines Holons ergibt sich aus seinem Wert: ein Hash wird zum TRIBE, ein Array zum CROWD, alles Übrige zum SINGLE. Verschachtelte Strukturen werden rekursiv zu Holons.

beispiel.rb
require "holatri"

# TRIBE — jeder Hash-Eintrag wird zu einem Holon
person = Holatri::Holon.new(:person, {
  name:   "Ada",
  skills: %w[ruby math],            # => CROWD
  pet:    { kind: "cat", legs: 4 }  # => TRIBE (rekursiv)
})

person.tribe?              # => true
person[:name].value        # => "Ada"
person.pet.legs.value      # => 4   (Zugriff über Namen)
person[:pet][:legs].value  # => 4   (Zugriff über den Schlüssel)

person.to_h
# => { person: { name: "Ada", skills: ["ruby", "math"],
#                 pet: { kind: "cat", legs: 4 } } }
Enumerable inklusive. Über ein CROWD werden die Elemente iteriert, über ein TRIBE die Kind-Holons, über ein SINGLE der einzelne Wert.
Capability-System

Fähigkeiten nach Bedarf — klassenweit oder pro Instanz.

Sieben mitgelieferte Capabilities. Fünf sind ab Werk aktiv, drei werden gezielt zugewiesen. Eigene lassen sich in wenigen Zeilen ergänzen.

#

Taggable

Beliebige Tags (Symbols) an einem Holon — gesetzt, geprüft, entfernt.

Standard

Shapeable

Wahrnehmungs-Zustand blurredshaped, mit Propagation an Subholons.

Standard

Delegable

Zugriff auf Kind-Holons über ihren Namen, mit Auflösung nach oben.

Standard
‹›

Inspectable

Kompakte, lesbare Darstellung mit den Indikatoren ‹ « ≈.

Standard
ƒ

Computable

Eine Formel statt eines Werts — per Shunting-Yard ausgewertet im Kontext der Holarchie.

Opt-in

Findable

Subholons gegen einen Filter prüfen: Attribute, Operatoren, und/oder/xor.

Standard

Absorbable

Daten aus einer URI laden — JSON, YAML, XML, CSV, TSV, Text.

Opt-in

Connectable

Zwei Holons verständigen sich über TCP/IP — bidirektional, mit Rückweg.

Opt-in

… und eigene

Modul registrieren, optional Abhängigkeiten angeben, fertig.

Rezept ansehen →
Computable · ƒ

Holons, die rechnen.

Ein Formula-Holon hält eine Formel als Text. Beim Abruf wird sie ausgewertet — Referenzen lösen sich über die umgebende Holarchie auf.

formeln.rb
rect = Holatri::Holon.new(:rect, {})
rect.add(Holatri::Holon.new(:w, 3))
rect.add(Holatri::Holon.new(:h, 4))
rect.add(Holatri.formula(:area, "w * h"))

rect[:area]   # => 12

# Funktionen, Klammern, Potenz, unäres Minus …
Holatri.formula(:d, "sqrt(3 ^ 2 + 4 ^ 2)").value  # => 5.0
Findable · ⌕

Suchen mit Filtern, die selbst Holons sind.

Jedes Filterkriterium ist ein Key/Value-Paar. Der Operator steckt im Schlüssel, der Referenzwert ist der Wert. Kombiniert wird mit and, or, xor.

suchen.rb
shelf.find(Holatri.filter(class: Formula))        # alle Formeln
shelf.find(Holatri.filter(gt: 5, lt: 25))         # 5 < value < 25  (UND)
shelf.find(Holatri.filter(or: [{ eq: 10 }, { eq: 30 }]))
shelf.find(Holatri.filter(value: 42), deep: true) # rekursiv
In drei Schritten

Loslegen.

Installieren

gem "holatri" in die Gemfile, dann bundle install.

Bauen

Holons aus Hash und Array erzeugen — der Typ leitet sich ab.

Erweitern

Per gain(:computable) oder klassenweit via capability.

Zur Dokumentation →