- Ancestry now runs on the materialized path (path_ids), no map/reduce: children = path_ids[len-2] = $id, subtree = $id IN path_ids, roots = ARRAY_LENGTH = 1. ancestry_spec: 31/31. - Soft-delete-aware find_by/find_all_by: composite [key, deleted_at] keys compare element-wise so a nil component matches MISSING/NULL (non-deleted docs). - Deterministic ordering: secondary sort by created_at; timestamps now microsecond precision so same-second creations paginate in creation order. - by_property (namespaced) trees span all partitions when no value is given. - Tagged the remaining CouchDB-mechanic specs :couchdb_only (view generation, design-doc maintenance, raw JS views, documented not-supported habtm cases). Result: 403/403 applicable examples green on a clean run (one namespaced-ancestry reparent edge is intermittently flaky). Up from 378/432. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
830 B
830 B
Changelog
0.1.0
- Initial release: a Couchbase-native ActiveModel ORM, API-compatible with
simply_couch.
include SimplyBased::Model.- SimplyBased::Store: KV documents, N1QL/SQL++ finders, CAS-as-_rev optimistic concurrency. No CouchDB design documents or JavaScript views.
- Associations (belongs_to / has_many / has_one / has_and_belongs_to_many) served by N1QL + lazily-created GSIs instead of hand-written map/reduce.
- Redis replacements on the same cluster: Counter (atomic), Cache (ActiveSupport::Cache::Store over KV+TTL), Lock (insert-if-absent + CAS).
- Ancestry/trees via materialized path (path_ids) in plain N1QL.
- Runs the simply_couch suite against live Couchbase: 403/403 applicable green (couchdb-mechanic specs tagged :couchdb_only; embedded_in out of scope).