Class: DynamicActiveModel::ForeignKey

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamic-active-model/foreign_key.rb

Overview

The ForeignKey class manages foreign key relationships for a model. It provides functionality for:

  • Tracking foreign key columns

  • Generating standard foreign key names

  • Managing custom relationship names

  • Configuring the foreign key suffix

Examples:

Basic Usage

model = DB::User
fk = DynamicActiveModel::ForeignKey.new(model)
fk.add('manager_id', 'manager')

Custom Suffix

DynamicActiveModel::ForeignKey.id_suffix = '_ref'

Constant Summary collapse

DEFAULT_ID_SUFFIX =

Default suffix used for foreign key columns

'_id'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ ForeignKey

Initializes a new ForeignKey instance

Parameters:

  • model (Class)

    The model to track foreign keys for



42
43
44
45
46
# File 'lib/dynamic-active-model/foreign_key.rb', line 42

def initialize(model)
  @model = model
  @keys = {}
  add(generate_foreign_key(model.table_name))
end

Instance Attribute Details

#keysHash (readonly)

Returns Mapping of foreign key columns to relationship names.

Returns:

  • (Hash)

    Mapping of foreign key columns to relationship names



23
24
25
# File 'lib/dynamic-active-model/foreign_key.rb', line 23

def keys
  @keys
end

#modelClass (readonly)

Returns The model this foreign key belongs to.

Returns:

  • (Class)

    The model this foreign key belongs to



20
21
22
# File 'lib/dynamic-active-model/foreign_key.rb', line 20

def model
  @model
end

Class Method Details

.id_suffixString

Gets the current foreign key suffix

Returns:

  • (String)

    The suffix used for foreign key columns



30
31
32
# File 'lib/dynamic-active-model/foreign_key.rb', line 30

def self.id_suffix
  @id_suffix || DEFAULT_ID_SUFFIX
end

.id_suffix=(val) ⇒ Object

Sets a custom foreign key suffix

Parameters:

  • val (String)

    The new suffix to use



36
37
38
# File 'lib/dynamic-active-model/foreign_key.rb', line 36

def self.id_suffix=(val)
  @id_suffix = val
end

Instance Method Details

#add(key, relationship_name = nil) ⇒ Object

Adds a foreign key to track

Parameters:

  • key (String)

    The foreign key column name

  • relationship_name (String, nil) (defaults to: nil)

    Optional custom name for the relationship



51
52
53
# File 'lib/dynamic-active-model/foreign_key.rb', line 51

def add(key, relationship_name = nil)
  @keys[key] = relationship_name || model.table_name.underscore
end

#generate_foreign_key(table_name) ⇒ String

Generates a standard foreign key name from a table name

Parameters:

  • table_name (String)

    The name of the referenced table

Returns:

  • (String)

    The generated foreign key column name



58
59
60
# File 'lib/dynamic-active-model/foreign_key.rb', line 58

def generate_foreign_key(table_name)
  table_name.underscore.singularize + self.class.id_suffix
end