Module: Torque::PostgreSQL::Inheritance::ClassMethods
- Defined in:
- lib/torque/postgresql/inheritance.rb
Instance Method Summary collapse
-
#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.
-
#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
#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
92 93 94 95 |
# File 'lib/torque/postgresql/inheritance.rb', line 92 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 |
#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
99 100 101 102 103 104 105 106 |
# File 'lib/torque/postgresql/inheritance.rb', line 99 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 |