Class: DeclareSchema::Model::ForeignKeyDefinition
- Inherits:
-
Object
- Object
- DeclareSchema::Model::ForeignKeyDefinition
- Includes:
- Comparable
- Defined in:
- lib/declare_schema/model/foreign_key_definition.rb
Instance Attribute Summary collapse
-
#child_table_name ⇒ Object
readonly
Returns the value of attribute child_table_name.
-
#constraint_name ⇒ Object
readonly
Returns the value of attribute constraint_name.
-
#foreign_key ⇒ Object
readonly
Returns the value of attribute foreign_key.
-
#foreign_key_name ⇒ Object
readonly
Returns the value of attribute foreign_key_name.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#on_delete_cascade ⇒ Object
readonly
Returns the value of attribute on_delete_cascade.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#parent_table_name ⇒ Object
readonly
Returns the value of attribute parent_table_name.
Class Method Summary collapse
Instance Method Summary collapse
- #<=>(rhs) ⇒ Object
-
#initialize(model, foreign_key, **options) ⇒ ForeignKeyDefinition
constructor
A new instance of ForeignKeyDefinition.
-
#parent_class ⇒ Object
returns the parent class as a Class object or nil if no :class_name option given.
Constructor Details
#initialize(model, foreign_key, **options) ⇒ ForeignKeyDefinition
Returns a new instance of ForeignKeyDefinition.
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 13 def initialize(model, foreign_key, **) @model = model @foreign_key = foreign_key.to_s.presence = @child_table_name = model.table_name # unless a table rename, which would happen when a class is renamed?? @parent_table_name = [:parent_table]&.to_s @foreign_key_name = [:foreign_key]&.to_s || @foreign_key @constraint_name = [:constraint_name]&.to_s.presence || model.connection.index_name(model.table_name, column: @foreign_key_name) @on_delete_cascade = [:dependent] == :delete end |
Instance Attribute Details
#child_table_name ⇒ Object (readonly)
Returns the value of attribute child_table_name.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def child_table_name @child_table_name end |
#constraint_name ⇒ Object (readonly)
Returns the value of attribute constraint_name.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def constraint_name @constraint_name end |
#foreign_key ⇒ Object (readonly)
Returns the value of attribute foreign_key.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def foreign_key @foreign_key end |
#foreign_key_name ⇒ Object (readonly)
Returns the value of attribute foreign_key_name.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def foreign_key_name @foreign_key_name end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def model @model end |
#on_delete_cascade ⇒ Object (readonly)
Returns the value of attribute on_delete_cascade.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def on_delete_cascade @on_delete_cascade end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def end |
#parent_table_name ⇒ Object (readonly)
Returns the value of attribute parent_table_name.
10 11 12 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 10 def parent_table_name @parent_table_name end |
Class Method Details
.for_model(model, old_table_name) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 28 def for_model(model, old_table_name) show_create_table = model.connection.select_rows("show create table #{model.connection.quote_table_name(old_table_name)}").first.last constraints = show_create_table.split("\n").map { |line| line.strip if line['CONSTRAINT'] }.compact constraints.map do |fkc| name, foreign_key, parent_table = fkc.match(/CONSTRAINT `([^`]*)` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)`/).captures = { constraint_name: name, parent_table: parent_table, foreign_key: foreign_key } [:dependent] = :delete if fkc['ON DELETE CASCADE'] new(model, foreign_key, **) end end |
Instance Method Details
#<=>(rhs) ⇒ Object
64 65 66 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 64 def <=>(rhs) key <=> rhs.send(:key) end |
#parent_class ⇒ Object
returns the parent class as a Class object or nil if no :class_name option given
48 49 50 51 52 53 54 55 56 |
# File 'lib/declare_schema/model/foreign_key_definition.rb', line 48 def parent_class if (class_name = [:class_name]) if class_name.is_a?(Class) class_name else class_name.to_s.constantize end end end |