Module: Familia

Extended by:
Connection, Distinguisher, 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/connection.rb,
lib/familia/encryption.rb,
lib/familia/field_type.rb,
lib/familia/horreum/core.rb,
lib/familia/distinguisher.rb,
lib/familia/json_serializer.rb,
lib/familia/secure_identifier.rb,
lib/familia/data_type/commands.rb,
lib/familia/encryption/manager.rb,
lib/familia/features/safe_dump.rb,
lib/familia/horreum/core/utils.rb,
lib/familia/connection/handlers.rb,
lib/familia/encryption/provider.rb,
lib/familia/encryption/registry.rb,
lib/familia/features/expiration.rb,
lib/familia/data_type/types/lock.rb,
lib/familia/connection/middleware.rb,
lib/familia/connection/operations.rb,
lib/familia/features/quantization.rb,
lib/familia/refinements/dear_json.rb,
lib/familia/verifiable_identifier.rb,
lib/familia/features/relationships.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/horreum/core/connection.rb,
lib/familia/horreum/shared/settings.rb,
lib/familia/connection/pipeline_core.rb,
lib/familia/encryption/request_cache.rb,
lib/familia/refinements/logger_trace.rb,
lib/familia/connection/operation_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/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/horreum/core/serialization.rb,
lib/familia/connection/transaction_core.rb,
lib/familia/horreum/subclass/definition.rb,
lib/familia/horreum/subclass/management.rb,
lib/familia/data_type/types/unsorted_set.rb,
lib/familia/features/external_identifier.rb,
lib/familia/features/expiration/extensions.rb,
lib/familia/horreum/core/database_commands.rb,
lib/familia/features/relationships/indexing.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/horreum/subclass/related_fields_management.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/encryption/providers/xchacha20_poly1305_provider.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/encryption/providers/secure_xchacha20_poly1305_provider.rb,
lib/familia/features/relationships/indexing/unique_index_generators.rb,
lib/familia/features/relationships/participation/participant_methods.rb

Overview

lib/familia/features/relationships/participation_relationship.rb

Defined Under Namespace

Modules: Base, Connection, Distinguisher, Encryption, Features, JsonSerializer, Logging, Refinements, SecureIdentifier, Settings, Utils, VerifiableIdentifier Classes: AutoloadError, Counter, DataType, EncryptedFieldType, EncryptionError, FieldType, FieldTypeError, HashKey, Horreum, KeyNotFoundError, ListKey, Lock, NoConnectionAvailable, NoIdentifier, NonUniqueKey, NotConnected, NotDistinguishableError, NotFound, OperationModeError, Problem, RecordExistsError, SerializerError, SortedSet, StringKey, TransientFieldType, UnsortedSet

Constant Summary collapse

FeatureDefinition =
Data.define(:name, :depends_on)
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, #suffix, #transaction_mode

Attributes included from Logging

#logger

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!, #increment_middleware_version!, #middleware_version, #set_fiber_connection

Methods included from Settings

configure, default_suffix, pipeline_mode, pipeline_mode=

Methods included from Logging

info, ld, le, trace, warn

Methods included from Utils

dbkey, join, now, pretty_path, pretty_stack, qstamp, serverid, split

Methods included from Distinguisher

distinguisher

Class Attribute Details

.debugObject

rubocop:disable ThreadSafety/ClassAndModuleAttributes



42
43
44
# File 'lib/familia.rb', line 42

def debug
  @debug
end

.membersObject (readonly)

Returns the value of attribute members.



43
44
45
# File 'lib/familia.rb', line 43

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



98
99
100
101
102
103
# File 'lib/familia.rb', line 98

def clear_anonymous_members
  anonymous_classes = @members.select { |m| m.name.nil? }
  Familia.ld "[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



70
71
72
# File 'lib/familia.rb', line 70

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



79
80
81
# File 'lib/familia.rb', line 79

def debug?
  @debug == true
end

.resolve_class(target) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/familia.rb', line 49

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

.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



109
110
111
# File 'lib/familia.rb', line 109

def test_mode?
  defined?(Tryouts) || ENV['FAMILIA_TEST_MODE'] == 'true'
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



89
90
91
92
# File 'lib/familia.rb', line 89

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