Module: Torque::PostgreSQL::Inheritance::ClassMethods
- Defined in:
- lib/torque/postgresql/inheritance.rb
Instance Method Summary collapse
-
#base_class ⇒ Object
For all main purposes, physical inherited classes should have base_class as their own.
-
#casted_dependents ⇒ Object
Get the list of all ActiveRecord classes directly or indirectly associated by inheritance.
-
#compute_table_name ⇒ Object
Add an additional check to return the name of the table even when the class is inherited, but only if it is a physical inheritance.
-
#decorated_table_name ⇒ Object
Get the final decorated table, regardless of any special condition.
-
#inheritance_dependents ⇒ Object
Get the list of all tables directly or indirectly dependent of the current one.
-
#inheritance_merged_attributes ⇒ Object
Get a full list of all attributes from a model and all its dependents.
-
#physically_inheritances? ⇒ Boolean
Check whether the model’s table has directly or indirectly dependents.
-
#physically_inherited? ⇒ Boolean
Check if the model’s table depends on any inheritance.
-
#primary_key ⇒ Object
Primary key is one exception when getting information about the class, it must returns the superclass PK.
-
#raise_unable_to_cast(record_class_value) ⇒ Object
Raises an error message saying that the giver record class was not able to be casted since the model was not identified.
-
#reset_table_name ⇒ Object
Manually set the model name associated with tables name in order to facilitates the identification of inherited records.
Instance Method Details
#base_class ⇒ Object
For all main purposes, physical inherited classes should have base_class as their own
92 93 94 95 |
# File 'lib/torque/postgresql/inheritance.rb', line 92 def base_class return super unless physically_inherited? self end |
#casted_dependents ⇒ Object
Get the list of all ActiveRecord classes directly or indirectly associated by inheritance
60 61 62 63 64 |
# File 'lib/torque/postgresql/inheritance.rb', line 60 def casted_dependents @casted_dependents ||= inheritance_dependents.map do |table_name| [table_name, connection.schema_cache.lookup_model(table_name)] end.to_h end |
#compute_table_name ⇒ Object
Add an additional check to return the name of the table even when the class is inherited, but only if it is a physical inheritance
106 107 108 109 |
# File 'lib/torque/postgresql/inheritance.rb', line 106 def compute_table_name return super unless physically_inherited? decorated_table_name end |
#decorated_table_name ⇒ Object
Get the final decorated table, regardless of any special condition
80 81 82 83 84 85 86 87 88 |
# File 'lib/torque/postgresql/inheritance.rb', line 80 def decorated_table_name if parent < Base && !parent.abstract_class? contained = parent.table_name contained = contained.singularize if parent.pluralize_table_names contained += "_" end "#{full_table_name_prefix}#{contained}#{undecorated_table_name(name)}#{full_table_name_suffix}" end |
#inheritance_dependents ⇒ Object
Get the list of all tables directly or indirectly dependent of the current one
49 50 51 |
# File 'lib/torque/postgresql/inheritance.rb', line 49 def inheritance_dependents connection.schema_cache.associations(table_name) || [] end |
#inheritance_merged_attributes ⇒ Object
Get a full list of all attributes from a model and all its dependents
32 33 34 35 36 37 38 |
# File 'lib/torque/postgresql/inheritance.rb', line 32 def inheritance_merged_attributes @inheritance_merged_attributes ||= begin list = attribute_names list += casted_dependents.values.map(&:attribute_names) list.flatten.to_set.freeze end end |
#physically_inheritances? ⇒ Boolean
Check whether the model’s table has directly or indirectly dependents
54 55 56 |
# File 'lib/torque/postgresql/inheritance.rb', line 54 def physically_inheritances? inheritance_dependents.present? end |
#physically_inherited? ⇒ Boolean
Check if the model’s table depends on any inheritance
41 42 43 44 45 |
# File 'lib/torque/postgresql/inheritance.rb', line 41 def physically_inherited? @physically_inherited ||= connection.schema_cache.dependencies( defined?(@table_name) ? @table_name : decorated_table_name, ).present? end |
#primary_key ⇒ Object
Primary key is one exception when getting information about the class, it must returns the superclass PK
99 100 101 102 |
# File 'lib/torque/postgresql/inheritance.rb', line 99 def primary_key return super unless physically_inherited? superclass.primary_key end |
#raise_unable_to_cast(record_class_value) ⇒ Object
Raises an error message saying that the giver record class was not able to be casted since the model was not identified
113 114 115 116 117 118 119 120 |
# File 'lib/torque/postgresql/inheritance.rb', line 113 def raise_unable_to_cast(record_class_value) raise InheritanceError.new(<<~MSG.squish) An record was not able to be casted to type '#{record_class_value}'. If this table name doesn't represent a guessable model, please use 'Torque::PostgreSQL.conf.irregular_models = { '#{record_class_value}' => 'ModelName' }'. MSG end |
#reset_table_name ⇒ Object
Manually set the model name associated with tables name in order to facilitates the identification of inherited records
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/torque/postgresql/inheritance.rb', line 68 def reset_table_name table = super adapter = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter if Torque::PostgreSQL.config.eager_load && connection.is_a?(adapter) connection.schema_cache.add_model_name(table, self) end table end |