Module: Familia

Extended by:
Connection, IdentifierExtractor, Logging, SecureIdentifier, Settings, Utils
Defined in:
lib/familia.rb,
lib/familia/base.rb,
lib/familia/utils.rb,
lib/familia/errors.rb,
lib/familia/horreum.rb,
lib/familia/logging.rb,
lib/familia/features.rb,
lib/familia/settings.rb,
lib/familia/data_type.rb,
lib/familia/migration.rb,
lib/familia/connection.rb,
lib/familia/encryption.rb,
lib/familia/field_type.rb,
lib/familia/horreum/utils.rb,
lib/familia/migration/base.rb,
lib/familia/instrumentation.rb,
lib/familia/json_serializer.rb,
lib/familia/migration/model.rb,
lib/familia/schema_registry.rb,
lib/familia/horreum/settings.rb,
lib/familia/migration/errors.rb,
lib/familia/migration/runner.rb,
lib/familia/migration/script.rb,
lib/familia/secure_identifier.rb,
lib/familia/data_type/settings.rb,
lib/familia/encryption/manager.rb,
lib/familia/features/safe_dump.rb,
lib/familia/horreum/connection.rb,
lib/familia/horreum/definition.rb,
lib/familia/horreum/management.rb,
lib/familia/migration/pipeline.rb,
lib/familia/migration/registry.rb,
lib/familia/connection/behavior.rb,
lib/familia/connection/handlers.rb,
lib/familia/encryption/provider.rb,
lib/familia/encryption/registry.rb,
lib/familia/features/expiration.rb,
lib/familia/horreum/persistence.rb,
lib/familia/data_type/connection.rb,
lib/familia/data_type/types/lock.rb,
lib/familia/identifier_extractor.rb,
lib/familia/migration/rake_tasks.rb,
lib/familia/connection/middleware.rb,
lib/familia/connection/operations.rb,
lib/familia/features/quantization.rb,
lib/familia/horreum/serialization.rb,
lib/familia/refinements/dear_json.rb,
lib/familia/thread_safety/monitor.rb,
lib/familia/verifiable_identifier.rb,
lib/familia/features/relationships.rb,
lib/familia/horreum/related_fields.rb,
lib/familia/data_type/class_methods.rb,
lib/familia/data_type/serialization.rb,
lib/familia/data_type/types/counter.rb,
lib/familia/data_type/types/hashkey.rb,
lib/familia/data_type/types/listkey.rb,
lib/familia/encryption/request_cache.rb,
lib/familia/connection/operation_core.rb,
lib/familia/connection/pipelined_core.rb,
lib/familia/data_type/types/stringkey.rb,
lib/familia/encryption/encrypted_data.rb,
lib/familia/features/encrypted_fields.rb,
lib/familia/features/transient_fields.rb,
lib/familia/horreum/database_commands.rb,
lib/familia/refinements/stylize_words.rb,
lib/familia/refinements/time_literals.rb,
lib/familia/data_type/types/sorted_set.rb,
lib/familia/features/object_identifier.rb,
lib/familia/features/schema_validation.rb,
lib/familia/connection/transaction_core.rb,
lib/familia/data_type/database_commands.rb,
lib/familia/data_type/types/unsorted_set.rb,
lib/familia/features/external_identifier.rb,
lib/familia/data_type/types/json_stringkey.rb,
lib/familia/features/expiration/extensions.rb,
lib/familia/features/relationships/indexing.rb,
lib/familia/thread_safety/instrumented_mutex.rb,
lib/familia/connection/individual_command_proxy.rb,
lib/familia/features/relationships/participation.rb,
lib/familia/encryption/providers/aes_gcm_provider.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/encrypted_fields/encrypted_field_type.rb,
lib/familia/features/transient_fields/transient_field_type.rb,
lib/familia/features/relationships/participation_membership.rb,
lib/familia/encryption/providers/xchacha20_poly1305_provider.rb,
lib/familia/features/relationships/participation_relationship.rb,
lib/familia/features/relationships/indexing/rebuild_strategies.rb,
lib/familia/features/relationships/participation/target_methods.rb,
lib/familia/features/relationships/indexing/multi_index_generators.rb,
lib/familia/encryption/providers/secure_xchacha20_poly1305_provider.rb,
lib/familia/features/relationships/indexing/unique_index_generators.rb,
lib/familia/features/relationships/participation/participant_methods.rb,
lib/familia/features/relationships/participation/through_model_operations.rb

Overview

lib/familia/features/relationships/participation/through_model_operations.rb

frozen_string_literal: true

Defined Under Namespace

Modules: Base, Connection, Encryption, Features, IdentifierExtractor, Instrumentation, JsonSerializer, Logging, Migration, Refinements, SecureIdentifier, Settings, ThreadSafety, Utils, VerifiableIdentifier Classes: AutoloadError, Counter, CreationError, DataType, EncryptedFieldType, EncryptionError, FamiliaLogger, FieldType, FieldTypeError, HashKey, Horreum, HorreumError, JsonSchemerValidator, JsonStringKey, KeyNotFoundError, ListKey, Lock, LogFormatter, NestedTransactionError, NoConnectionAvailable, NoIdentifier, NonUniqueKey, NotConnected, NotDistinguishableError, NotFound, NullValidator, OperationModeError, OptimisticLockError, PersistenceError, Problem, RecordExistsError, SchemaRegistry, SchemaValidationError, SerializerError, SortedSet, StringKey, TransientFieldType, UnknownFieldError, UnsortedSet

