Security News
Maven Central Adds Sigstore Signature Validation
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
= Arboreal
Arboreal is yet another extension to ActiveRecord to support tree-shaped data structures.
Arboreal surfaces relationships within the tree like +children+, +ancestors+, +descendants+, and +siblings+ as scopes, so that additional filtering/pagination can be performed.
It delegates as much work as possible to the underlying DBMS, making it efficient to:
== Getting started
First, install the "arboreal" gem, and add it to your Rails project's config/environment.rb.
Next, you'll need a migration to add +parent_id+ and +ancestry_string+ columns, and indices:
class MakeThingsArboreal < ActiveRecord::Migration
def self.up
add_column "things", "parent_id", :integer
add_index "things", ["parent_id"]
add_column "things", "ancestry_string", :string
add_index "things", ["ancestry_string"]
end
def self.down
remove_index "things", ["ancestry_string"]
remove_column "things", "ancestry_string"
remove_index "things", ["parent_id"]
remove_column "things", "parent_id"
end
end
Finally, you can declare your model arboreal:
class Thing < ActiveRecord::Base
acts_arboreal
# .. etc etc ...
end
== Navigating the tree
Arboreal adds the basic relationships you'd expect:
In addition, it provides the following handy methods on each tree-node:
The first four return scopes, to which additional filtering, ordering or limits may be applied.
At the class-level:
== Rebuilding the ancestry cache
Internally, Arboreal uses the +ancestry_string+ column to cache the path down the tree to each node (or more correctly, it's parent. This technique - a variant of "path enumeration" or "materialized paths" - allows efficient retrieval of both ancestors and descendants.
It's conceivable that the computed ancestry-string values may get out of whack, particularly if changes are made directly to the database. If you suspect corruption, you can restore sanity using rebuild_ancestry, e.g
Thing.rebuild_ancestry
The ancestry rebuild is implemented in SQL to leverage the underlying DBMS, and so is pretty efficient, even on large trees.
FAQs
Unknown package
We found that arboreal demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.