Module: Familia::Features::Relationships
- Defined in:
- lib/familia/features/relationships.rb,
lib/familia/features/relationships/indexing.rb,
lib/familia/features/relationships/participation.rb,
lib/familia/features/relationships/score_encoding.rb,
lib/familia/features/relationships/collection_operations.rb,
lib/familia/features/relationships/indexing_relationship.rb,
lib/familia/features/relationships/participation_relationship.rb,
lib/familia/features/relationships/participation/target_methods.rb,
lib/familia/features/relationships/indexing/multi_index_generators.rb,
lib/familia/features/relationships/indexing/unique_index_generators.rb,
lib/familia/features/relationships/participation/participant_methods.rb
Overview
Unified Relationships feature for Familia v2
This feature merges the functionality of relatable_objects and relationships into a single, Valkey/Redis-native implementation that embraces the "where does this appear?" philosophy rather than "who owns this?".
Defined Under Namespace
Modules: CollectionOperations, Indexing, ModelClassMethods, ModelInstanceMethods, ParticipantMethods, Participation, ScoreEncoding, TargetMethods Classes: CascadeError, InvalidIdentifierError, InvalidScoreError, RelationshipError
Constant Summary collapse
- IndexingRelationship =
IndexingRelationship
Stores metadata about indexing relationships defined at class level. Used to configure code generation and runtime behavior for unique_index and multi_index declarations.
Similar to ParticipationRelationship but for attribute-based lookups rather than collection membership.
Data.define( :field, # Symbol - field being indexed (e.g., :email, :department) :index_name, # Symbol - name of the index (e.g., :email_index, :dept_index) :target_class, # Class/Symbol - parent class for instance-scoped indexes (within:) :cardinality, # Symbol - :unique (1:1) or :multi (1:many) :query # Boolean - whether to generate query methods ) do # # Get the normalized config name for the target class # # @return [String] The config name (e.g., "user", "company", "test_company") # def target_class_config_name target_class.config_name end end
- ParticipationRelationship =
ParticipationRelationship
Stores metadata about participation relationships defined at class level. Used to configure code generation and runtime behavior for participates_in and class_participates_in declarations.
Data.define( :target_class, # Class object that owns the collection :collection_name, # Symbol name of the collection (e.g., :members, :domains) :score, # Proc/Symbol/nil - score calculator for sorted sets :type, # Symbol - collection type (:sorted_set, :set, :list) :bidirectional, # Boolean - whether to generate reverse methods ) do # # Get the normalized config name for the target class # # @return [String] The config name (e.g., "user", "perf_test_customer") # def target_class_config_name target_class.config_name end end
Class Method Summary collapse
-
.included(base) ⇒ Object
Feature initialization.
Class Method Details
.included(base) ⇒ Object
Feature initialization
86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/familia/features/relationships.rb', line 86 def self.included(base) Familia.ld "[#{base}] Relationships included" base.extend ModelClassMethods base.include ModelInstanceMethods # Include all relationship submodules and their class methods base.include ScoreEncoding base.include Participation base.extend Participation::ModelClassMethods base.include Indexing base.extend Indexing::ModelClassMethods end |