Constant Summary collapse

FeatureDefinition =
Data.define(:name, :depends_on, :field_group)
VALID_STRATEGIES =
%i[raise skip ignore warn overwrite].freeze
RelatedFieldDefinition =
Data.define(:name, :klass, :opts)

Constants included from Connection

Connection::DefaultConnectionHandler

Class Attribute Summary collapse

Attributes included from Connection

#connection_provider, #uri

Attributes included from Connection::Middleware

#enable_database_counter, #enable_database_logging

Attributes included from Settings

#current_key_version, #default_expiration, #delim, #encryption_keys, #encryption_personalization, #logical_database, #prefix, #schema_path, #schema_validator, #schemas, #suffix, #transaction_mode

Class Method Summary collapse

Methods included from SecureIdentifier

generate_id, generate_lite_id, generate_trace_id, shorten_to_trace_id, truncate_hex

Methods included from Connection

build_connection_chain, create_dbclient, dbclient, normalize_uri

Methods included from Connection::Operations

#pipelined, #transaction, #with_dbclient, #with_isolated_dbclient

Methods included from Connection::Middleware

#clear_fiber_connection!, #fiber_connection=, #increment_middleware_version!, #middleware_version, #reconnect!

Methods included from Settings

configure, default_suffix, pipelined_mode, pipelined_mode=

Methods included from Logging

debug, error, extended, info, logger, logger=, trace, warn

Methods included from Utils

dbkey, join, now, now_in_μs, pretty_path, pretty_stack, qstamp, serverid, split

Methods included from IdentifierExtractor

identifier_extractor

Class Attribute Details

.debug=(value) ⇒ Object (writeonly)

Sets the attribute debug

Parameters:

  • value

    the value to set the attribute debug to.



47
48
49
# File 'lib/familia.rb', line 47

def debug=(value)
  @debug = value
end

.membersObject (readonly)

Returns the value of attribute members.



48
49
50
# File 'lib/familia.rb', line 48

def members
  @members
end

Class Method Details

.clear_anonymous_membersArray<Class>

Remove all anonymous/test classes from members array. Anonymous classes have nil names, which cause issues in member_by_config_name.

Returns:

  • (Array<Class>)

    The removed anonymous classes



124
125
126
127
128
129
# File 'lib/familia.rb', line 124

def clear_anonymous_members
  anonymous_classes = @members.select { |m| m.name.nil? }
  Familia.debug "[clear_anonymous_members] Removing #{anonymous_classes.size} anonymous classes"
  @members.reject! { |m| m.name.nil? }
  anonymous_classes
end

.configure {|_self| ... } ⇒ Object

A convenience pattern for configuring Familia.

Examples:

Familia.configure do |config|
  config.debug = true
  config.enable_database_logging = true
end

Yields:

  • (_self)

Yield Parameters:

  • _self (Familia)

    the object that the method was called on



96
97
98
# File 'lib/familia.rb', line 96

def configure
  yield self
end

.debug?Boolean

Checks if debug mode is enabled

e.g. Familia.debug = true

Returns:

  • (Boolean)

    true if debug mode is on, false otherwise



105
106
107
# File 'lib/familia.rb', line 105

def debug?
  @debug == true
end

.resolve_class(target) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
# File 'lib/familia.rb', line 75

def resolve_class(target)
  case target
  when Class
    target
  when ::String, Symbol
    config_name = target.to_s.demodularize.snake_case
    member_by_config_name(config_name)
  else
    raise ArgumentError, "Expected Class, String, or Symbol, got #{target.class}"
  end
end

.start_monitoring!Object



55
56
57
# File 'lib/familia.rb', line 55

def start_monitoring!
  thread_safety_monitor.start!
end

.stop_monitoring!Object



59
60
61
# File 'lib/familia.rb', line 59

def stop_monitoring!
  thread_safety_monitor.stop!
end

.test_mode?Boolean

Check if we're in test mode by looking for test-related constants or environment variables

Returns:

  • (Boolean)

    true if running in test mode



135
136
137
# File 'lib/familia.rb', line 135

def test_mode?
  defined?(Tryouts) || ENV['FAMILIA_TEST_MODE'] == 'true'
end

.thread_safety_metricsObject



67
68
69
# File 'lib/familia.rb', line 67

def thread_safety_metrics
  thread_safety_monitor.export_metrics
end

.thread_safety_monitorObject

Thread safety monitoring controls



51
52
53
# File 'lib/familia.rb', line 51

def thread_safety_monitor
  ThreadSafety::Monitor.instance
end

.thread_safety_reportObject



63
64
65
# File 'lib/familia.rb', line 63

def thread_safety_report
  thread_safety_monitor.report
end

.unload_member(klass) ⇒ Class?

Remove a member class from the members array. Used for test cleanup to prevent anonymous classes from polluting the global registry.

Parameters:

  • klass (Class)

    The class to remove from members

Returns:

  • (Class, nil)

    The removed class or nil if not found



115
116
117
118
# File 'lib/familia.rb', line 115

def unload_member(klass)
  Familia.debug "[unload_member] Removing #{klass} from members"
  @members.delete(klass)
end